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
@@ -15,7 +15,7 @@ const main = () => {
15
15
  es: 'El servidor está en mantenimiento <br> volveremos pronto.',
16
16
  },
17
17
  },
18
- Render: function (id) {
18
+ instance: function (id) {
19
19
  return this.Data[id][getLang()] ? this.Data[id][getLang()] : this.Data[id]['en'];
20
20
  },
21
21
  };
@@ -47,17 +47,18 @@ const main = () => {
47
47
  <div class="abs center" style="top: 45%">
48
48
  ${icon}
49
49
  <br />
50
- <br />${Translate.Render('server-maintenance')}
50
+ <br />${Translate.instance('server-maintenance')}
51
51
  </div>`,
52
52
  );
53
53
  };
54
54
 
55
- SrrComponent = () => html`<script>
56
- {
57
- const s = ${s};
58
- const append = ${append};
59
- const getLang = ${getLang};
60
- const main = ${main};
61
- window.onload = main;
62
- }
63
- </script>`;
55
+ SrrComponent = () =>
56
+ html`<script>
57
+ {
58
+ const s = ${s};
59
+ const append = ${append};
60
+ const getLang = ${getLang};
61
+ const main = ${main};
62
+ window.onload = main;
63
+ }
64
+ </script>`;
@@ -19,7 +19,7 @@ const main = () => {
19
19
  es: 'Volver a <br> la pagina principal',
20
20
  },
21
21
  },
22
- Render: function (id) {
22
+ instance: function (id) {
23
23
  return this.Data[id][getLang()] ? this.Data[id][getLang()] : this.Data[id]['en'];
24
24
  },
25
25
  };
@@ -49,9 +49,9 @@ const main = () => {
49
49
  ${icon}
50
50
  <br />
51
51
  <br />
52
- <br />${Translate.Render('no-internet-connection')} <br />
52
+ <br />${Translate.instance('no-internet-connection')} <br />
53
53
  <br />
54
- <a target="_top" href="${location.origin}">${Translate.Render('back')}</a>
54
+ <a target="_top" href="${location.origin}">${Translate.instance('back')}</a>
55
55
  </div>`,
56
56
  );
57
57
  };
@@ -15,7 +15,7 @@ const main = () => {
15
15
  es: 'Volver a <br> la pagina principal',
16
16
  },
17
17
  },
18
- Render: function (id) {
18
+ instance: function (id) {
19
19
  return this.Data[id][getLang()] ? this.Data[id][getLang()] : this.Data[id]['en'];
20
20
  },
21
21
  };
@@ -182,7 +182,7 @@ const main = () => {
182
182
  <span class="bold">Test Page</span>
183
183
  <br />
184
184
  <br />
185
- <a target="_top" href="${location.origin}">${Translate.Render('back')}</a>
185
+ <a target="_top" href="${location.origin}">${Translate.instance('back')}</a>
186
186
  </div>`,
187
187
  );
188
188
  };
@@ -0,0 +1,274 @@
1
+ // Workbox modules are bundled inline by esbuild — no CDN, no importScripts.
2
+ import { setCacheNameDetails, clientsClaim } from 'workbox-core';
3
+ import { precacheAndRoute, cleanupOutdatedCaches, matchPrecache } from 'workbox-precaching';
4
+ import { registerRoute, setCatchHandler } from 'workbox-routing';
5
+ import { StaleWhileRevalidate, NetworkFirst, NetworkOnly } from 'workbox-strategies';
6
+ import { CacheableResponsePlugin } from 'workbox-cacheable-response';
7
+ import { ExpirationPlugin } from 'workbox-expiration';
8
+ import { BackgroundSyncPlugin } from 'workbox-background-sync';
9
+
10
+ // ─── Runtime config injected by client-build.js ───────────────────────────────
11
+ // OFFLINE_URL and MAINTENANCE_URL are absolute (proxy-prefixed) index.html paths
12
+ // resolved at build time from the SSR config's `fallbacks` map.
13
+ const payload = self.renderPayload || {};
14
+ const CACHE_PREFIX = payload.CACHE_PREFIX || 'engine-core';
15
+ const PRE_CACHED_RESOURCES = Array.isArray(payload.PRE_CACHED_RESOURCES) ? payload.PRE_CACHED_RESOURCES : [];
16
+ const OFFLINE_URL = payload.OFFLINE_URL || '/offline/index.html';
17
+ const MAINTENANCE_URL = payload.MAINTENANCE_URL || '/maintenance/index.html';
18
+
19
+ // Dedicated cache for fallback pages so they're available even if precacheAndRoute
20
+ // fails (e.g. a precache manifest entry returns non-200 during install).
21
+ const FALLBACK_CACHE = `${CACHE_PREFIX}-fallbacks`;
22
+
23
+ /**
24
+ * Ultimate inline HTML fallback used ONLY when the network is unavailable and
25
+ * the custom SSR pages (NoNetworkConnection / Maintenance views from config)
26
+ * have not yet been cached. Once cached on first successful visit, the custom
27
+ * pages take over.
28
+ * @param {'offline'|'maintenance'} kind
29
+ * @returns {Response}
30
+ */
31
+ const inlineFallback = (kind) => {
32
+ const title = kind === 'offline' ? 'Offline' : 'Maintenance';
33
+ const icon = kind === 'offline' ? '🌐' : '🔧';
34
+ const msg =
35
+ kind === 'offline'
36
+ ? 'You are offline. Please check your internet connection and try again.'
37
+ : 'The server is under maintenance. We\'ll be back shortly.';
38
+ const html = `<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"><title>${title}</title><style>body{display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;background:#f5f5f5;color:#333;padding:1rem;text-align:center}h1{font-size:2rem;margin-bottom:.5rem}p{font-size:1rem;color:#666;max-width:24rem}</style></head><body><h1>${icon} ${title}</h1><p>${msg}</p></body></html>`;
39
+ return new Response(html, {
40
+ status: 200,
41
+ statusText: 'OK',
42
+ headers: { 'Content-Type': 'text/html; charset=utf-8' },
43
+ });
44
+ };
45
+
46
+ /**
47
+ * Returns a Response for the cached fallback page.
48
+ * Tries (in order):
49
+ * 1. Dedicated FALLBACK_CACHE (primary & secondary URL)
50
+ * 2. Workbox precache (primary & secondary URL)
51
+ * 3. If online, fetches the custom SSR page from the server (caches it for next time)
52
+ * 4. Ultimate inline HTML string (never a browser error page)
53
+ *
54
+ * @param {'offline'|'maintenance'} kind
55
+ * @returns {Promise<Response>}
56
+ */
57
+ const getFallback = async (kind) => {
58
+ const primary = kind === 'maintenance' ? MAINTENANCE_URL : OFFLINE_URL;
59
+ const secondary = kind === 'maintenance' ? OFFLINE_URL : MAINTENANCE_URL;
60
+ const cache = await caches.open(FALLBACK_CACHE);
61
+
62
+ // ── 1. Try cache (own + precache) ──────────────────────────────────────
63
+ const cached =
64
+ (await cache.match(primary)) ||
65
+ (await matchPrecache(primary)) ||
66
+ (await cache.match(secondary)) ||
67
+ (await matchPrecache(secondary));
68
+ if (cached) return cached;
69
+
70
+ // ── 2. If we appear online, try to fetch the custom SSR page from server ─
71
+ // This handles the case where the install-time caching didn't happen yet
72
+ // (e.g. first install while server was up, but fallback pages weren't cached).
73
+ if (typeof navigator === 'undefined' || navigator.onLine !== false) {
74
+ try {
75
+ const fetchResp = await fetch(primary, { credentials: 'same-origin' });
76
+ if (fetchResp.ok) {
77
+ cache.put(primary, fetchResp.clone()).catch(() => { });
78
+ return fetchResp;
79
+ }
80
+ } catch (_) { }
81
+ try {
82
+ const fetchResp = await fetch(secondary, { credentials: 'same-origin' });
83
+ if (fetchResp.ok) {
84
+ cache.put(secondary, fetchResp.clone()).catch(() => { });
85
+ return fetchResp;
86
+ }
87
+ } catch (_) { }
88
+ }
89
+
90
+ // ── 3. Ultimate inline fallback ────────────────────────────────────────
91
+ return inlineFallback(kind);
92
+ };
93
+
94
+ /**
95
+ * Background-caches the offline and maintenance SSR pages for future use.
96
+ * Called after each successful navigation so the custom views are available
97
+ * the next time the network is unreachable.
98
+ */
99
+ const cacheFallbackPages = async () => {
100
+ const cache = await caches.open(FALLBACK_CACHE);
101
+ for (const url of [OFFLINE_URL, MAINTENANCE_URL]) {
102
+ try {
103
+ if (!(await cache.match(url))) {
104
+ const response = await fetch(url, { credentials: 'same-origin' });
105
+ if (response.ok) {
106
+ await cache.put(url, response);
107
+ }
108
+ }
109
+ } catch (_) {
110
+ // Network unavailable now — will try again on next navigation.
111
+ }
112
+ }
113
+ };
114
+
115
+ // ─── Core setup ───────────────────────────────────────────────────────────────
116
+ setCacheNameDetails({ prefix: CACHE_PREFIX });
117
+ clientsClaim();
118
+
119
+ self.addEventListener('install', (event) => {
120
+ self.skipWaiting();
121
+ // Note: install-time caching of fallback pages is unreliable in some browsers.
122
+ // We rely on the post-navigation eager caching in the navigation handler.
123
+ // The inline HTML fallback ensures the user never sees a browser error page
124
+ // before the custom SSR pages are cached.
125
+ });
126
+
127
+ self.addEventListener('activate', (event) => {
128
+ event.waitUntil(
129
+ (async () => {
130
+ if ('navigationPreload' in self.registration) {
131
+ await self.registration.navigationPreload.enable();
132
+ }
133
+ })(),
134
+ );
135
+ });
136
+
137
+ self.addEventListener('message', (event) => {
138
+ const { status } = event.data || {};
139
+ if (status === 'skipWaiting') {
140
+ self.skipWaiting();
141
+ return;
142
+ }
143
+ if (status === 'workbox-reset') {
144
+ event.waitUntil(
145
+ (async () => {
146
+ const names = await caches.keys();
147
+ await Promise.all(names.map((name) => caches.delete(name)));
148
+ event.ports?.[0]?.postMessage({ status: 'workbox-reset-done', deleted: names.length });
149
+ })(),
150
+ );
151
+ }
152
+ });
153
+
154
+ // ─── Precaching ───────────────────────────────────────────────────────────────
155
+ precacheAndRoute(PRE_CACHED_RESOURCES.map((url) => ({ url, revision: null })));
156
+ cleanupOutdatedCaches();
157
+
158
+ // ─── Static assets: StaleWhileRevalidate ─────────────────────────────────────
159
+ registerRoute(
160
+ ({ request, url }) =>
161
+ request.method === 'GET' &&
162
+ url.origin === self.location.origin &&
163
+ ['style', 'script', 'font', 'image'].includes(request.destination),
164
+ new StaleWhileRevalidate({
165
+ cacheName: `${CACHE_PREFIX}-assets`,
166
+ plugins: [
167
+ new CacheableResponsePlugin({ statuses: [0, 200] }),
168
+ new ExpirationPlugin({ maxEntries: 350, maxAgeSeconds: 30 * 24 * 60 * 60 }),
169
+ ],
170
+ }),
171
+ );
172
+
173
+ // ─── API GET: NetworkFirst with short timeout ─────────────────────────────────
174
+ registerRoute(
175
+ ({ request, url }) => request.method === 'GET' && url.pathname.includes('/api/'),
176
+ new NetworkFirst({
177
+ cacheName: `${CACHE_PREFIX}-api-get`,
178
+ networkTimeoutSeconds: 5,
179
+ plugins: [
180
+ new CacheableResponsePlugin({ statuses: [0, 200] }),
181
+ new ExpirationPlugin({ maxEntries: 120, maxAgeSeconds: 5 * 60 }),
182
+ ],
183
+ }),
184
+ );
185
+
186
+ // ─── API mutations: NetworkOnly + background sync replay ─────────────────────
187
+ registerRoute(
188
+ ({ request, url }) => request.method !== 'GET' && url.pathname.includes('/api/'),
189
+ new NetworkOnly({
190
+ plugins: [new BackgroundSyncPlugin('api-mutation-queue', { maxRetentionTime: 24 * 60 })],
191
+ }),
192
+ );
193
+
194
+ // ─── Navigation with offline/maintenance dispatcher ─────────────────────────
195
+ //
196
+ // CRITICAL: We use direct fetch() instead of NetworkFirst for navigation so
197
+ // that when the server is unreachable:
198
+ // - NetworkFirst would silently return a STALE cached real page (status 200)
199
+ // making it look like the app still works when it doesn't
200
+ // - fetch() throws on network failure → catch → fallback page
201
+ // - fetch() returns 5xx → maintenance fallback
202
+ //
203
+ // After each successful fetch, we eagerly cache the custom offline/maintenance
204
+ // SSR pages so they're available when the network goes down.
205
+ //
206
+ // The dispatcher logic:
207
+ // 1. If navigator.onLine === false → offline fallback immediately
208
+ // 2. Try navigation preload — if it succeeds (< 500) use it, else fall through
209
+ // 3. Try direct fetch() — if it succeeds (< 500) cache and return it
210
+ // 4. If fetch returned 5xx → maintenance fallback
211
+ // 5. If fetch threw (network down) → fallback based on connectivity
212
+ // ─────────────────────────────────────────────────────────────────────────────
213
+
214
+ registerRoute(
215
+ ({ request }) => request.mode === 'navigate',
216
+ async ({ event }) => {
217
+ // ── 1. Check browser offline state ────────────────────────────────────
218
+ if (typeof navigator !== 'undefined' && navigator.onLine === false) {
219
+ return getFallback('offline');
220
+ }
221
+
222
+ // ── 2. Try navigation preload ────────────────────────────────────────
223
+ try {
224
+ const preload = await event.preloadResponse;
225
+ if (preload && preload.status < 500) {
226
+ // Fire-and-forget: eagerly cache fallback pages in the background
227
+ // after a successful navigation so they're available when offline.
228
+ cacheFallbackPages().catch(() => { });
229
+ return preload;
230
+ }
231
+ } catch (_) {
232
+ // Preload threw — fall through to direct fetch
233
+ }
234
+
235
+ // ── 3. Try direct fetch to the server ─────────────────────────────────
236
+ try {
237
+ const response = await fetch(event.request);
238
+
239
+ if (response.status >= 500) {
240
+ return getFallback('maintenance');
241
+ }
242
+
243
+ if (response.ok) {
244
+ // Cache the successful response for future navigations
245
+ const cache = await caches.open(`${CACHE_PREFIX}-pages`);
246
+ cache.put(event.request, response.clone()).catch(() => { });
247
+
248
+ // Eagerly cache fallback pages in the background
249
+ cacheFallbackPages().catch(() => { });
250
+
251
+ return response;
252
+ }
253
+
254
+ return response;
255
+ } catch (_) {
256
+ const reallyOffline =
257
+ typeof navigator !== 'undefined' && navigator.onLine === false;
258
+ return getFallback(reallyOffline ? 'offline' : 'maintenance');
259
+ }
260
+ },
261
+ );
262
+
263
+ // ─── Global catch handler (non-navigation failures) ──────────────────────────
264
+ setCatchHandler(async ({ request }) => {
265
+ if (request.mode === 'navigate') {
266
+ const reallyOffline =
267
+ typeof navigator !== 'undefined' && navigator.onLine === false;
268
+ return getFallback(reallyOffline ? 'offline' : 'maintenance');
269
+ }
270
+ return new Response(JSON.stringify({ status: 'error', message: 'request failed' }), {
271
+ status: 503,
272
+ headers: { 'Content-Type': 'application/json' },
273
+ });
274
+ });
@@ -1,5 +1,8 @@
1
1
  import { MongooseDB } from './mongo/MongooseDB.js';
2
2
  import { loggerFactory } from '../server/logger.js';
3
+ import { getCapVariableName } from '../client/components/core/CommonJs.js';
4
+ import { resolveHostKeyContext } from '../server/conf.js';
5
+ import Underpost from '../index.js';
3
6
 
4
7
  /**
5
8
  * Module for managing and loading various database connections (e.g., Mongoose, MariaDB).
@@ -22,16 +25,107 @@ class DataBaseProviderService {
22
25
  * @type {object.<string, object>}
23
26
  * @method
24
27
  */
25
- #instance = {};
28
+ static #instance = {};
26
29
 
27
30
  /**
28
31
  * Retrieves the internal instance storage for direct access (used for backward compatibility).
29
32
  * @returns {object.<string, object>} The internal connection instance map.
30
33
  */
31
- get instance() {
34
+ static get instance() {
32
35
  return this.#instance;
33
36
  }
34
37
 
38
+ /**
39
+ * Retrieves a loaded provider bucket for a context.
40
+ * @param {{host?: string, path?: string}|string} [context={ host: '', path: '' }] - Context object or key.
41
+ * @param {string} [provider='mongoose'] - Provider name.
42
+ * @returns {{models: object, connection: object, close: Function, dbSignature?: string}} Provider bucket.
43
+ * @throws {Error} When the provider is not loaded for the context.
44
+ */
45
+ static getProvider(context = { host: '', path: '' }, provider = 'mongoose') {
46
+ const key = resolveHostKeyContext(context);
47
+ const entry = this.#instance[key]?.[provider];
48
+
49
+ if (!entry) throw new Error(`Database provider not loaded for context "${key}" (${provider})`);
50
+ return entry;
51
+ }
52
+
53
+ /**
54
+ * Returns the raw DB connection object for a context/provider.
55
+ * @param {{host?: string, path?: string}|string} [context={ host: '', path: '' }] - Context object or key.
56
+ * @param {string} [provider='mongoose'] - Provider name.
57
+ * @returns {object} Provider connection object.
58
+ */
59
+ static getConnection(context = { host: '', path: '' }, provider = 'mongoose') {
60
+ return this.getProvider(context, provider).connection;
61
+ }
62
+
63
+ /**
64
+ * Resolves a loaded model by name for a given context/provider.
65
+ * @param {string} modelName - API/model identifier.
66
+ * @param {{host?: string, path?: string}|string} [context={ host: '', path: '' }] - Context object or key.
67
+ * @param {string} [provider='mongoose'] - Provider name.
68
+ * @returns {object} Loaded model instance.
69
+ * @throws {Error} When the model is not loaded for the context.
70
+ */
71
+ static getModel(modelName, context = { host: '', path: '' }, provider = 'mongoose') {
72
+ const models = this.getProvider(context, provider).models || {};
73
+ const normalizedModelName = getCapVariableName(modelName);
74
+
75
+ // First try direct key (supports callers passing exact model names).
76
+ let model = models?.[modelName];
77
+ if (!model) {
78
+ model = models?.[normalizedModelName];
79
+ }
80
+
81
+ if (!model) {
82
+ // Final fallback: case-insensitive comparison without separators.
83
+ const target = String(modelName || '')
84
+ .replaceAll('-', '')
85
+ .replaceAll('_', '')
86
+ .replaceAll(' ', '')
87
+ .toLowerCase();
88
+ const resolvedModelName = Object.keys(models).find(
89
+ (key) => key.replaceAll('_', '').replaceAll(' ', '').toLowerCase() === target,
90
+ );
91
+ if (resolvedModelName) model = models[resolvedModelName];
92
+ }
93
+
94
+ if (!model) {
95
+ throw new Error(`Model not loaded for context "${resolveHostKeyContext(context)}": ${normalizedModelName}`);
96
+ }
97
+
98
+ return model;
99
+ }
100
+
101
+ /**
102
+ * Builds a minimal dispatcher bound to a specific context/provider.
103
+ * @param {{host?: string, path?: string}|string} [context={ host: '', path: '' }] - Context object or key.
104
+ * @param {string} [provider='mongoose'] - Provider name.
105
+ * @returns {{getConnection: () => object, getModel: (modelName: string) => object}} Bound accessor helpers.
106
+ */
107
+ static getDispatcher(context = { host: '', path: '' }, provider = 'mongoose') {
108
+ return {
109
+ getConnection: () => this.getConnection(context, provider),
110
+ getModel: (modelName) => this.getModel(modelName, context, provider),
111
+ };
112
+ }
113
+
114
+ /**
115
+ * Builds a stable signature used to detect provider configuration changes.
116
+ * @param {object} [db={}] - Database configuration object.
117
+ * @returns {string} Stringified signature for change detection.
118
+ */
119
+ static buildDbSignature(db = {}) {
120
+ return JSON.stringify({
121
+ authSource: db.authSource || '',
122
+ host: db.host || '',
123
+ name: db.name || '',
124
+ provider: db.provider || '',
125
+ replicaSet: db.replicaSet || '',
126
+ });
127
+ }
128
+
35
129
  /**
36
130
  * Loads and initializes a database provider based on the configuration.
37
131
  * If the connection is already loaded for the given host/path, it returns the existing instance.
@@ -48,21 +142,30 @@ class DataBaseProviderService {
48
142
  * @returns {Promise<object|undefined>} A promise that resolves to the initialized provider object
49
143
  * or `undefined` on error or if the provider is already loaded.
50
144
  */
51
- async load(options = { apis: [], host: '', path: '', db: {} }) {
145
+ static async load(options = { apis: [], host: '', path: '', db: {} }) {
52
146
  try {
53
147
  const { apis, host, path, db } = options;
54
- const key = `${host}${path}`;
148
+ const key = resolveHostKeyContext({ host, path });
149
+ const dbSignature = DataBaseProviderService.buildDbSignature(db);
55
150
 
56
151
  if (!this.#instance[key]) this.#instance[key] = {};
152
+ if (!db) return undefined;
57
153
 
58
- if (!db || this.#instance[key][db.provider]) return this.#instance[key][db.provider];
154
+ const currentProvider = this.#instance[key][db.provider];
155
+ if (currentProvider && currentProvider.dbSignature === dbSignature) return currentProvider;
156
+
157
+ if (currentProvider && currentProvider.close) {
158
+ await currentProvider.close();
159
+ delete this.#instance[key][db.provider];
160
+ }
59
161
 
60
162
  // logger.info(`Load ${db.provider} provider`, key);
61
163
  switch (db.provider) {
62
164
  case 'mongoose':
63
165
  {
64
- const conn = await MongooseDB.connect(db.host, db.name);
166
+ const conn = await MongooseDB.connect(db);
65
167
  this.#instance[key][db.provider] = {
168
+ dbSignature,
66
169
  models: await MongooseDB.loadModels({ conn, apis }),
67
170
  connection: conn,
68
171
  close: async () => {
@@ -97,17 +200,14 @@ class DataBaseProviderService {
97
200
  : {},
98
201
  };
99
202
  logger.error(error.message, { safeOptions });
203
+ if (Underpost.env.isInsideContainer()) Underpost.env.set('container-status', 'error');
100
204
  return undefined;
101
205
  }
102
206
  }
103
207
  }
104
208
 
105
- /**
106
- * Singleton instance of the DataBaseProviderService class for backward compatibility.
107
- * @alias DataBaseProvider
108
- * @memberof DataBaseProviderService
109
- * @type {DataBaseProviderService}
110
- */
111
- const DataBaseProvider = new DataBaseProviderService();
112
-
113
- export { DataBaseProvider, DataBaseProviderService as DataBaseProviderClass };
209
+ export {
210
+ DataBaseProviderService as DataBaseProviderClass,
211
+ DataBaseProviderService as default,
212
+ DataBaseProviderService,
213
+ };
@@ -1,5 +1,5 @@
1
1
  import { createPool } from 'mariadb';
2
-
2
+ import Underpost from '../../index.js';
3
3
  import { loggerFactory } from '../../server/logger.js';
4
4
 
5
5
  /**
@@ -51,6 +51,7 @@ class MariaDBService {
51
51
  console.log(result);
52
52
  } catch (error) {
53
53
  logger.error('MariaDB query failed', { error: error.message });
54
+ if (Underpost.env.isInsideContainer()) Underpost.env.set('container-status', 'error');
54
55
  } finally {
55
56
  if (conn) conn.release(); // release to pool
56
57
  await pool.end();