@underpostnet/cyberia 3.3.0 → 3.3.76

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 (568) hide show
  1. package/.dockerignore +1 -0
  2. package/.env.example +17 -5
  3. package/.github/workflows/coverall.cyberia.ci.yml +39 -14
  4. package/.github/workflows/cyberia-client.cd.yml +5 -0
  5. package/.github/workflows/cyberia-server.cd.yml +5 -0
  6. package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
  7. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
  8. package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
  9. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
  10. package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
  11. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
  12. package/.github/workflows/engine-cyberia.cd.yml +3 -0
  13. package/.github/workflows/engine-cyberia.ci.yml +4 -5
  14. package/.github/workflows/ghpkg.ci.yml +35 -20
  15. package/.github/workflows/hardhat.ci.yml +12 -11
  16. package/.github/workflows/npmpkg.ci.yml +17 -15
  17. package/.github/workflows/publish.cyberia.ci.yml +44 -0
  18. package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
  19. package/.github/workflows/release.cd.yml +1 -0
  20. package/.prettierignore +1 -0
  21. package/AGENTS.md +96 -0
  22. package/CHANGELOG.md +653 -2513
  23. package/CLI-HELP.md +323 -157
  24. package/Dockerfile +25 -9
  25. package/Dockerfile.dev +25 -9
  26. package/Dockerfile.test +5 -5
  27. package/README.md +48 -28
  28. package/bin/build.js +86 -41
  29. package/bin/build.template.js +8 -3
  30. package/bin/cyberia.js +1494 -1403
  31. package/bin/deploy.js +18 -104
  32. package/bin/index.js +1494 -1403
  33. package/compose.env +17 -5
  34. package/conf.js +98 -7
  35. package/deploy/cyberia-client/deploy.sh +46 -0
  36. package/deploy/cyberia-client/package.sh +17 -0
  37. package/deploy/cyberia-client/state.sh +15 -0
  38. package/deploy/cyberia-server/deploy.sh +46 -0
  39. package/deploy/cyberia-server/package.sh +17 -0
  40. package/deploy/cyberia-server/state.sh +15 -0
  41. package/deploy/dd-cyberia/deploy.sh +9 -29
  42. package/deploy/dd-cyberia/init.sh +38 -45
  43. package/deploy/dd-cyberia/package.sh +16 -0
  44. package/deploy/dd-cyberia/state.sh +14 -0
  45. package/deploy/dd-cyberia/sync-deploy.sh +133 -147
  46. package/deploy/lib/config.sh +29 -0
  47. package/deploy/lib/github-actions-logging.sh +610 -0
  48. package/deploy/lib/host.sh +194 -0
  49. package/deploy/lib/state.sh +65 -0
  50. package/deploy/pwa-microservices-template/deploy.sh +17 -42
  51. package/deploy/release/deploy.sh +9 -41
  52. package/deployment.yaml +7 -2
  53. package/docker-compose.yml +23 -17
  54. package/examples/static-page/README.md +19 -19
  55. package/examples/static-page/ssr-components/CustomPage.js +2 -2
  56. package/hardhat/hardhat.config.js +1 -6
  57. package/hardhat/package-lock.json +101 -40
  58. package/hardhat/package.json +2 -2
  59. package/manifests/alertmanager/deployment.yaml +81 -0
  60. package/manifests/blackbox-exporter/deployment.yaml +75 -0
  61. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
  62. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
  63. package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
  64. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  65. package/manifests/deployment/mongo-express/deployment.yaml +46 -27
  66. package/manifests/deployment/mongo-express/kustomization.yaml +9 -0
  67. package/manifests/deployment/mongo-express/mongo-express-nodeport.yaml +18 -0
  68. package/manifests/deployment/mongo-express/service.yaml +16 -0
  69. package/manifests/deployment/mongo-express-no-auth/disable-mongodb-auth.yaml +16 -0
  70. package/manifests/deployment/mongo-express-no-auth/kustomization.yaml +16 -0
  71. package/manifests/grafana/deployment.yaml +26 -7
  72. package/manifests/grafana/kustomization.yaml +1 -0
  73. package/manifests/grafana/service.yaml +6 -1
  74. package/manifests/mariadb/pv.yaml +1 -0
  75. package/manifests/mongodb/statefulset.yaml +9 -2
  76. package/manifests/mysql/pv-pvc.yaml +14 -1
  77. package/manifests/postgresql/pv.yaml +12 -1
  78. package/manifests/postgresql/pvc.yaml +1 -0
  79. package/manifests/prometheus/deployment.yaml +18 -22
  80. package/package.json +87 -12
  81. package/scripts/event-monitor.sh +56 -0
  82. package/scripts/k3s-node-setup.sh +27 -14
  83. package/scripts/kubeadm-node-setup.sh +31 -11
  84. package/scripts/maas-setup.sh +8 -8
  85. package/scripts/selinux-normalize.sh +907 -0
  86. package/scripts/shutdown-machine.sh +843 -0
  87. package/scripts/test-monitor.sh +5 -5
  88. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +15 -10
  89. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +36 -5
  90. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +7 -2
  91. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +90 -186
  92. package/src/api/core/core.controller.js +1 -1
  93. package/src/api/core/core.router.js +2 -2
  94. package/src/api/core/core.service.js +2 -2
  95. package/src/api/crypto/crypto.controller.js +1 -1
  96. package/src/api/crypto/crypto.service.js +1 -1
  97. package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
  98. package/src/api/cyberia-action/cyberia-action.router.js +3 -3
  99. package/src/api/cyberia-action/cyberia-action.service.js +5 -6
  100. package/src/api/cyberia-audio/cyberia-audio.controller.js +6 -0
  101. package/src/api/cyberia-audio/cyberia-audio.model.js +61 -0
  102. package/src/api/cyberia-audio/cyberia-audio.router.js +21 -0
  103. package/src/api/cyberia-audio/cyberia-audio.service.js +220 -0
  104. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +2 -4
  105. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +10 -19
  106. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +13 -35
  107. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +17 -34
  108. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
  109. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +1 -1
  110. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
  111. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
  112. package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
  113. package/src/api/cyberia-entity/cyberia-entity.model.js +2 -0
  114. package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
  115. package/src/api/cyberia-entity/cyberia-entity.service.js +3 -3
  116. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +8 -2
  117. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +31 -20
  118. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -2
  119. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +468 -5
  120. package/src/api/cyberia-instance/cyberia-fallback-capture.js +502 -0
  121. package/src/api/cyberia-instance/cyberia-fallback-world.js +29 -40
  122. package/src/api/cyberia-instance/cyberia-instance-boot.service.js +5 -5
  123. package/src/api/cyberia-instance/cyberia-instance-items.js +98 -0
  124. package/src/api/cyberia-instance/cyberia-instance-map.service.js +35 -142
  125. package/src/api/cyberia-instance/cyberia-instance.controller.js +2 -5
  126. package/src/api/cyberia-instance/cyberia-instance.model.js +0 -14
  127. package/src/api/cyberia-instance/cyberia-instance.router.js +5 -18
  128. package/src/api/cyberia-instance/cyberia-instance.service.js +5 -45
  129. package/src/api/cyberia-instance/cyberia-world-generator.js +8 -13
  130. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
  131. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +49 -75
  132. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
  133. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +76 -3
  134. package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
  135. package/src/api/cyberia-map/cyberia-map.router.js +1 -1
  136. package/src/api/cyberia-map/cyberia-map.service.js +8 -4
  137. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.controller.js +31 -0
  138. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.model.js +56 -0
  139. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.router.js +33 -0
  140. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +189 -0
  141. package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
  142. package/src/api/cyberia-quest/cyberia-quest.router.js +4 -4
  143. package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
  144. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
  145. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +1 -1
  146. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
  147. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
  148. package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
  149. package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
  150. package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
  151. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +403 -214
  152. package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
  153. package/src/api/cyberia-skill/cyberia-skill.model.js +6 -6
  154. package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
  155. package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
  156. package/src/api/default/default.controller.js +1 -1
  157. package/src/api/default/default.router.js +1 -1
  158. package/src/api/default/default.service.js +2 -2
  159. package/src/api/document/document.controller.js +1 -1
  160. package/src/api/document/document.router.js +1 -1
  161. package/src/api/document/document.service.js +2 -2
  162. package/src/api/file/file.controller.js +1 -1
  163. package/src/api/file/file.ref.js +153 -0
  164. package/src/api/file/file.ref.json +11 -2
  165. package/src/api/file/file.router.js +1 -1
  166. package/src/api/file/file.service.js +2 -2
  167. package/src/api/instance/instance.controller.js +1 -1
  168. package/src/api/instance/instance.router.js +1 -1
  169. package/src/api/instance/instance.service.js +2 -2
  170. package/src/api/ipfs/ipfs.controller.js +1 -1
  171. package/src/api/ipfs/ipfs.router.js +2 -2
  172. package/src/api/ipfs/ipfs.service.js +2 -2
  173. package/src/api/object-layer/object-layer.controller.js +1 -1
  174. package/src/api/object-layer/object-layer.model.js +47 -12
  175. package/src/api/object-layer/object-layer.router.js +12 -5
  176. package/src/api/object-layer/object-layer.service.js +116 -123
  177. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
  178. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
  179. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
  180. package/src/api/test/test.controller.js +1 -1
  181. package/src/api/test/test.service.js +1 -1
  182. package/src/api/user/guest.service.js +3 -3
  183. package/src/api/user/user.controller.js +1 -1
  184. package/src/api/user/user.router.js +2 -2
  185. package/src/api/user/user.service.js +4 -4
  186. package/src/api.js +5 -9
  187. package/src/cli/app.js +402 -0
  188. package/src/cli/baremetal.js +30 -35
  189. package/src/cli/client.js +306 -0
  190. package/src/cli/cloud-init.js +3 -3
  191. package/src/cli/cluster.js +191 -82
  192. package/src/cli/db.js +120 -68
  193. package/src/cli/deploy.js +157 -75
  194. package/src/cli/docker-compose.js +5 -5
  195. package/src/cli/domains.js +184 -0
  196. package/src/cli/dotenv-store.js +143 -0
  197. package/src/cli/event.js +2281 -0
  198. package/src/cli/fs-selection.js +115 -0
  199. package/src/cli/fs.js +159 -343
  200. package/src/cli/host.js +672 -0
  201. package/src/cli/image.js +4 -6
  202. package/src/cli/index.js +343 -151
  203. package/src/cli/ipfs.js +34 -30
  204. package/src/cli/kickstart.js +1 -1
  205. package/src/cli/kubectl.js +218 -41
  206. package/src/cli/lxd.js +3 -3
  207. package/src/cli/monitor.js +1359 -26
  208. package/src/cli/package.js +90 -0
  209. package/src/cli/release.js +16 -12
  210. package/src/cli/repository.js +586 -363
  211. package/src/cli/run.js +398 -843
  212. package/src/cli/secrets.js +2158 -964
  213. package/src/cli/ssh.js +478 -279
  214. package/src/cli/state.js +394 -0
  215. package/src/cli/static.js +2 -2
  216. package/src/cli/system.js +1 -1
  217. package/src/cli/test.js +203 -125
  218. package/src/cli/vultr.js +61 -21
  219. package/src/cli/wireguard.js +1112 -306
  220. package/src/client/components/core/CalendarCore.js +53 -96
  221. package/src/client/components/core/Docs.js +327 -303
  222. package/src/client/components/core/FileExplorer.js +0 -21
  223. package/src/client/components/core/Modal.js +56 -1
  224. package/src/client/components/core/PanelForm.js +4 -4
  225. package/src/client/components/core/Repository.js +56 -0
  226. package/src/client/components/core/Translate.js +7 -0
  227. package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
  228. package/src/client/components/core/Wallet.js +0 -11
  229. package/src/client/components/core/Worker.js +7 -1
  230. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
  231. package/src/client/components/cyberia/ActionEngineCyberia.js +12 -36
  232. package/src/client/components/cyberia/EntityEngineCyberia.js +492 -121
  233. package/src/client/components/cyberia/InstanceEngineCyberia.js +129 -160
  234. package/src/client/components/cyberia/InstanceSelectionView.js +7 -1
  235. package/src/client/components/cyberia/MapEngineCyberia.js +175 -69
  236. package/src/client/components/cyberia/ObjectLayerEngine.js +1011 -97
  237. package/src/client/components/cyberia/ObjectLayerEngineModal.js +81 -155
  238. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +113 -98
  239. package/src/client/components/cyberia/SharedDefaultsCyberia.js +215 -56
  240. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -35
  241. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +1 -1
  242. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +712 -76
  243. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
  244. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +0 -4
  245. package/src/client/components/default/AppShellDefault.js +1 -1
  246. package/src/client/components/default/SettingsDefault.js +2 -2
  247. package/src/client/components/itemledger/SettingsItemledger.js +2 -2
  248. package/src/client/components/underpost/AppShellUnderpost.js +3 -2
  249. package/src/client/components/underpost/SettingsUnderpost.js +2 -2
  250. package/src/client/public/cyberia-docs/ARCHITECTURE.md +15 -15
  251. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +313 -30
  252. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +51 -29
  253. package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +52 -53
  254. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +16 -11
  255. package/src/client/public/cyberia-docs/CYBERIA.md +48 -28
  256. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +11 -5
  257. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
  258. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  259. package/src/client/public/cyberia-docs/STATS-PROGRESSION.md +217 -0
  260. package/src/client/public/cyberia-docs/WHITE-PAPER.md +20 -12
  261. package/src/client/public/default/android-chrome-144x144.png +0 -0
  262. package/src/client/public/default/android-chrome-192x192.png +0 -0
  263. package/src/client/public/default/android-chrome-256x256.png +0 -0
  264. package/src/client/public/default/android-chrome-36x36.png +0 -0
  265. package/src/client/public/default/android-chrome-384x384.png +0 -0
  266. package/src/client/public/default/android-chrome-48x48.png +0 -0
  267. package/src/client/public/default/android-chrome-512x512.png +0 -0
  268. package/src/client/public/default/android-chrome-72x72.png +0 -0
  269. package/src/client/public/default/android-chrome-96x96.png +0 -0
  270. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  271. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  272. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  273. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  274. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  275. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  276. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  277. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  278. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  279. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  280. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  281. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  282. package/src/client/public/default/apple-touch-icon.png +0 -0
  283. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  284. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  285. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  286. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  287. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  288. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  289. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  290. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  291. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  292. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  293. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  294. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  295. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  296. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  297. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  298. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  299. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  300. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  301. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  302. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  303. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  304. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  305. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  306. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  307. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  308. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  309. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  310. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  311. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  312. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  313. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  314. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  315. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  316. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  317. package/src/client/public/default/assets/background/white.jpg +0 -0
  318. package/src/client/public/default/browserconfig.xml +1 -1
  319. package/src/client/public/default/favicon-16x16.png +0 -0
  320. package/src/client/public/default/favicon-32x32.png +0 -0
  321. package/src/client/public/default/favicon-48x48.png +0 -0
  322. package/src/client/public/default/favicon.ico +0 -0
  323. package/src/client/public/default/manifest.webmanifest +5 -5
  324. package/src/client/public/default/mstile-144x144.png +0 -0
  325. package/src/client/public/default/mstile-150x150.png +0 -0
  326. package/src/client/public/default/mstile-310x150.png +0 -0
  327. package/src/client/public/default/mstile-310x310.png +0 -0
  328. package/src/client/public/default/mstile-70x70.png +0 -0
  329. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  330. package/src/client/public/default/yandex-browser-manifest.json +1 -1
  331. package/src/client/services/cyberia-audio/cyberia-audio.service.js +99 -0
  332. package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +38 -0
  333. package/src/client/services/cyberia-instance/cyberia-instance.management.js +5 -4
  334. package/src/client/services/cyberia-instance/cyberia-instance.service.js +0 -40
  335. package/src/client/services/cyberia-map/cyberia-map.management.js +5 -4
  336. package/src/client/services/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +138 -0
  337. package/src/client/services/object-layer/object-layer.management.js +6 -10
  338. package/src/client/services/object-layer/object-layer.service.js +3 -1
  339. package/src/client/ssr/RootDocument.js +1 -1
  340. package/src/client/ssr/body/404.js +1 -1
  341. package/src/client/ssr/body/500.js +1 -1
  342. package/src/client/ssr/body/CacheControl.js +1 -1
  343. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
  344. package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
  345. package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
  346. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
  347. package/src/client/ssr/head/CryptokoynScripts.js +1 -1
  348. package/src/client/ssr/head/Css.js +1 -1
  349. package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
  350. package/src/client/ssr/head/DefaultScripts.js +1 -1
  351. package/src/client/ssr/head/ItemledgerScripts.js +1 -1
  352. package/src/client/ssr/head/Microdata.js +1 -1
  353. package/src/client/ssr/head/Production.js +1 -1
  354. package/src/client/ssr/head/Pwa.js +1 -1
  355. package/src/client/ssr/head/PwaItemledger.js +1 -1
  356. package/src/client/ssr/head/Seo.js +1 -1
  357. package/src/client/ssr/head/UnderpostScripts.js +1 -1
  358. package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
  359. package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
  360. package/src/client/ssr/views/Cyberia404.js +7 -5
  361. package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
  362. package/src/client/ssr/views/Maintenance.js +1 -1
  363. package/src/client/ssr/views/NoNetworkConnection.js +1 -1
  364. package/src/client/ssr/views/Test.js +1 -1
  365. package/src/client/sw/core.sw.js +20 -14
  366. package/src/client-builder/client-build-docs.js +92 -77
  367. package/src/client-builder/client-build-live.js +2 -2
  368. package/src/client-builder/client-build.js +105 -74
  369. package/src/client-builder/client-bundle.js +347 -0
  370. package/src/client-builder/client-dev-server.js +3 -3
  371. package/src/client-builder/client-icons.js +2 -2
  372. package/src/client-builder/ssr.js +3 -3
  373. package/src/client.build.js +3 -6
  374. package/src/client.dev.js +3 -6
  375. package/src/db/DataBaseProvider.js +186 -3
  376. package/src/db/mariadb/MariaDB.js +3 -2
  377. package/src/db/mongo/MongoBootstrap.js +273 -101
  378. package/src/db/mongo/MongoExpress.js +187 -0
  379. package/src/db/mongo/MongooseDB.js +7 -8
  380. package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
  381. package/src/grpc/cyberia/grpc-server.js +6 -8
  382. package/src/index.js +79 -23
  383. package/src/mailer/EmailRender.js +2 -2
  384. package/src/mailer/MailerInterceptor.js +87 -0
  385. package/src/mailer/MailerProvider.js +50 -6
  386. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +144 -147
  387. package/src/projects/cyberia/atlas-sprite-sheet-store.js +391 -0
  388. package/src/projects/cyberia/besu-genesis-generator.js +8 -17
  389. package/src/projects/cyberia/boot-contract-fixtures.js +32 -0
  390. package/src/projects/cyberia/catalog-cyberia.js +54 -10
  391. package/src/projects/cyberia/gemini-client.js +4 -4
  392. package/src/projects/cyberia/generate-saga.js +5 -12
  393. package/src/projects/cyberia/hot-reload-trigger.js +18 -29
  394. package/src/projects/cyberia/instance-backup.js +210 -0
  395. package/src/projects/cyberia/instance-data.js +178 -258
  396. package/src/projects/cyberia/ipfs-client.js +4 -4
  397. package/src/projects/cyberia/map-preview-generator.js +33 -69
  398. package/src/projects/cyberia/object-layer.js +153 -320
  399. package/src/projects/cyberia/seed-audio.js +139 -0
  400. package/src/projects/cyberia/semantic-layer-generator-skin.js +2 -8
  401. package/src/projects/cyberia/semantic-layer-generator.js +3 -19
  402. package/src/projects/cyberia/stat-balance.js +81 -0
  403. package/src/projects/cyberia/stat-commands.js +23 -0
  404. package/src/projects/cyberia/stat-contract-generator.js +101 -0
  405. package/src/projects/underpost/catalog-underpost.js +9 -1
  406. package/src/proxy.js +4 -7
  407. package/src/runtime/cyberia-client/Dockerfile +17 -8
  408. package/src/runtime/cyberia-client/Dockerfile.dev +13 -4
  409. package/src/runtime/cyberia-server/Dockerfile +18 -6
  410. package/src/runtime/cyberia-server/Dockerfile.dev +16 -3
  411. package/src/runtime/engine-cyberia/Dockerfile +25 -9
  412. package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
  413. package/src/runtime/engine-cyberia/Dockerfile.test +5 -5
  414. package/src/runtime/engine-cyberia/compose.env +17 -5
  415. package/src/runtime/engine-cyberia/docker-compose.yml +23 -17
  416. package/src/runtime/express/Express.js +32 -27
  417. package/src/runtime/lampp/Lampp.js +22 -70
  418. package/src/runtime/nginx/Nginx.js +1 -1
  419. package/src/runtime/wp/Wp.js +16 -48
  420. package/src/server/{catalog.js → build/catalog.js} +15 -5
  421. package/src/server/build/coverage.js +188 -0
  422. package/src/server/build/execution.js +402 -0
  423. package/src/server/build/package.js +508 -0
  424. package/src/server/build/testing.js +578 -0
  425. package/src/server/{dns.js → network/dns.js} +144 -11
  426. package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
  427. package/src/server/{middlewares.js → network/middlewares.js} +11 -5
  428. package/src/server/network/node-capability.js +98 -0
  429. package/src/server/{peer.js → network/peer.js} +3 -3
  430. package/src/server/{proxy.js → network/proxy.js} +7 -13
  431. package/src/server/network/router.js +356 -0
  432. package/src/server/{tls.js → network/tls.js} +2 -2
  433. package/src/server/{underpost-compression.js → network/underpost-compression.js} +1 -1
  434. package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
  435. package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
  436. package/src/server/{cri.js → ops/cri.js} +2 -2
  437. package/src/server/{cron.js → ops/cron.js} +349 -74
  438. package/src/server/ops/event-notification.js +284 -0
  439. package/src/server/{logger.js → ops/logger.js} +143 -23
  440. package/src/server/ops/monitoring.js +1724 -0
  441. package/src/server/{systemd.js → ops/systemd.js} +55 -1
  442. package/src/server/{conf.js → runtime/conf.js} +516 -423
  443. package/src/server/runtime/config-scope.js +215 -0
  444. package/src/server/runtime/environment.js +149 -0
  445. package/src/server/{process.js → runtime/process.js} +153 -12
  446. package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
  447. package/src/server/{runtime.js → runtime/runtime.js} +12 -8
  448. package/src/server/{start.js → runtime/start.js} +128 -39
  449. package/src/server/{auth.js → security/auth.js} +7 -8
  450. package/src/server/security/container-storage.js +382 -0
  451. package/src/server/{crypto.js → security/crypto.js} +1 -1
  452. package/src/server/{selinux.js → security/selinux.js} +1 -1
  453. package/src/server/{backup.js → storage/backup.js} +17 -8
  454. package/src/server/{data-query.js → storage/data-query.js} +17 -1
  455. package/src/server/storage/downloader.js +121 -0
  456. package/src/server/storage/repository.js +68 -0
  457. package/src/server/storage/zip.js +153 -0
  458. package/src/server.js +4 -7
  459. package/src/ws/IoInterface.js +1 -1
  460. package/src/ws/IoServer.js +1 -1
  461. package/src/ws/core/core.ws.connection.js +1 -1
  462. package/src/ws/core/core.ws.emit.js +1 -1
  463. package/src/ws/core/core.ws.server.js +1 -1
  464. package/src/ws/default/default.ws.connection.js +1 -1
  465. package/src/ws/default/default.ws.emit.js +1 -1
  466. package/src/ws/default/default.ws.server.js +1 -1
  467. package/test/e2e/event-e2e-public-ingress-down.js +45 -0
  468. package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
  469. package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
  470. package/test/{api.test.js → integration/app/api.test.js} +33 -14
  471. package/test/integration/app/cyberia/atlas-sprite-sheet-store.test.js +402 -0
  472. package/test/integration/app/cyberia/atlas-sprite-sheet.test.js +86 -0
  473. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +64 -0
  474. package/test/integration/app/cyberia/cyberia-entity-type-default.test.js +842 -0
  475. package/test/integration/app/cyberia/cyberia-instance-conf-coerce.test.js +53 -0
  476. package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +17 -23
  477. package/test/integration/app/cyberia/cyberia-instance-items.test.js +90 -0
  478. package/test/integration/app/cyberia/cyberia-load.test.js +466 -0
  479. package/test/integration/app/cyberia/cyberia-map-audio-conf.test.js +256 -0
  480. package/test/integration/app/cyberia/cyberia-stats.test.js +150 -0
  481. package/test/integration/app/cyberia/fallback-world-capture.test.js +338 -0
  482. package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
  483. package/test/integration/app/cyberia/object-layer-item-selection.test.js +56 -0
  484. package/test/integration/app/cyberia/object-layer-natural-key.test.js +32 -0
  485. package/test/integration/app/cyberia/seed-audio.test.js +275 -0
  486. package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
  487. package/test/integration/infra/1-security/config-scope.test.js +305 -0
  488. package/test/integration/infra/1-security/container-storage.test.js +356 -0
  489. package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
  490. package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
  491. package/test/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
  492. package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
  493. package/test/integration/infra/1-security/systemd-service.test.js +70 -0
  494. package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
  495. package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
  496. package/test/integration/infra/2-network/node-capability.test.js +182 -0
  497. package/test/integration/infra/2-network/wireguard-cli.test.js +1187 -0
  498. package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +649 -55
  499. package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
  500. package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
  501. package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
  502. package/test/integration/infra/3-cluster/mongo-express-deploy.test.js +156 -0
  503. package/test/integration/infra/4-ingress/api-cross-origin.test.js +79 -0
  504. package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
  505. package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
  506. package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
  507. package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +6 -6
  508. package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -4
  509. package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
  510. package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
  511. package/test/integration/infra/5-observability/event-notification.test.js +197 -0
  512. package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
  513. package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
  514. package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
  515. package/test/support/shell-harness.js +73 -0
  516. package/test/unit/build-template.test.js +97 -0
  517. package/test/unit/build-workflow-offline.test.js +132 -0
  518. package/test/unit/catalog.test.js +71 -0
  519. package/test/unit/client-build-docs.test.js +361 -0
  520. package/test/unit/client-bundle.test.js +313 -0
  521. package/test/unit/conf-loading.test.js +303 -0
  522. package/test/unit/conf-resolution.test.js +996 -0
  523. package/test/unit/coverage-artifact.test.js +221 -0
  524. package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
  525. package/test/unit/cyberia/instance-backup.test.js +183 -0
  526. package/test/unit/cyberia/instance-object-layer-items.test.js +46 -0
  527. package/test/unit/cyberia/publish-workflow.test.js +22 -0
  528. package/test/unit/cyberia/stat-balance.test.js +69 -0
  529. package/test/unit/deploy-env-resolution.test.js +38 -0
  530. package/test/unit/deploy-log-table.test.js +518 -0
  531. package/test/unit/downloader-integrity.test.js +98 -0
  532. package/test/unit/execution-profiles.test.js +219 -0
  533. package/test/unit/file-reference-registry.test.js +141 -0
  534. package/test/unit/fleet-sync-source.test.js +149 -0
  535. package/test/unit/fs-storage-paths.test.js +596 -0
  536. package/test/unit/logger-redaction.test.js +141 -0
  537. package/test/unit/package.test.js +457 -0
  538. package/test/unit/prepare-host.test.js +382 -0
  539. package/test/unit/process-environment.test.js +18 -0
  540. package/test/unit/propagation-message.test.js +78 -0
  541. package/test/unit/redeploy-plan.test.js +24 -0
  542. package/test/unit/release-bump.test.js +474 -0
  543. package/test/unit/ssh-output-redaction.test.js +28 -0
  544. package/test/unit/start-options.test.js +46 -0
  545. package/test/unit/test-tiers.test.js +220 -0
  546. package/test/unit/zip-archive.test.js +142 -0
  547. package/vitest.config.js +66 -0
  548. package/.nycrc +0 -9
  549. package/deploy/lib/logging.sh +0 -96
  550. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
  551. package/manifests/mongodb/pv-pvc.yaml +0 -59
  552. package/scripts/coverall-test-cyberia.sh +0 -24
  553. package/scripts/coverall-test.sh +0 -24
  554. package/scripts/link-local-underpost-cli.sh +0 -6
  555. package/src/api/cyberia-instance/cyberia-fallback-default-items.js +0 -63
  556. package/src/api/user/user.build.js +0 -16
  557. package/src/cli/env.js +0 -177
  558. package/src/client/components/core/Blockchain.js +0 -41
  559. package/src/client/components/core/Blog.js +0 -9
  560. package/src/client/components/core/KeyboardAvoidance.js +0 -145
  561. package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +0 -368
  562. package/src/client/public/default/assets/background/dark.jpg +0 -0
  563. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  564. package/src/client/public/default/assets/background/white0.jpg +0 -0
  565. package/src/client/public/doc/favicon.ico +0 -0
  566. package/src/client/public/doc/sitemap +0 -148
  567. package/src/server/downloader.js +0 -73
  568. package/src/server/environment.js +0 -98
@@ -1231,27 +1231,6 @@ class FileExplorer {
1231
1231
  { headerName: '', width: 60, cellRenderer: LoadFolderActionsRenderer },
1232
1232
  ],
1233
1233
  rowSelection: 'single',
1234
- onSelectionChanged: (event) => {
1235
- return;
1236
- const selectedRows = AgGrid.grids[gridFolderId].getSelectedRows();
1237
- console.log('selectedRows', { event, selectedRows });
1238
- if (selectedRows[0]) {
1239
- const newLocation = selectedRows[0].location;
1240
- if (newLocation === location) return;
1241
- location = newLocation;
1242
- setPath(`${window.location.pathname}?location=${location}`);
1243
- s(`.file-explorer-query-nav`).value = location;
1244
- const format = FileExplorer.documentDataFormat({ document: documentInstance, location });
1245
- files = format.files;
1246
- folders = format.folders;
1247
- applySearchFilter();
1248
- currentPage = 0;
1249
- displayedFiles = getPagedFiles();
1250
- AgGrid.grids[gridFileId].setGridOption('rowData', displayedFiles);
1251
- AgGrid.grids[gridFolderId].setGridOption('rowData', folders);
1252
- updatePaginationUI();
1253
- }
1254
- },
1255
1234
  },
1256
1235
  })}
1257
1236
  </div>
@@ -415,6 +415,17 @@ class Modal {
415
415
  },
416
416
  { key: `slide-menu-${idModal}` },
417
417
  );
418
+ // The fixed hamburger only opens the menu: it shows while the top bar is collapsed
419
+ // and the menu is closed. An open menu (50px or full) carries its own controls and
420
+ // already pushes the views aside, so neither the button nor the title padding apply.
421
+ const syncFixedMenuButton = () => {
422
+ const fixed = s(`.main-btn-menu-top-fixed-container`);
423
+ if (!fixed) return;
424
+ const collapsed = s(`.main-body-btn-ui-close`) && s(`.main-body-btn-ui-close`).classList.contains('hide');
425
+ const active = collapsed && Modal.Data[idModal][options.mode].width === 0;
426
+ fixed.classList[active ? 'remove' : 'add']('hide');
427
+ s('body').classList[active ? 'add' : 'remove']('main-btn-menu-top-fixed-active');
428
+ };
418
429
  barConfig.buttons.menu.onClick = () => {
419
430
  Modal.Data[idModal][options.mode].width = slideMenuWidth;
420
431
  s(`.btn-menu-${idModal}`).classList.add('hide');
@@ -437,6 +448,7 @@ class Modal {
437
448
  } else {
438
449
  s(`.${idModal}`).style.left = `0px`;
439
450
  }
451
+ syncFixedMenuButton();
440
452
  Responsive.triggerChanged(`slide-menu-${idModal}`);
441
453
  };
442
454
  barConfig.buttons.close.onClick = () => {
@@ -460,11 +472,12 @@ class Modal {
460
472
  } else {
461
473
  s(`.${idModal}`).style.left = `-${originSlideMenuWidth}px`;
462
474
  }
475
+ syncFixedMenuButton();
463
476
  Responsive.triggerChanged(`slide-menu-${idModal}`);
464
477
  };
465
478
  transition += `, width 0.3s`;
466
479
 
467
- setTimeout(() => {
480
+ setTimeout(async () => {
468
481
  setTimeout(btnCloseEvent);
469
482
  append(
470
483
  'body',
@@ -517,6 +530,46 @@ class Modal {
517
530
  Modal.actionBtnCenter();
518
531
  };
519
532
 
533
+ // Fixed top-left hamburger, shown only while the top bar is collapsed
534
+ // (main-body-btn-ui-close hidden). Not needed for 'top-bottom-bar' which
535
+ // keeps its own center action button in the bottom bar.
536
+ if (
537
+ idModal === 'modal-menu' &&
538
+ options.mode !== 'slide-menu-right' &&
539
+ options.barMode !== 'top-bottom-bar'
540
+ ) {
541
+ append(
542
+ 'body',
543
+ html`
544
+ <div
545
+ class="fix main-btn-menu-top-fixed-container hide"
546
+ style="top: 0px; left: 0px; z-index: 10; height: ${originHeightTopBar}px; width: ${originHeightTopBar}px"
547
+ >
548
+ ${await BtnIcon.instance({
549
+ style: `height: 100%`,
550
+ class: `in fll main-btn-menu-top action-bar-box action-btn-center-top-fixed`,
551
+ label: html`<div class="abs center">${barConfig.buttons.menu.label}</div>`,
552
+ })}
553
+ </div>
554
+ <style>
555
+ /* View modals sit at top: 0 while the top bar is collapsed; keep their
556
+ title clear of the fixed hamburger. The padding eases at the same pace
557
+ the views slide so the title moves once, not a jump and a slide back. */
558
+ .title-main-modal {
559
+ transition: padding-left 0.3s;
560
+ }
561
+ body.main-btn-menu-top-fixed-active .title-main-modal {
562
+ padding-left: ${originHeightTopBar}px;
563
+ }
564
+ </style>
565
+ `,
566
+ );
567
+ EventsUI.onClick(`.action-btn-center-top-fixed`, (e) => {
568
+ e.preventDefault();
569
+ Modal.actionBtnCenter();
570
+ });
571
+ }
572
+
520
573
  s(`.main-body-btn-bar-custom`).onclick = () => {
521
574
  if (s(`.main-body-btn-ui-close`).classList.contains('hide')) {
522
575
  s(`.main-body-btn-ui`).click();
@@ -548,6 +601,7 @@ class Modal {
548
601
  options.heightBottomBar = 0;
549
602
  s(`.slide-menu-top-bar`).classList.add('hide');
550
603
  s(`.bottom-bar`).classList.add('hide');
604
+ syncFixedMenuButton();
551
605
  s(`.modal-menu`).style.top = '0px';
552
606
  s(`.main-body-btn-container`).style.top = '50px';
553
607
  s(`.main-body`).style.top = '0px';
@@ -563,6 +617,7 @@ class Modal {
563
617
  s(`.main-body-btn-container`).style.top = `${options.heightTopBar + 50}px`;
564
618
  s(`.slide-menu-top-bar`).classList.remove('hide');
565
619
  s(`.bottom-bar`).classList.remove('hide');
620
+ syncFixedMenuButton();
566
621
  s(`.main-body`).style.top = `${options.heightTopBar}px`;
567
622
  s(`.main-body`).style.height = `${windowGetH() - options.heightTopBar}px`;
568
623
  for (const event of Object.keys(Modal.Data[idModal].onBarUiOpen))
@@ -734,7 +734,7 @@ class PanelForm {
734
734
  panelData.loading = false;
735
735
  LoadingAnimation.spinner.stop(`.panel-placeholder-bottom-${idPanel}`);
736
736
  };
737
- const renderSrrPanelData = async () =>
737
+ const renderSSRPanelData = async () =>
738
738
  await panelRender({
739
739
  data: range(0, 0).map((i) => ({
740
740
  id: i,
@@ -827,7 +827,7 @@ class PanelForm {
827
827
  // Always reset skip to 0 when reloading (whether cid exists or not)
828
828
  PanelForm.Data[idPanel].skip = 0;
829
829
  const containerSelector = `.${options.parentIdModal ? 'html-' + options.parentIdModal : 'main-body'}`;
830
- htmls(containerSelector, await renderSrrPanelData());
830
+ htmls(containerSelector, await renderSSRPanelData());
831
831
  await getPanelData();
832
832
  htmls(
833
833
  containerSelector,
@@ -906,10 +906,10 @@ class PanelForm {
906
906
  };
907
907
  }
908
908
  if (options.parentIdModal) {
909
- htmls(`.html-${options.parentIdModal}`, await renderSrrPanelData());
909
+ htmls(`.html-${options.parentIdModal}`, await renderSSRPanelData());
910
910
  return '';
911
911
  }
912
- return await renderSrrPanelData();
912
+ return await renderSSRPanelData();
913
913
  }
914
914
  }
915
915
  export { PanelForm };
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Repository identity on the client.
3
+ *
4
+ * The owner is resolved at build time by `src/server/storage/repository.js` and travels
5
+ * in `renderPayload.repository`. Composing every GitHub, Pages and Coveralls URL
6
+ * from it is what keeps a fork's links pointing at the fork instead of upstream.
7
+ *
8
+ * @module src/client/components/core/Repository.js
9
+ * @namespace PwaRepository
10
+ */
11
+
12
+ /**
13
+ * Identity injected by the build.
14
+ * @returns {{owner: string, name: string, template: string, packageSuffix: string}}
15
+ * @memberof PwaRepository
16
+ */
17
+ const repositoryIdentity = () => window.renderPayload.repository;
18
+
19
+ /**
20
+ * Repository holding the prebuilt package and its published demo.
21
+ * @returns {string}
22
+ * @memberof PwaRepository
23
+ */
24
+ const packageRepository = () => {
25
+ const { template, packageSuffix } = repositoryIdentity();
26
+ return `${template}${packageSuffix}`;
27
+ };
28
+
29
+ /**
30
+ * Composes a github.com URL under the resolved owner.
31
+ * @param {...string} segments - Path segments after the owner.
32
+ * @returns {string}
33
+ * @memberof PwaRepository
34
+ */
35
+ const githubUrl = (...segments) =>
36
+ `https://github.com/${[repositoryIdentity().owner, ...segments].filter(Boolean).join('/')}/`;
37
+
38
+ /**
39
+ * Composes a GitHub Pages URL under the resolved owner.
40
+ * @param {string} repository - Repository publishing the page.
41
+ * @returns {string}
42
+ * @memberof PwaRepository
43
+ */
44
+ const githubPagesUrl = (repository) => `https://${repositoryIdentity().owner}.github.io/${repository}/`;
45
+
46
+ /**
47
+ * Coveralls report for the engine repository this build came from.
48
+ * @returns {string}
49
+ * @memberof PwaRepository
50
+ */
51
+ const coverallsUrl = () => {
52
+ const { owner, name } = repositoryIdentity();
53
+ return `https://coveralls.io/github/${owner}/${name}`;
54
+ };
55
+
56
+ export { coverallsUrl, githubPagesUrl, githubUrl, packageRepository, repositoryIdentity };
@@ -42,6 +42,13 @@ class Translate {
42
42
  static hasChangedListener(key) {
43
43
  return translateEvents.has(key);
44
44
  }
45
+ static text(keyLang, options = { disableTextFormat: false }) {
46
+ const translations = Translate.Data[keyLang];
47
+ if (!translations) return options.disableTextFormat ? keyLang : textFormatted(keyLang);
48
+ const lang = s('html')?.lang || 'en';
49
+ const value = translations[lang] ?? translations.en ?? keyLang;
50
+ return options.disableTextFormat ? value : textFormatted(value);
51
+ }
45
52
  static async emitChanged(detail) {
46
53
  await translateEvents.emit(TranslateEventType.changed, detail);
47
54
  }
@@ -1,20 +1,20 @@
1
1
  /**
2
2
  * Utility module for fullscreen mode management with cross-browser and PWA compatibility.
3
3
  * Provides robust fullscreen detection, event handling, and UI synchronization.
4
- * @module src/client/components/core/FullScreen.js
5
- * @namespace FullScreenClient
4
+ * @module src/client/components/core/ViewModeController.js
5
+ * @namespace ViewModeControllerClient
6
6
  */
7
7
  import { Responsive } from './Responsive.js';
8
8
  import { ToggleSwitch } from './ToggleSwitch.js';
9
9
  import { Translate } from './Translate.js';
10
- import { checkFullScreen, fullScreenIn, fullScreenOut, s } from './VanillaJs.js';
10
+ import { fullScreenIn, fullScreenOut, s } from './VanillaJs.js';
11
11
  /**
12
12
  * Manages fullscreen mode state, event handling, and UI synchronization.
13
13
  * Supports all major browsers and PWA/Nativefier environments with comprehensive
14
14
  * vendor-prefixed API detection.
15
- * @memberof FullScreenClient
15
+ * @memberof ViewModeControllerClient
16
16
  */
17
- class FullScreen {
17
+ class ViewModeController {
18
18
  /**
19
19
  * Internal state flag tracking the intended fullscreen mode.
20
20
  * @type {boolean}
@@ -43,7 +43,7 @@ class FullScreen {
43
43
  * - Mozilla (Firefox)
44
44
  * - Microsoft (IE/Edge)
45
45
  * @private
46
- * @memberof FullScreenClient.FullScreen
46
+ * @memberof ViewModeControllerClient.ViewModeController
47
47
  * @returns {boolean} True if currently in fullscreen mode, false otherwise.
48
48
  */
49
49
  static _isFullScreen() {
@@ -62,16 +62,16 @@ class FullScreen {
62
62
  * Prevents race conditions using the _syncInProgress flag.
63
63
  * Updates the toggle switch only if there's a mismatch between UI and actual state.
64
64
  * @private
65
- * @memberof FullScreenClient.FullScreen
65
+ * @memberof ViewModeControllerClient.ViewModeController
66
66
  * @returns {void}
67
67
  */
68
68
  static _syncToggleState() {
69
- if (FullScreen._syncInProgress) return;
70
- FullScreen._syncInProgress = true;
71
- const actualFullScreen = FullScreen._isFullScreen();
69
+ if (ViewModeController._syncInProgress) return;
70
+ ViewModeController._syncInProgress = true;
71
+ const actualFullScreen = ViewModeController._isFullScreen();
72
72
  // Only update if there's a mismatch
73
- if (FullScreen._fullScreenSwitch !== actualFullScreen) {
74
- FullScreen._fullScreenSwitch = actualFullScreen;
73
+ if (ViewModeController._fullScreenSwitch !== actualFullScreen) {
74
+ ViewModeController._fullScreenSwitch = actualFullScreen;
75
75
  // Update toggle switch UI if it exists
76
76
  const toggle = s('.fullscreen');
77
77
  if (toggle && ToggleSwitch.Tokens[`fullscreen`]) {
@@ -82,18 +82,18 @@ class FullScreen {
82
82
  }
83
83
  }
84
84
  setTimeout(() => {
85
- FullScreen._syncInProgress = false;
85
+ ViewModeController._syncInProgress = false;
86
86
  }, 100);
87
87
  }
88
88
  /**
89
89
  * Event handler for fullscreen change events.
90
90
  * Triggers UI state synchronization when fullscreen mode changes.
91
91
  * @private
92
- * @memberof FullScreenClient.FullScreen
92
+ * @memberof ViewModeControllerClient.ViewModeController
93
93
  * @returns {void}
94
94
  */
95
95
  static _handleFullScreenChange() {
96
- FullScreen._syncToggleState();
96
+ ViewModeController._syncToggleState();
97
97
  }
98
98
  /**
99
99
  * Attaches all necessary event listeners for fullscreen mode detection.
@@ -103,20 +103,20 @@ class FullScreen {
103
103
  * - ESC key detection (fallback for manual fullscreen exit)
104
104
  * Only attaches listeners once to prevent duplicates.
105
105
  * @private
106
- * @memberof FullScreenClient.FullScreen
106
+ * @memberof ViewModeControllerClient.ViewModeController
107
107
  * @returns {void}
108
108
  */
109
109
  static _addEventListeners() {
110
- if (FullScreen._eventListenersAdded) return;
110
+ if (ViewModeController._eventListenersAdded) return;
111
111
  const events = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'];
112
112
  events.forEach((eventName) => {
113
- document.addEventListener(eventName, () => FullScreen._handleFullScreenChange(), false);
113
+ document.addEventListener(eventName, () => ViewModeController._handleFullScreenChange(), false);
114
114
  });
115
115
  // Additional check for PWA/Nativefier window resize events
116
116
  window.addEventListener(
117
117
  'resize',
118
118
  () => {
119
- setTimeout(() => FullScreen._syncToggleState(), 150);
119
+ setTimeout(() => ViewModeController._syncToggleState(), 150);
120
120
  },
121
121
  false,
122
122
  );
@@ -125,77 +125,80 @@ class FullScreen {
125
125
  'keydown',
126
126
  (e) => {
127
127
  if (e.key === 'Escape' || e.keyCode === 27) {
128
- setTimeout(() => FullScreen._syncToggleState(), 100);
128
+ setTimeout(() => ViewModeController._syncToggleState(), 100);
129
129
  }
130
130
  },
131
131
  false,
132
132
  );
133
- FullScreen._eventListenersAdded = true;
133
+ ViewModeController._eventListenersAdded = true;
134
134
  }
135
135
  /**
136
136
  * Enters fullscreen mode if not already in fullscreen.
137
137
  * Updates internal state and triggers fullscreen API.
138
138
  * Verifies the state change after a delay to ensure synchronization.
139
139
  * @private
140
- * @memberof FullScreenClient.FullScreen
140
+ * @memberof ViewModeControllerClient.ViewModeController
141
141
  * @returns {void}
142
142
  */
143
143
  static _enterFullScreen() {
144
- if (FullScreen._isFullScreen()) return;
145
- FullScreen._fullScreenSwitch = true;
144
+ if (ViewModeController._isFullScreen()) return;
145
+ ViewModeController._fullScreenSwitch = true;
146
146
  fullScreenIn();
147
147
  // Verify after attempt
148
- setTimeout(() => FullScreen._syncToggleState(), 300);
148
+ setTimeout(() => ViewModeController._syncToggleState(), 300);
149
149
  }
150
150
  /**
151
151
  * Exits fullscreen mode if currently in fullscreen.
152
152
  * Updates internal state and triggers fullscreen exit API.
153
153
  * Verifies the state change after a delay to ensure synchronization.
154
154
  * @private
155
- * @memberof FullScreenClient.FullScreen
155
+ * @memberof ViewModeControllerClient.ViewModeController
156
156
  * @returns {void}
157
157
  */
158
158
  static _exitFullScreen() {
159
- if (!FullScreen._isFullScreen()) return;
160
- FullScreen._fullScreenSwitch = false;
159
+ if (!ViewModeController._isFullScreen()) return;
160
+ ViewModeController._fullScreenSwitch = false;
161
161
  fullScreenOut();
162
162
  // Verify after attempt
163
- setTimeout(() => FullScreen._syncToggleState(), 300);
163
+ setTimeout(() => ViewModeController._syncToggleState(), 300);
164
164
  }
165
165
  /**
166
166
  * Renders the fullscreen toggle setting UI component.
167
167
  * Initializes fullscreen state detection, sets up event listeners,
168
168
  * and creates a toggle switch for user interaction.
169
169
  * Integrates with the Responsive system for dynamic updates.
170
- * @memberof FullScreenClient.FullScreen
170
+ * @memberof ViewModeControllerClient.ViewModeController
171
171
  * @returns {Promise<string>} A promise resolving to the HTML string for the fullscreen setting component.
172
172
  */
173
173
  static async RenderSetting() {
174
174
  // Initialize state from actual fullscreen status
175
- FullScreen._fullScreenSwitch = FullScreen._isFullScreen();
175
+ ViewModeController._fullScreenSwitch = ViewModeController._isFullScreen();
176
176
  // Setup event listeners once
177
- FullScreen._addEventListeners();
177
+ ViewModeController._addEventListeners();
178
178
  // Update responsive event
179
- Responsive.onChanged(() => {
180
- FullScreen._syncToggleState();
181
- }, { key: 'full-screen-settings' });
179
+ Responsive.onChanged(
180
+ () => {
181
+ ViewModeController._syncToggleState();
182
+ },
183
+ { key: 'full-screen-settings' },
184
+ );
182
185
  return html`<div class="in section-mp">
183
186
  ${await ToggleSwitch.instance({
184
187
  wrapper: true,
185
188
  wrapperLabel: html`<i class="fa-solid fa-expand"></i> ${Translate.instance('fullscreen')}`,
186
189
  id: 'fullscreen',
187
190
  disabledOnClick: true,
188
- checked: FullScreen._fullScreenSwitch,
191
+ checked: ViewModeController._fullScreenSwitch,
189
192
  on: {
190
193
  unchecked: () => {
191
- FullScreen._exitFullScreen();
194
+ ViewModeController._exitFullScreen();
192
195
  },
193
196
  checked: () => {
194
- FullScreen._enterFullScreen();
197
+ ViewModeController._enterFullScreen();
195
198
  },
196
199
  },
197
200
  })}
198
201
  </div>`;
199
202
  }
200
203
  }
201
- export { FullScreen };
204
+ export { ViewModeController };
@@ -1,5 +1,4 @@
1
1
  import { CryptoService } from '../../services/crypto/crypto.service.js';
2
- import { UserService } from '../../services/user/user.service.js';
3
2
  import { Auth } from './Auth.js';
4
3
  import { BtnIcon } from './BtnIcon.js';
5
4
  import { getId } from './CommonJs.js';
@@ -21,16 +20,6 @@ class Wallet {
21
20
  hash: 'SHA-256',
22
21
  };
23
22
  const format = 'jwk';
24
- (async () => {
25
- return;
26
- const { data: payload } = await UserService.get({ id: 'public-key-sign-token' });
27
- const signature = await window.crypto.subtle.sign(
28
- algorithm,
29
- keyPair.privateKey,
30
- new TextEncoder().encode(payload),
31
- );
32
- const base64Signature = btoa(String.fromCharCode(...new Uint8Array(signature)));
33
- })();
34
23
  const keyPair = await window.crypto.subtle.generateKey(algorithm, true, ['sign', 'verify']);
35
24
  const privateKey = await window.crypto.subtle.exportKey(format, keyPair.privateKey);
36
25
  const publicKey = await window.crypto.subtle.exportKey(format, keyPair.publicKey);
@@ -150,7 +150,13 @@ class PwaWorker {
150
150
  }
151
151
  const run = async () => {
152
152
  const registration = await this.getRegistration();
153
- if (!registration) await this.register();
153
+ if (registration) {
154
+ try {
155
+ await registration.update();
156
+ } catch (error) {
157
+ logger.error('Error updating service worker:', error);
158
+ }
159
+ } else await this.register();
154
160
  };
155
161
  if (document.readyState === 'complete') run();
156
162
  else window.addEventListener('load', run, { once: true });
@@ -1,11 +1,11 @@
1
1
  import { Css } from '../core/Css.js';
2
- import { FullScreen } from '../core/FullScreen.js';
2
+ import { ViewModeController } from '../core/ViewModeController.js';
3
3
  import { Translate } from '../core/Translate.js';
4
4
  import { Worker } from '../core/Worker.js';
5
5
 
6
6
  class SettingsCryptokoyn {
7
7
  static async instance() {
8
- let render = await FullScreen.RenderSetting();
8
+ let render = await ViewModeController.RenderSetting();
9
9
  render += await Css.RenderSetting();
10
10
  render += await Translate.RenderSetting();
11
11
  render += await Worker.RenderSetting();
@@ -13,7 +13,7 @@ import { CyberiaQuestService } from '../../services/cyberia-quest/cyberia-quest.
13
13
  import { CyberiaActionService } from '../../services/cyberia-action/cyberia-action.service.js';
14
14
  import { CyberiaDialogueService } from '../../services/cyberia-dialogue/cyberia-dialogue.service.js';
15
15
  import { CyberiaSkillService } from '../../services/cyberia-skill/cyberia-skill.service.js';
16
- import { QUEST_STEPS_TYPES, getDefaultCyberiaItemById, SKILL_LOGIC_IDS } from './SharedDefaultsCyberia.js';
16
+ import { QUEST_STEPS_TYPES, SKILL_LOGIC_IDS } from './SharedDefaultsCyberia.js';
17
17
 
18
18
  const textFilter = (filter) => ({ filterType: 'text', type: 'equals', filter });
19
19
  // DropDown invokes optionData.onClick on selection, so every option (including
@@ -90,8 +90,8 @@ class ActionEngineCyberia {
90
90
  containerClass: 'inl',
91
91
  serviceProvider: async (q) => {
92
92
  const result = await ObjectLayerService.searchItemIds({ q });
93
- if (result.status === 'success' && result.data?.itemIds) {
94
- return result.data.itemIds.map((itemId) => dropdownOption(itemId));
93
+ if (result.status === 'success' && result.data?.items) {
94
+ return result.data.items.map(({ id }) => dropdownOption(id));
95
95
  }
96
96
  return [];
97
97
  },
@@ -139,40 +139,16 @@ class ActionEngineCyberia {
139
139
  if (ActionEngineCyberia.imageCache[itemId]) return;
140
140
  ActionEngineCyberia.imageCache[itemId] = { img: null, loaded: false, error: false };
141
141
 
142
- const loadImage = (type, id) => {
143
- const img = new Image();
144
- img.onload = () => {
145
- ActionEngineCyberia.imageCache[itemId].img = img;
146
- ActionEngineCyberia.imageCache[itemId].loaded = true;
147
- if (onLoad) onLoad();
148
- };
149
- img.onerror = () => {
150
- ActionEngineCyberia.imageCache[itemId].error = true;
151
- };
152
- img.src = `${getProxyPath()}assets/${type}/${id}/08/0.png`;
142
+ const img = new Image();
143
+ img.onload = () => {
144
+ ActionEngineCyberia.imageCache[itemId].img = img;
145
+ ActionEngineCyberia.imageCache[itemId].loaded = true;
146
+ if (onLoad) onLoad();
153
147
  };
154
-
155
- const sharedItem = getDefaultCyberiaItemById(itemId)?.item;
156
- if (sharedItem?.type && sharedItem?.id) {
157
- loadImage(sharedItem.type, sharedItem.id);
158
- return;
159
- }
160
-
161
- ObjectLayerService.get({
162
- limit: 1,
163
- filterModel: { 'data.item.id': { filterType: 'text', type: 'equals', filter: itemId } },
164
- })
165
- .then((res) => {
166
- const doc = res?.data?.data?.[0];
167
- if (!doc || !doc.data?.item?.type || !doc.data?.item?.id) {
168
- ActionEngineCyberia.imageCache[itemId].error = true;
169
- return;
170
- }
171
- loadImage(doc.data.item.type, doc.data.item.id);
172
- })
173
- .catch(() => {
174
- ActionEngineCyberia.imageCache[itemId].error = true;
175
- });
148
+ img.onerror = () => {
149
+ ActionEngineCyberia.imageCache[itemId].error = true;
150
+ };
151
+ img.src = `${getProxyPath()}api/atlas-sprite-sheet/idle-preview/${itemId}`;
176
152
  }
177
153
 
178
154
  static preloadMapObjectLayers(onLoad) {