@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
@@ -1,368 +0,0 @@
1
- /**
2
- * Fallback World Engine — editor for the procedural fallback world's default items.
3
- *
4
- * The fallback world (src/api/cyberia-instance/cyberia-fallback-world.js) is
5
- * generated in memory and never persisted, so it has no CyberiaInstance document
6
- * to edit. This view is the trimmed-down counterpart of InstanceEngineCyberia:
7
- * only the default-items section plus a reload trigger.
8
- *
9
- * The composed item set is staged on the engine process and shipped with the
10
- * reload trigger — it is deliberately volatile (see cyberia-fallback-default-items.js),
11
- * so an engine restart returns the world to pure code defaults.
12
- */
13
-
14
- import { BtnIcon } from '../core/BtnIcon.js';
15
- import { Input } from '../core/Input.js';
16
- import { htmls, s } from '../core/VanillaJs.js';
17
- import { commonModeratorGuard } from '../core/CommonJs.js';
18
- import { NotificationManager } from '../core/NotificationManager.js';
19
- import { DropDown } from '../core/DropDown.js';
20
- import { CyberiaInstanceService } from '../../services/cyberia-instance/cyberia-instance.service.js';
21
- import { ObjectLayerService } from '../../services/object-layer/object-layer.service.js';
22
- import { DefaultCyberiaItems } from './SharedDefaultsCyberia.js';
23
-
24
- const dropdownValueKey = (value = '') => String(value).trim().replaceAll(' ', '-');
25
- const createDropdownOption = (value, onClick = () => {}, display = value, data = value) => ({
26
- value,
27
- display,
28
- data,
29
- onClick,
30
- });
31
-
32
- class FallbackWorldEngineCyberia {
33
- static itemIdsDropdownId = 'fallback-world-engine-item-ids-dropdown';
34
- static itemInventoryListId = 'fallback-world-engine-item-inventory-list';
35
- // itemId → defaultPlayerInventory flag for the currently selected item ids.
36
- static itemInventoryFlags = {};
37
- // Ids the code defaults already ship in an entity's defaultObjectLayers.
38
- // Selecting one and leaving it unchecked REMOVES it from those defaults, so
39
- // the list flags them instead of letting a player lose their starting kit.
40
- static entityDefaultItemIds = [];
41
-
42
- // Current selection, read from the dropdown's `oncheckvalues` (always live —
43
- // it is updated before `_renderSelectedBadges` runs, unlike `.value` which
44
- // lags by one in the option-click path).
45
- static getSelectedItemIds() {
46
- const token = DropDown.Tokens[FallbackWorldEngineCyberia.itemIdsDropdownId];
47
- if (!token) return [];
48
- const fromChecks = Object.values(token.oncheckvalues || {})
49
- .map((v) => v.data)
50
- .filter(Boolean);
51
- if (fromChecks.length > 0) return fromChecks;
52
- return Array.isArray(token.value) ? token.value.filter(Boolean) : [];
53
- }
54
-
55
- /** Payload shape shared with CyberiaInstance.itemIds. */
56
- static getItemIdsPayload() {
57
- return FallbackWorldEngineCyberia.getSelectedItemIds().map((id) => ({
58
- id,
59
- defaultPlayerInventory: !!FallbackWorldEngineCyberia.itemInventoryFlags[id],
60
- }));
61
- }
62
-
63
- // Render the per-item "Default Player Inventory" toggles for every selected
64
- // item id. Kept in sync with the dropdown via a MutationObserver on its badge
65
- // container (see render()).
66
- static renderItemInventoryList(containerId = FallbackWorldEngineCyberia.itemInventoryListId) {
67
- const container = s(`.${containerId}`);
68
- if (!container) return;
69
-
70
- const selected = FallbackWorldEngineCyberia.getSelectedItemIds();
71
-
72
- // Drop flags for items no longer selected so the payload never carries them.
73
- for (const key of Object.keys(FallbackWorldEngineCyberia.itemInventoryFlags)) {
74
- if (!selected.includes(key)) delete FallbackWorldEngineCyberia.itemInventoryFlags[key];
75
- }
76
-
77
- if (selected.length === 0) {
78
- htmls(
79
- `.${containerId}`,
80
- html`<div style="color:#888;font-size:12px;">
81
- No item IDs selected — the fallback world runs on pure code defaults.
82
- </div>`,
83
- );
84
- return;
85
- }
86
-
87
- let listHtml = '';
88
- for (const itemId of selected) {
89
- const isChecked = !!FallbackWorldEngineCyberia.itemInventoryFlags[itemId];
90
- const checked = isChecked ? 'checked' : '';
91
- const strips = !isChecked && FallbackWorldEngineCyberia.entityDefaultItemIds.includes(itemId);
92
- listHtml += html`<div class="fl" style="border-bottom:1px solid #444;padding:4px 0;align-items:center;">
93
- <div class="in fll" style="flex:1;font-size:12px;font-family:monospace;">
94
- ${itemId}
95
- ${strips
96
- ? html`<span
97
- style="color:#d90;font-size:11px;font-family:initial;margin-left:6px;"
98
- title="This id is part of the code entity defaults. Left unchecked, it is removed from them."
99
- ><i class="fa-solid fa-triangle-exclamation"></i> removes from entity defaults</span
100
- >`
101
- : ''}
102
- </div>
103
- <div class="in fll" style="display:flex;align-items:center;justify-content:flex-end;">
104
- <label style="font-size:11px;cursor:pointer;display:flex;align-items:center;gap:5px;">
105
- <input
106
- type="checkbox"
107
- class="fallback-world-engine-item-inv-checkbox"
108
- data-item-id="${itemId}"
109
- ${checked}
110
- style="cursor:pointer;"
111
- />
112
- Default Player Inventory
113
- </label>
114
- </div>
115
- </div>`;
116
- }
117
- htmls(`.${containerId}`, listHtml);
118
-
119
- container.querySelectorAll('.fallback-world-engine-item-inv-checkbox').forEach((cb) => {
120
- cb.onchange = () => {
121
- FallbackWorldEngineCyberia.itemInventoryFlags[cb.dataset.itemId] = cb.checked;
122
- };
123
- });
124
- }
125
-
126
- static syncItemIdsDropdownSelection(itemIds = []) {
127
- const dropdownId = FallbackWorldEngineCyberia.itemIdsDropdownId;
128
- if (!DropDown.Tokens[dropdownId]) return;
129
-
130
- // Accept both the `[{ id, defaultPlayerInventory }]` shape and a plain
131
- // string[], matching what the fallback-world endpoint may return.
132
- const normalized = (itemIds || [])
133
- .map((entry) => (typeof entry === 'string' ? { id: entry, defaultPlayerInventory: false } : entry))
134
- .filter((entry) => entry && entry.id);
135
-
136
- DropDown.Tokens[dropdownId].value = [];
137
- if (s(`.${dropdownId}`)) s(`.${dropdownId}`).value = [];
138
- DropDown.Tokens[dropdownId].oncheckvalues = {};
139
- htmls(`.dropdown-current-${dropdownId}`, '');
140
- htmls(`.${dropdownId}-render-container`, '');
141
-
142
- FallbackWorldEngineCyberia.itemInventoryFlags = {};
143
- const ids = [];
144
- for (const entry of normalized) {
145
- const key = dropdownValueKey(entry.id);
146
- DropDown.Tokens[dropdownId].oncheckvalues[key] = {
147
- data: entry.id,
148
- display: entry.id,
149
- value: entry.id,
150
- };
151
- FallbackWorldEngineCyberia.itemInventoryFlags[entry.id] = !!entry.defaultPlayerInventory;
152
- ids.push(entry.id);
153
- }
154
- DropDown.Tokens[dropdownId].value = [...ids];
155
- if (s(`.${dropdownId}`)) s(`.${dropdownId}`).value = [...ids];
156
- DropDown.Tokens[dropdownId]._renderSelectedBadges?.();
157
- FallbackWorldEngineCyberia.renderItemInventoryList();
158
- }
159
-
160
- static async buildItemIdsDropdown() {
161
- return await DropDown.instance({
162
- id: FallbackWorldEngineCyberia.itemIdsDropdownId,
163
- label: html`Object Layer Item IDs`,
164
- data: [],
165
- type: 'checkbox',
166
- containerClass: 'inl',
167
- excludeSelected: true,
168
- serviceProvider: async (q) => {
169
- const result = await ObjectLayerService.searchItemIds({ q });
170
- if (result.status === 'success' && result.data?.itemIds) {
171
- return result.data.itemIds.map((itemId) => createDropdownOption(itemId));
172
- }
173
- return [];
174
- },
175
- });
176
- }
177
-
178
- static async render(options = {}) {
179
- const { appStore } = options;
180
- const role = appStore?.Data?.user?.main?.model?.user?.role || 'guest';
181
- const canMutate = commonModeratorGuard(role);
182
- const idHotReloadUrl = 'fallback-world-engine-input-hot-reload-url';
183
- const idItemIdsDropdown = FallbackWorldEngineCyberia.itemIdsDropdownId;
184
- const idItemInventoryList = FallbackWorldEngineCyberia.itemInventoryListId;
185
-
186
- setTimeout(async () => {
187
- // Keep the per-item "Default Player Inventory" toggles in sync with the
188
- // item-ids dropdown. Every add/remove/clear re-renders the dropdown badge
189
- // container, so observing it is a reliable change hook (the dropdown
190
- // exposes no onChange callback).
191
- const itemBadgeContainer = s(`.dropdown-current-${idItemIdsDropdown}`);
192
- if (itemBadgeContainer) {
193
- const itemInventoryObserver = new MutationObserver(() => {
194
- FallbackWorldEngineCyberia.renderItemInventoryList();
195
- });
196
- itemInventoryObserver.observe(itemBadgeContainer, { childList: true, subtree: true });
197
- }
198
-
199
- // Load whatever this engine process currently serves, so reopening the
200
- // view shows the live set rather than an empty form.
201
- try {
202
- const result = await CyberiaInstanceService.getFallbackDefaultItems();
203
- if (result?.status === 'success') {
204
- FallbackWorldEngineCyberia.entityDefaultItemIds = result.data?.entityDefaultItemIds || [];
205
- FallbackWorldEngineCyberia.syncItemIdsDropdownSelection(result.data?.itemIds || []);
206
- }
207
- } catch (error) {
208
- NotificationManager.Push({ html: error.message, status: 'error' });
209
- }
210
- FallbackWorldEngineCyberia.renderItemInventoryList();
211
-
212
- if (s(`.btn-fallback-world-engine-load-defaults`))
213
- s(`.btn-fallback-world-engine-load-defaults`).onclick = () => {
214
- // Seed from the canonical registry so an operator starts from the
215
- // same list `import-default-items` creates ObjectLayers for. Ids the
216
- // entity defaults already ship start checked: selecting them
217
- // unchecked would strip them from those defaults, which is never what
218
- // "load the defaults" is asking for.
219
- const flags = Object.fromEntries(
220
- FallbackWorldEngineCyberia.getItemIdsPayload().map((e) => [e.id, e.defaultPlayerInventory]),
221
- );
222
- FallbackWorldEngineCyberia.syncItemIdsDropdownSelection(
223
- DefaultCyberiaItems.map((entry) => ({
224
- id: entry.item.id,
225
- defaultPlayerInventory:
226
- flags[entry.item.id] ?? FallbackWorldEngineCyberia.entityDefaultItemIds.includes(entry.item.id),
227
- })),
228
- );
229
- };
230
-
231
- if (s(`.btn-fallback-world-engine-clear`))
232
- s(`.btn-fallback-world-engine-clear`).onclick = () => {
233
- FallbackWorldEngineCyberia.syncItemIdsDropdownSelection([]);
234
- };
235
-
236
- if (s(`.btn-fallback-world-engine-toggle-hot-reload`))
237
- s(`.btn-fallback-world-engine-toggle-hot-reload`).onclick = () => {
238
- const body = s(`.fallback-world-engine-hot-reload-body`);
239
- const caret = s(`.fallback-world-engine-hot-reload-caret`);
240
- if (body) body.classList.toggle('hide');
241
- if (caret) {
242
- caret.classList.toggle('fa-caret-right');
243
- caret.classList.toggle('fa-caret-down');
244
- }
245
- };
246
-
247
- const triggerHotReload = async (mode) => {
248
- const buttons = [
249
- s(`.btn-fallback-world-engine-hot-reload`),
250
- s(`.btn-fallback-world-engine-hot-reload-incremental`),
251
- ];
252
- const statusSelector = `.fallback-world-engine-hot-reload-status`;
253
- const serverUrl = s(`.${idHotReloadUrl}`)?.value?.trim();
254
- if (!serverUrl) {
255
- NotificationManager.Push({ html: 'Set the cyberia-server URL first.', status: 'warning' });
256
- return;
257
- }
258
-
259
- for (const btn of buttons) if (btn) btn.disabled = true;
260
- if (s(statusSelector))
261
- htmls(statusSelector, html`<span style="color:#888;">Triggering ${mode} hot reload…</span>`);
262
- try {
263
- const result = await CyberiaInstanceService.fallbackHotReload({
264
- body: { serverUrl, mode, itemIds: FallbackWorldEngineCyberia.getItemIdsPayload() },
265
- });
266
- if (result.status === 'error') {
267
- NotificationManager.Push({ html: result.message, status: 'error' });
268
- if (s(statusSelector)) htmls(statusSelector, html`<span style="color:#d66;">${result.message}</span>`);
269
- return;
270
- }
271
- const { transport, durationMs, message, grpcError, itemIds } = result.data || {};
272
- NotificationManager.Push({ html: `Hot reload via ${transport}: ${message}`, status: 'success' });
273
- if (s(statusSelector))
274
- htmls(
275
- statusSelector,
276
- html`<span style="color:#6b6;">
277
- via <b>${transport}</b> · ${durationMs}ms · ${(itemIds || []).length} default item(s) staged ·
278
- ${message} </span
279
- >${grpcError ? html`<div style="color:#a80;">gRPC unavailable: ${grpcError}</div>` : ''}`,
280
- );
281
- } catch (error) {
282
- NotificationManager.Push({ html: error.message, status: 'error' });
283
- if (s(statusSelector)) htmls(statusSelector, html`<span style="color:#d66;">${error.message}</span>`);
284
- } finally {
285
- for (const btn of buttons) if (btn) btn.disabled = false;
286
- }
287
- };
288
-
289
- if (s(`.btn-fallback-world-engine-hot-reload`))
290
- s(`.btn-fallback-world-engine-hot-reload`).onclick = () => triggerHotReload('full');
291
- if (s(`.btn-fallback-world-engine-hot-reload-incremental`))
292
- s(`.btn-fallback-world-engine-hot-reload-incremental`).onclick = () => triggerHotReload('incremental');
293
- });
294
-
295
- return html`
296
- <div class="in fallback-world-engine-container">
297
- <div class="in section-mp" style="color:#888;font-size:12px;">
298
- The fallback world is generated in memory and never persisted, so it has no instance document to edit. Items
299
- selected here are staged on this engine process and applied when a cyberia-server reloads. They are volatile:
300
- an engine restart returns the world to its code defaults.
301
- </div>
302
-
303
- <div class="in section-mp" style="margin-top: 10px;">
304
- <div class="in input-label" style="font-size:14px;margin-bottom:5px;">Default Items</div>
305
- ${await FallbackWorldEngineCyberia.buildItemIdsDropdown()}
306
- </div>
307
- <div class="in section-mp" style="margin-top: 5px;">
308
- <div class="in input-label" style="font-size:13px;margin-bottom:5px;">Default Player Inventory</div>
309
- <div class="in" style="color:#888;font-size:12px;margin-bottom:6px;">
310
- Every selected id is resolved to an atlas at boot. Ids checked here are seeded into each new player's
311
- inventory (inactive, never auto-equipped); unchecked ids are explicitly removed from the player's default
312
- layers.
313
- </div>
314
- <div class="in ${idItemInventoryList}" style="max-height:200px;overflow-y:auto;"></div>
315
- ${canMutate
316
- ? html`<div class="in" style="display:flex;gap:5px;flex-wrap:wrap;margin-top:10px;">
317
- ${await BtnIcon.instance({
318
- class: 'wfa btn-fallback-world-engine-load-defaults',
319
- label: html`<i class="fa-solid fa-list-check"></i> Load Canonical Defaults`,
320
- })}
321
- ${await BtnIcon.instance({
322
- class: 'wfa btn-fallback-world-engine-clear',
323
- label: html`<i class="fa-solid fa-eraser"></i> Clear Selection`,
324
- })}
325
- </div>`
326
- : ''}
327
- </div>
328
-
329
- ${canMutate
330
- ? html`<div class="in section-mp" style="margin-top: 10px;">
331
- ${await BtnIcon.instance({
332
- class: 'wfa btn-fallback-world-engine-toggle-hot-reload',
333
- label: html`<i class="fa-solid fa-caret-right fallback-world-engine-hot-reload-caret"></i> Hot Reload`,
334
- })}
335
- <div class="in fallback-world-engine-hot-reload-body hide">
336
- <div class="in" style="color:#888;font-size:12px;margin:5px 0;">
337
- Stages the items above on this engine, then rebuilds the world of a running cyberia-server so it
338
- re-fetches them. Tries the gRPC control service first and falls back to the REST endpoint. For a
339
- multi-instance deployment, append the variant sub-path so the trigger reaches the right world (e.g.
340
- <code>https://server.cyberiaonline.com/TEST</code>); the default world uses the bare origin.
341
- </div>
342
- ${await Input.instance({
343
- id: idHotReloadUrl,
344
- label: html`<i class="fa-solid fa-server"></i> Cyberia Server URL`,
345
- containerClass: 'in',
346
- placeholder: 'https://server.cyberiaonline.com/TEST',
347
- type: 'text',
348
- })}
349
- <div class="in" style="display:flex;gap:5px;flex-wrap:wrap;margin-top:5px;">
350
- ${await BtnIcon.instance({
351
- class: 'wfa btn-fallback-world-engine-hot-reload',
352
- label: html`<i class="fa-solid fa-rotate"></i> Trigger Hot Reload`,
353
- })}
354
- ${await BtnIcon.instance({
355
- class: 'wfa btn-fallback-world-engine-hot-reload-incremental',
356
- label: html`<i class="fa-solid fa-layer-group"></i> Incremental (assets only)`,
357
- })}
358
- </div>
359
- <div class="in fallback-world-engine-hot-reload-status" style="margin-top:5px;font-size:12px;"></div>
360
- </div>
361
- </div>`
362
- : ''}
363
- </div>
364
- `;
365
- }
366
- }
367
-
368
- export { FallbackWorldEngineCyberia };
Binary file
@@ -1,148 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <xsl:stylesheet version="2.0"
3
- xmlns:html="http://www.w3.org/TR/REC-html40"
4
- xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
5
- xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
6
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
7
- <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />
8
- <xsl:template match="/">
9
- <html xmlns="http://www.w3.org/1999/xhtml">
10
- <head>
11
- <title>XML Sitemap</title>
12
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
13
- <style type="text/css">
14
- body {
15
- font-family: sans-serif;
16
- font-size: 16px;
17
- color: #242628;
18
- }
19
- a {
20
- color: #000;
21
- text-decoration: none;
22
- }
23
- a:hover {
24
- text-decoration: underline;
25
- }
26
- table {
27
- border: none;
28
- border-collapse: collapse;
29
- width: 100%
30
- }
31
- th {
32
- text-align: left;
33
- padding-right: 30px;
34
- font-size: 11px;
35
- }
36
- thead th {
37
- border-bottom: 1px solid #7d878a;
38
- cursor: pointer;
39
- }
40
- td {
41
- font-size:11px;
42
- padding: 5px;
43
- }
44
- tr:nth-child(odd) td {
45
- background-color: rgba(0,0,0,0.04);
46
- }
47
- tr:hover td {
48
- background-color: #e2edf2;
49
- }
50
-
51
- #content {
52
- margin: 0 auto;
53
- padding: 2% 5%;
54
- max-width: 800px;
55
- }
56
-
57
- .desc {
58
- margin: 18px 3px;
59
- line-height: 1.2em;
60
- }
61
- .desc a {
62
- color: #5ba4e5;
63
- }
64
- </style>
65
- </head>
66
- <body>
67
- <div id="content">
68
- <h1>XML Sitemap</h1>
69
- <p class="desc"> This is a sitemap generated by <a
70
- href="https://www.nexodev.org">nexodev.org</a>
71
- </p>
72
- <xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) &gt; 0">
73
- <table id="sitemap" cellpadding="3">
74
- <thead>
75
- <tr>
76
- <th width="75%">Sitemap</th>
77
- <th width="25%">Last Modified</th>
78
- </tr>
79
- </thead>
80
- <tbody>
81
- <xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
82
- <xsl:variable name="sitemapURL">
83
- <xsl:value-of select="sitemap:loc" />
84
- </xsl:variable>
85
- <tr>
86
- <td>
87
- <a href="{$sitemapURL}">
88
- <xsl:value-of select="sitemap:loc" />
89
- </a>
90
- </td>
91
- <td>
92
- <xsl:value-of
93
- select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))" />
94
- </td>
95
- </tr>
96
- </xsl:for-each>
97
- </tbody>
98
- </table>
99
- </xsl:if>
100
- <xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) &lt; 1">
101
- <p class="desc">
102
- <a href="{{web-url}}sitemap.xml" class="back-link">&#8592; Back to index</a>
103
- </p>
104
- <table
105
- id="sitemap" cellpadding="3">
106
- <thead>
107
- <tr>
108
- <th width="70%">URL (<xsl:value-of
109
- select="count(sitemap:urlset/sitemap:url)" /> total)</th>
110
- <th width="15%">Images</th>
111
- <th title="Last Modification Time" width="15%">Last Modified</th>
112
- </tr>
113
- </thead>
114
- <tbody>
115
- <xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'" />
116
- <xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
117
- <xsl:for-each select="sitemap:urlset/sitemap:url">
118
- <tr>
119
- <td>
120
- <xsl:variable name="itemURL">
121
- <xsl:value-of select="sitemap:loc" />
122
- </xsl:variable>
123
- <a href="{$itemURL}">
124
- <xsl:value-of select="sitemap:loc" />
125
- </a>
126
- </td>
127
- <td>
128
- <xsl:value-of select="count(image:image)" />
129
- </td>
130
- <td>
131
- <xsl:value-of
132
- select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)))" />
133
- </td>
134
- </tr>
135
- </xsl:for-each>
136
- </tbody>
137
- </table>
138
- <p
139
- class="desc">
140
- <a href="{{web-url}}sitemap.xml" class="back-link">&#8592; Back to index</a>
141
- </p>
142
- </xsl:if>
143
- </div>
144
- </body>
145
- </html>
146
-
147
- </xsl:template>
148
- </xsl:stylesheet>
@@ -1,73 +0,0 @@
1
- /**
2
- * Provides a utility class for downloading files from a URL and saving them to the local filesystem.
3
- * @module src/server/downloader.js
4
- * @namespace Downloader
5
- */
6
-
7
- import axios from 'axios';
8
- import fs from 'fs';
9
- import { loggerFactory } from './logger.js';
10
-
11
- const logger = loggerFactory(import.meta);
12
-
13
- /**
14
- * Main class for handling file downloading operations.
15
- * All utility methods are implemented as static to serve as a namespace container.
16
- * @class Downloader
17
- * @augments Downloader
18
- * @memberof Downloader
19
- */
20
- class Downloader {
21
- /**
22
- * Downloads a file from a given URL and pipes the stream to a local file path.
23
- * @static
24
- * @memberof Downloader
25
- * @param {string} url The URL of the file to download.
26
- * @param {string} fullPath The full local path where the file should be saved.
27
- * @param {object} [options] Axios request configuration options.
28
- * @param {string} [options.method='get'] HTTP method.
29
- * @param {string} [options.responseType='stream'] Expected response type.
30
- * @returns {Promise<string>} Resolves with the full path of the saved file on success.
31
- * @memberof Downloader
32
- */
33
- static downloadFile(url, fullPath, options = { method: 'get', responseType: 'stream' }) {
34
- return new Promise((resolve, reject) =>
35
- axios({
36
- url,
37
- ...options,
38
- })
39
- .then((response) => {
40
- // Create a write stream to save the file to the specified path
41
- const writer = fs.createWriteStream(fullPath);
42
- response.data.pipe(writer);
43
- writer.on('finish', () => {
44
- logger.info('Download completet');
45
- return resolve(fullPath);
46
- });
47
- writer.on('error', (error) => {
48
- logger.error('Error downloading the file');
49
- // Cleanup incomplete file if possible
50
- if (fs.existsSync(fullPath)) fs.unlinkSync(fullPath);
51
- return reject(error);
52
- });
53
- })
54
- .catch((error) => {
55
- logger.error('Error in the request');
56
- return reject(error);
57
- }),
58
- );
59
- }
60
- }
61
-
62
- export default Downloader;
63
-
64
- /**
65
- * @function downloadFile
66
- * @description Backward compatibility export for `Downloader.downloadFile`.
67
- * @param {string} url The URL of the file to download.
68
- * @param {string} fullPath The full local path where the file should be saved.
69
- * @param {object} [options] Axios request configuration options.
70
- * @returns {Promise<string>} Resolves with the full path of the saved file on success.
71
- * @memberof Downloader
72
- */
73
- export const downloadFile = Downloader.downloadFile;