cyberia 3.2.5 → 3.2.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +8 -2
  2. package/.github/workflows/npmpkg.ci.yml +1 -0
  3. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  4. package/.github/workflows/release.cd.yml +2 -2
  5. package/.vscode/extensions.json +9 -9
  6. package/.vscode/settings.json +20 -4
  7. package/CHANGELOG.md +563 -1
  8. package/CLI-HELP.md +130 -34
  9. package/Dockerfile +0 -4
  10. package/README.md +194 -607
  11. package/bin/build.js +42 -12
  12. package/bin/build.template.js +187 -0
  13. package/bin/cyberia.js +1367 -281
  14. package/bin/deploy.js +582 -3
  15. package/bin/index.js +1367 -281
  16. package/bump.config.js +26 -0
  17. package/conf.js +195 -111
  18. package/deployment.yaml +6 -222
  19. package/hardhat/package-lock.json +118 -149
  20. package/hardhat/package.json +5 -4
  21. package/jsconfig.json +1 -1
  22. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
  23. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
  24. package/manifests/deployment/dd-cyberia-development/deployment.yaml +6 -222
  25. package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
  26. package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
  27. package/manifests/deployment/dd-test-development/deployment.yaml +138 -66
  28. package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
  29. package/manifests/kind-config-dev.yaml +8 -0
  30. package/manifests/lxd/lxd-admin-profile.yaml +12 -3
  31. package/manifests/mongodb/pv-pvc.yaml +44 -8
  32. package/manifests/mongodb/statefulset.yaml +55 -68
  33. package/manifests/mongodb-4.4/headless-service.yaml +10 -0
  34. package/manifests/mongodb-4.4/kustomization.yaml +3 -1
  35. package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
  36. package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
  37. package/manifests/mongodb-4.4/statefulset.yaml +79 -0
  38. package/manifests/mongodb-4.4/storage-class.yaml +9 -0
  39. package/manifests/valkey/statefulset.yaml +1 -1
  40. package/manifests/valkey/valkey-nodeport.yaml +17 -0
  41. package/package.json +45 -24
  42. package/proxy.yaml +10 -118
  43. package/scripts/ipxe-setup.sh +52 -49
  44. package/scripts/k3s-node-setup.sh +83 -48
  45. package/scripts/lxd-vm-setup.sh +193 -8
  46. package/scripts/maas-nat-firewalld.sh +145 -0
  47. package/scripts/nat-iptables.sh +103 -18
  48. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
  49. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
  50. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
  51. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
  52. package/src/api/core/core.controller.js +10 -10
  53. package/src/api/core/core.router.js +19 -14
  54. package/src/api/core/core.service.js +15 -15
  55. package/src/api/crypto/crypto.controller.js +8 -8
  56. package/src/api/crypto/crypto.router.js +18 -12
  57. package/src/api/crypto/crypto.service.js +11 -11
  58. package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
  59. package/src/api/cyberia-action/cyberia-action.model.js +87 -0
  60. package/src/api/cyberia-action/cyberia-action.router.js +31 -0
  61. package/src/api/cyberia-action/cyberia-action.service.js +42 -0
  62. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
  63. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
  64. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
  65. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
  66. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
  67. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
  68. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
  69. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
  70. package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
  71. package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
  72. package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
  73. package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
  74. package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
  75. package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
  76. package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
  77. package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
  78. package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
  79. package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
  80. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
  81. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +18 -49
  82. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
  83. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
  84. package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
  85. package/src/api/cyberia-map/cyberia-map.router.js +35 -30
  86. package/src/api/cyberia-map/cyberia-map.service.js +17 -17
  87. package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
  88. package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
  89. package/src/api/cyberia-quest/cyberia-quest.router.js +31 -0
  90. package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
  91. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
  92. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
  93. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +31 -0
  94. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
  95. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
  96. package/src/api/default/default.controller.js +10 -10
  97. package/src/api/default/default.router.js +22 -18
  98. package/src/api/default/default.service.js +15 -15
  99. package/src/api/document/document.controller.js +12 -12
  100. package/src/api/document/document.model.js +10 -16
  101. package/src/api/document/document.router.js +28 -23
  102. package/src/api/document/document.service.js +100 -23
  103. package/src/api/file/file.controller.js +8 -8
  104. package/src/api/file/file.model.js +10 -10
  105. package/src/api/file/file.router.js +19 -13
  106. package/src/api/file/file.service.js +45 -43
  107. package/src/api/instance/instance.controller.js +10 -10
  108. package/src/api/instance/instance.model.js +4 -10
  109. package/src/api/instance/instance.router.js +29 -24
  110. package/src/api/instance/instance.service.js +16 -16
  111. package/src/api/ipfs/ipfs.controller.js +12 -12
  112. package/src/api/ipfs/ipfs.model.js +4 -13
  113. package/src/api/ipfs/ipfs.router.js +21 -16
  114. package/src/api/ipfs/ipfs.service.js +22 -36
  115. package/src/api/object-layer/object-layer.controller.js +12 -12
  116. package/src/api/object-layer/object-layer.model.js +4 -17
  117. package/src/api/object-layer/object-layer.router.js +512 -507
  118. package/src/api/object-layer/object-layer.service.js +29 -26
  119. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
  120. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
  121. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
  122. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
  123. package/src/api/test/test.controller.js +8 -8
  124. package/src/api/test/test.router.js +17 -12
  125. package/src/api/test/test.service.js +8 -8
  126. package/src/api/types.js +24 -0
  127. package/src/api/user/guest.service.js +100 -0
  128. package/src/api/user/user.controller.js +6 -6
  129. package/src/api/user/user.model.js +8 -13
  130. package/src/api/user/user.router.js +297 -288
  131. package/src/api/user/user.service.js +103 -55
  132. package/src/cli/baremetal.js +132 -101
  133. package/src/cli/cluster.js +732 -217
  134. package/src/cli/db.js +106 -62
  135. package/src/cli/deploy.js +260 -149
  136. package/src/cli/fs.js +90 -9
  137. package/src/cli/image.js +43 -1
  138. package/src/cli/index.js +106 -16
  139. package/src/cli/ipfs.js +4 -6
  140. package/src/cli/kubectl.js +4 -1
  141. package/src/cli/lxd.js +1099 -223
  142. package/src/cli/monitor.js +9 -3
  143. package/src/cli/release.js +336 -86
  144. package/src/cli/repository.js +136 -53
  145. package/src/cli/run.js +599 -76
  146. package/src/cli/secrets.js +11 -2
  147. package/src/cli/ssh.js +1 -1
  148. package/src/cli/static.js +43 -115
  149. package/src/cli/test.js +9 -3
  150. package/src/client/Cryptokoyn.index.js +18 -21
  151. package/src/client/CyberiaPortal.index.js +19 -23
  152. package/src/client/Default.index.js +30 -36
  153. package/src/client/Itemledger.index.js +20 -26
  154. package/src/client/Underpost.index.js +19 -23
  155. package/src/client/components/core/404.js +4 -4
  156. package/src/client/components/core/500.js +4 -4
  157. package/src/client/components/core/Account.js +73 -60
  158. package/src/client/components/core/AgGrid.js +23 -33
  159. package/src/client/components/core/Alert.js +12 -13
  160. package/src/client/components/core/AppStore.js +1 -1
  161. package/src/client/components/core/Auth.js +40 -37
  162. package/src/client/components/core/Badge.js +7 -13
  163. package/src/client/components/core/BtnIcon.js +15 -17
  164. package/src/client/components/core/CalendarCore.js +42 -63
  165. package/src/client/components/core/Chat.js +13 -15
  166. package/src/client/components/core/ClientEvents.js +163 -0
  167. package/src/client/components/core/ColorPaletteElement.js +309 -0
  168. package/src/client/components/core/Content.js +17 -14
  169. package/src/client/components/core/Css.js +15 -71
  170. package/src/client/components/core/CssCore.js +12 -16
  171. package/src/client/components/core/D3Chart.js +4 -4
  172. package/src/client/components/core/Docs.js +64 -91
  173. package/src/client/components/core/DropDown.js +69 -91
  174. package/src/client/components/core/EventBus.js +96 -0
  175. package/src/client/components/core/EventsUI.js +14 -17
  176. package/src/client/components/core/FileExplorer.js +96 -228
  177. package/src/client/components/core/FullScreen.js +47 -75
  178. package/src/client/components/core/Input.js +24 -69
  179. package/src/client/components/core/Keyboard.js +25 -18
  180. package/src/client/components/core/KeyboardAvoidance.js +145 -0
  181. package/src/client/components/core/LoadingAnimation.js +25 -31
  182. package/src/client/components/core/LogIn.js +41 -41
  183. package/src/client/components/core/LogOut.js +23 -14
  184. package/src/client/components/core/Modal.js +544 -219
  185. package/src/client/components/core/NotificationManager.js +14 -18
  186. package/src/client/components/core/Panel.js +54 -50
  187. package/src/client/components/core/PanelForm.js +81 -177
  188. package/src/client/components/core/Polyhedron.js +110 -214
  189. package/src/client/components/core/PublicProfile.js +39 -32
  190. package/src/client/components/core/Recover.js +48 -44
  191. package/src/client/components/core/Responsive.js +88 -32
  192. package/src/client/components/core/RichText.js +9 -18
  193. package/src/client/components/core/Router.js +24 -3
  194. package/src/client/components/core/SearchBox.js +37 -37
  195. package/src/client/components/core/SignUp.js +39 -30
  196. package/src/client/components/core/SocketIo.js +31 -2
  197. package/src/client/components/core/SocketIoHandler.js +6 -6
  198. package/src/client/components/core/ToggleSwitch.js +8 -20
  199. package/src/client/components/core/ToolTip.js +5 -17
  200. package/src/client/components/core/Translate.js +56 -59
  201. package/src/client/components/core/Validator.js +26 -16
  202. package/src/client/components/core/Wallet.js +15 -26
  203. package/src/client/components/core/Worker.js +211 -276
  204. package/src/client/components/core/windowGetDimensions.js +7 -7
  205. package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
  206. package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
  207. package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
  208. package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
  209. package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
  210. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
  211. package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
  212. package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
  213. package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
  214. package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
  215. package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
  216. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
  217. package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
  218. package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
  219. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
  220. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
  221. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
  222. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
  223. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
  224. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
  225. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
  226. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
  227. package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
  228. package/src/client/components/default/CssDefault.js +12 -12
  229. package/src/client/components/default/LogInDefault.js +6 -4
  230. package/src/client/components/default/LogOutDefault.js +6 -4
  231. package/src/client/components/default/RouterDefault.js +47 -0
  232. package/src/client/components/default/SettingsDefault.js +4 -4
  233. package/src/client/components/default/SignUpDefault.js +6 -4
  234. package/src/client/components/default/TranslateDefault.js +3 -3
  235. package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
  236. package/src/client/components/itemledger/CssItemledger.js +15 -15
  237. package/src/client/components/itemledger/LogInItemledger.js +6 -4
  238. package/src/client/components/itemledger/LogOutItemledger.js +6 -4
  239. package/src/client/components/itemledger/RouterItemledger.js +38 -0
  240. package/src/client/components/itemledger/SettingsItemledger.js +4 -4
  241. package/src/client/components/itemledger/SignUpItemledger.js +6 -4
  242. package/src/client/components/itemledger/TranslateItemledger.js +3 -3
  243. package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
  244. package/src/client/components/underpost/CssUnderpost.js +14 -14
  245. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
  246. package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
  247. package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
  248. package/src/client/components/underpost/LogInUnderpost.js +6 -4
  249. package/src/client/components/underpost/LogOutUnderpost.js +6 -4
  250. package/src/client/components/underpost/RouterUnderpost.js +45 -0
  251. package/src/client/components/underpost/SettingsUnderpost.js +4 -4
  252. package/src/client/components/underpost/SignUpUnderpost.js +6 -4
  253. package/src/client/components/underpost/TranslateUnderpost.js +4 -4
  254. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
  255. package/src/client/public/cyberia-docs/ARCHITECTURE.md +83 -0
  256. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
  257. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
  258. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
  259. package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
  260. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
  261. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
  262. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
  263. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
  264. package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
  265. package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
  266. package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
  267. package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
  268. package/src/client/services/core/core.service.js +17 -49
  269. package/src/client/services/crypto/crypto.service.js +8 -13
  270. package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
  271. package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
  272. package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
  273. package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
  274. package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
  275. package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
  276. package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
  277. package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
  278. package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
  279. package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
  280. package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
  281. package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
  282. package/src/client/services/default/default.management.js +159 -267
  283. package/src/client/services/default/default.service.js +10 -16
  284. package/src/client/services/document/document.service.js +14 -19
  285. package/src/client/services/file/file.service.js +8 -13
  286. package/src/client/services/instance/instance.management.js +5 -5
  287. package/src/client/services/instance/instance.service.js +10 -15
  288. package/src/client/services/ipfs/ipfs.service.js +12 -18
  289. package/src/client/services/object-layer/object-layer.management.js +12 -12
  290. package/src/client/services/object-layer/object-layer.service.js +20 -26
  291. package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
  292. package/src/client/services/test/test.service.js +8 -13
  293. package/src/client/services/user/guest.service.js +86 -0
  294. package/src/client/services/user/user.management.js +5 -5
  295. package/src/client/services/user/user.service.js +14 -20
  296. package/src/client/ssr/body/404.js +3 -3
  297. package/src/client/ssr/body/500.js +3 -3
  298. package/src/client/ssr/body/CacheControl.js +5 -2
  299. package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
  300. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
  301. package/src/client/ssr/head/PwaItemledger.js +197 -60
  302. package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
  303. package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
  304. package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
  305. package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
  306. package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
  307. package/src/client/ssr/{pages → views}/Test.js +2 -2
  308. package/src/client/sw/core.sw.js +274 -0
  309. package/src/db/DataBaseProvider.js +115 -15
  310. package/src/db/mariadb/MariaDB.js +2 -1
  311. package/src/db/mongo/MongoBootstrap.js +657 -0
  312. package/src/db/mongo/MongooseDB.js +129 -21
  313. package/src/grpc/cyberia/grpc-server.js +185 -105
  314. package/src/index.js +1 -1
  315. package/src/runtime/cyberia-client/Dockerfile +101 -0
  316. package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
  317. package/src/runtime/cyberia-server/Dockerfile +62 -0
  318. package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
  319. package/src/runtime/express/Dockerfile +4 -4
  320. package/src/runtime/express/Express.js +2 -2
  321. package/src/runtime/lampp/Dockerfile +8 -7
  322. package/src/runtime/wp/Dockerfile +11 -17
  323. package/src/runtime/wp/Wp.js +8 -5
  324. package/src/server/atlas-sprite-sheet-generator.js +4 -2
  325. package/src/server/auth.js +2 -2
  326. package/src/server/client-build-docs.js +46 -47
  327. package/src/server/client-build.js +371 -132
  328. package/src/server/client-formatted.js +47 -16
  329. package/src/server/conf.js +91 -87
  330. package/src/server/data-query.js +32 -20
  331. package/src/server/dns.js +22 -0
  332. package/src/server/ipfs-client.js +232 -91
  333. package/src/server/object-layer.js +1 -6
  334. package/src/server/process.js +192 -45
  335. package/src/server/proxy.js +9 -2
  336. package/src/server/runtime.js +1 -1
  337. package/src/server/semantic-layer-generator-floor.js +11 -51
  338. package/src/server/semantic-layer-generator-resource.js +259 -0
  339. package/src/server/semantic-layer-generator-skin.js +41 -171
  340. package/src/server/semantic-layer-generator.js +122 -14
  341. package/src/server/shape-generator.js +108 -0
  342. package/src/server/start.js +34 -8
  343. package/src/server/valkey.js +143 -235
  344. package/src/ws/IoInterface.js +16 -16
  345. package/src/ws/core/channels/core.ws.chat.js +11 -11
  346. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  347. package/src/ws/core/channels/core.ws.stream.js +19 -19
  348. package/src/ws/core/core.ws.connection.js +8 -8
  349. package/src/ws/core/core.ws.server.js +6 -5
  350. package/src/ws/default/channels/default.ws.main.js +10 -10
  351. package/src/ws/default/default.ws.connection.js +4 -4
  352. package/src/ws/default/default.ws.server.js +4 -3
  353. package/tsconfig.docs.json +15 -0
  354. package/typedoc.dd-cyberia.json +29 -0
  355. package/typedoc.json +29 -0
  356. package/WHITE-PAPER.md +0 -1540
  357. package/bin/file.js +0 -196
  358. package/bin/vs.js +0 -74
  359. package/bin/zed.js +0 -84
  360. package/hardhat/README.md +0 -531
  361. package/hardhat/WHITE-PAPER.md +0 -1540
  362. package/jsdoc.dd-cyberia.json +0 -68
  363. package/jsdoc.json +0 -68
  364. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
  365. package/src/api/object-layer/README.md +0 -672
  366. package/src/client/components/core/ColorPalette.js +0 -5267
  367. package/src/client/components/core/JoyStick.js +0 -80
  368. package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
  369. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -223
  370. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
  371. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
  372. package/src/client/components/default/RoutesDefault.js +0 -49
  373. package/src/client/components/itemledger/RoutesItemledger.js +0 -40
  374. package/src/client/components/underpost/RoutesUnderpost.js +0 -47
  375. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  376. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  377. package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
  378. package/src/client/sw/default.sw.js +0 -127
  379. package/src/client/sw/template.sw.js +0 -84
  380. package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
  381. package/src/grpc/cyberia/README.md +0 -326
@@ -1,18 +1,17 @@
1
- import { DataBaseProvider } from '../../db/DataBaseProvider.js';
1
+ import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
2
2
  import { loggerFactory } from '../../server/logger.js';
3
3
  import { DataQuery } from '../../server/data-query.js';
4
- import { connectPortals, generateProceduralEntities } from './cyberia-portal-connector.js';
4
+ import { connectPortals } from './cyberia-portal-connector.js';
5
5
  import { generateFallbackWorld } from './cyberia-fallback-world.js';
6
- import { CYBERIA_INSTANCE_CONF_DEFAULTS } from '../cyberia-instance-conf/cyberia-instance-conf.defaults.js';
7
6
 
8
7
  const logger = loggerFactory(import.meta);
9
8
 
10
- const CyberiaInstanceService = {
11
- post: async (req, res, options) => {
9
+ class CyberiaInstanceService {
10
+ static post = async (req, res, options) => {
12
11
  /** @type {import('./cyberia-instance.model.js').CyberiaInstanceModel} */
13
- const CyberiaInstance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaInstance;
12
+ const CyberiaInstance = DataBaseProviderService.getModel("CyberiaInstance", options);
14
13
  const CyberiaInstanceConf =
15
- DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaInstanceConf;
14
+ DataBaseProviderService.getModel("CyberiaInstanceConf", options);
16
15
  if (req.auth && req.auth.user) req.body.creator = req.auth.user._id;
17
16
  const instance = await new CyberiaInstance(req.body).save();
18
17
 
@@ -23,7 +22,7 @@ const CyberiaInstanceService = {
23
22
  const conf = await CyberiaInstanceConf.findOneAndUpdate(
24
23
  { instanceCode: instance.code },
25
24
  { $setOnInsert: { instanceCode: instance.code } },
26
- { upsert: true, new: true },
25
+ { upsert: true, returnDocument: 'after' },
27
26
  );
28
27
  if (conf && !instance.conf) {
29
28
  await CyberiaInstance.findByIdAndUpdate(instance._id, { conf: conf._id });
@@ -35,10 +34,10 @@ const CyberiaInstanceService = {
35
34
  }
36
35
 
37
36
  return instance;
38
- },
39
- get: async (req, res, options) => {
37
+ };
38
+ static get = async (req, res, options) => {
40
39
  /** @type {import('./cyberia-instance.model.js').CyberiaInstanceModel} */
41
- const CyberiaInstance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaInstance;
40
+ const CyberiaInstance = DataBaseProviderService.getModel("CyberiaInstance", options);
42
41
  const populateCreator = { path: 'creator', model: 'User', select: '_id username' };
43
42
  if (req.params.id) return await CyberiaInstance.findById(req.params.id).populate(populateCreator);
44
43
 
@@ -52,20 +51,20 @@ const CyberiaInstanceService = {
52
51
 
53
52
  const totalPages = Math.ceil(total / limit);
54
53
  return { data, total, page, totalPages };
55
- },
56
- put: async (req, res, options) => {
54
+ };
55
+ static put = async (req, res, options) => {
57
56
  /** @type {import('./cyberia-instance.model.js').CyberiaInstanceModel} */
58
- const CyberiaInstance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaInstance;
57
+ const CyberiaInstance = DataBaseProviderService.getModel("CyberiaInstance", options);
59
58
  const instance = await CyberiaInstance.findById(req.params.id);
60
59
  if (!instance) throw new Error('instance not found');
61
60
  if (req.auth.user.role !== 'admin' && String(instance.creator) !== String(req.auth.user._id))
62
61
  throw new Error('insufficient permission');
63
62
  if (req.body.thumbnail && instance.thumbnail && String(req.body.thumbnail) !== String(instance.thumbnail)) {
64
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
63
+ const File = DataBaseProviderService.getModel("File", options);
65
64
  await File.findByIdAndDelete(instance.thumbnail);
66
65
  }
67
66
  return await CyberiaInstance.findByIdAndUpdate(req.params.id, req.body, { returnDocument: 'after' });
68
- },
67
+ };
69
68
  /**
70
69
  * Central portal connector endpoint.
71
70
  *
@@ -73,16 +72,16 @@ const CyberiaInstanceService = {
73
72
  * from cyberia-portal-connector.js so the same logic can be used by the
74
73
  * GUI without a DB dependency.
75
74
  *
76
- * Optionally generates procedural fallback obstacle/foreground entities
77
- * for maps that have none, controlled by query flags:
78
- * ?generateEntities=true — append procedural obstacles & foreground
79
- * ?obstacleCount=N — obstacles per map (default 5)
80
- * ?foregroundCount=N — foreground per map (default 3)
81
- * ?persist=true — save generated portals & entities to DB
75
+ * Builds a minimal ring connecting all maps and assigns random portal
76
+ * subtypes to remaining portals. Does NOT generate procedural entities
77
+ * entity generation is handled exclusively by the fallback world logic
78
+ * (cyberia-world-generator.js).
79
+ *
80
+ * ?persist=true — save generated portals to DB
82
81
  */
83
- portalConnect: async (req, res, options) => {
84
- const CyberiaInstance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaInstance;
85
- const CyberiaMap = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaMap;
82
+ static portalConnect = async (req, res, options) => {
83
+ const CyberiaInstance = DataBaseProviderService.getModel("CyberiaInstance", options);
84
+ const CyberiaMap = DataBaseProviderService.getModel("CyberiaMap", options);
86
85
 
87
86
  const instance = await CyberiaInstance.findById(req.params.id).lean();
88
87
  if (!instance) throw new Error('instance not found');
@@ -103,67 +102,33 @@ const CyberiaInstanceService = {
103
102
  // ── Portal topology (pure function) ──────────────────────────────────
104
103
  const result = connectPortals(mapCodes, mapDocs);
105
104
 
106
- // ── Procedural entity generation (optional) ──────────────────────────
107
- const colors = CYBERIA_INSTANCE_CONF_DEFAULTS.colors;
108
- const wantEntities = req.query?.generateEntities === 'true';
109
- const obstacleCount = req.query?.obstacleCount ? parseInt(req.query.obstacleCount, 10) : undefined;
110
- const foregroundCount = req.query?.foregroundCount ? parseInt(req.query.foregroundCount, 10) : undefined;
111
- const seed = instance.seed || '';
112
-
113
- const generatedEntities = {};
114
- if (wantEntities) {
115
- for (const doc of mapDocs) {
116
- const hasObstacles = (doc.entities || []).some((e) => e.entityType === 'obstacle');
117
- const hasForeground = (doc.entities || []).some((e) => e.entityType === 'foreground');
118
- if (!hasObstacles || !hasForeground) {
119
- const mapSeed = seed ? `${seed}:${doc.code}` : doc.code;
120
- const generated = generateProceduralEntities({ gridX: doc.gridX || 16, gridY: doc.gridY || 16 }, colors, {
121
- obstacleCount,
122
- foregroundCount,
123
- seed: mapSeed,
124
- });
125
- generatedEntities[doc.code] = {
126
- obstacles: hasObstacles ? [] : generated.obstacles,
127
- foreground: hasForeground ? [] : generated.foreground,
128
- };
129
- }
130
- }
131
- }
132
-
133
105
  // ── Persist to DB when requested ─────────────────────────────────────
134
106
  const persist = req.query?.persist === 'true';
135
107
  if (persist) {
136
108
  await CyberiaInstance.findByIdAndUpdate(req.params.id, { portals: result.portals });
137
- for (const [mapCode, ents] of Object.entries(generatedEntities)) {
138
- const toAdd = [...ents.obstacles, ...ents.foreground];
139
- if (toAdd.length > 0) {
140
- await CyberiaMap.findOneAndUpdate({ code: mapCode }, { $push: { entities: { $each: toAdd } } });
141
- }
142
- }
143
109
  }
144
110
 
145
111
  return {
146
112
  ...result,
147
- ...(wantEntities ? { generatedEntities } : {}),
148
113
  persisted: persist,
149
114
  };
150
- },
115
+ };
151
116
 
152
- delete: async (req, res, options) => {
117
+ static delete = async (req, res, options) => {
153
118
  /** @type {import('./cyberia-instance.model.js').CyberiaInstanceModel} */
154
- const CyberiaInstance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.CyberiaInstance;
119
+ const CyberiaInstance = DataBaseProviderService.getModel("CyberiaInstance", options);
155
120
  if (req.params.id) {
156
121
  const instance = await CyberiaInstance.findById(req.params.id);
157
122
  if (!instance) throw new Error('instance not found');
158
123
  if (req.auth.user.role !== 'admin' && String(instance.creator) !== String(req.auth.user._id))
159
124
  throw new Error('insufficient permission');
160
125
  if (instance.thumbnail) {
161
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
126
+ const File = DataBaseProviderService.getModel("File", options);
162
127
  await File.findByIdAndDelete(instance.thumbnail);
163
128
  }
164
129
  return await CyberiaInstance.findByIdAndDelete(req.params.id);
165
130
  } else return await CyberiaInstance.deleteMany();
166
- },
131
+ };
167
132
 
168
133
  /**
169
134
  * Return an in-memory procedural fallback world.
@@ -177,7 +142,7 @@ const CyberiaInstanceService = {
177
142
  * ?obstacleCount=<number> — obstacles per map (random 12–20 if omitted)
178
143
  * ?foregroundCount=<number>— foreground per map (random 6–12 if omitted)
179
144
  */
180
- fallbackWorld: async (req) => {
145
+ static fallbackWorld = async (req) => {
181
146
  const q = req.query || {};
182
147
  return generateFallbackWorld({
183
148
  mapCount: q.mapCount ? parseInt(q.mapCount, 10) : undefined,
@@ -185,7 +150,7 @@ const CyberiaInstanceService = {
185
150
  obstacleCount: q.obstacleCount ? parseInt(q.obstacleCount, 10) : undefined,
186
151
  foregroundCount: q.foregroundCount ? parseInt(q.foregroundCount, 10) : undefined,
187
152
  });
188
- },
189
- };
153
+ };
154
+ }
190
155
 
191
156
  export { CyberiaInstanceService };
@@ -1,126 +1,26 @@
1
1
  /**
2
2
  * Central Portal Connector — pure-function module.
3
3
  *
4
- * Shared by the backend (CyberiaInstanceService) and the GUI (map editor)
5
- * to build, validate, and procedurally generate portal topology and world
6
- * entities for a CyberiaInstance.
4
+ * Sole responsibility: build, validate, and connect portal topology
5
+ * for a CyberiaInstance. Given map documents with portal entities,
6
+ * produces a minimal ring that guarantees full reachability, then
7
+ * assigns random portal behaviour to every remaining (unconnected)
8
+ * portal.
7
9
  *
8
- * All exported functions are stateless and synchronous — they operate on
9
- * plain JS objects (lean Mongoose docs or JSON from the API) so the GUI
10
- * can call them directly without a DB dependency.
10
+ * Shared by the backend (CyberiaInstanceService.portalConnect) and the
11
+ * GUI (Instance Engine "Portal Connector" button) so the same logic
12
+ * runs everywhere without a DB dependency.
13
+ *
14
+ * This module does NOT generate procedural entities (obstacles,
15
+ * foreground, resources, bots, etc.). For that, see
16
+ * cyberia-world-generator.js.
17
+ *
18
+ * All exported functions are stateless and synchronous.
11
19
  *
12
20
  * @module src/api/cyberia-instance/cyberia-portal-connector
13
21
  */
14
22
 
15
- // ── Color helpers ────────────────────────────────────────────────────────────
16
-
17
- /**
18
- * Convert a { r, g, b, a } palette entry to an `rgba(…)` CSS string.
19
- * @param {{ r: number, g: number, b: number, a: number }} c
20
- * @returns {string}
21
- */
22
- const colorToRgba = (c) => `rgba(${c.r}, ${c.g}, ${c.b}, ${c.a / 255})`;
23
-
24
- /**
25
- * Look up a palette entry by key from a colours array.
26
- * @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors
27
- * @param {string} key
28
- * @returns {{ r: number, g: number, b: number, a: number } | undefined}
29
- */
30
- const findColor = (colors, key) => colors.find((c) => c.key === key);
31
-
32
- // ── Random helpers ───────────────────────────────────────────────────────────
33
-
34
- /**
35
- * Return a random integer in [min, max] (inclusive).
36
- * @param {number} min
37
- * @param {number} max
38
- * @returns {number}
39
- */
40
- const randInt = (min, max) => min + Math.floor(Math.random() * (max - min + 1));
41
-
42
- // ── Occupancy grid ───────────────────────────────────────────────────────────
43
-
44
- /**
45
- * 2D boolean grid that tracks which cells are blocked (obstacle / placed entity).
46
- * Used to find valid walkable positions when placing portals and bots.
47
- */
48
- class OccupancyGrid {
49
- /**
50
- * @param {number} width Grid columns.
51
- * @param {number} height Grid rows.
52
- */
53
- constructor(width, height) {
54
- this.width = width;
55
- this.height = height;
56
- // false = walkable, true = blocked
57
- this.cells = Array.from({ length: height }, () => new Array(width).fill(false));
58
- }
59
-
60
- /**
61
- * Mark a rectangular region as blocked.
62
- * @param {number} x
63
- * @param {number} y
64
- * @param {number} w
65
- * @param {number} h
66
- */
67
- block(x, y, w, h) {
68
- for (let row = y; row < y + h && row < this.height; row++) {
69
- for (let col = x; col < x + w && col < this.width; col++) {
70
- if (row >= 0 && col >= 0) this.cells[row][col] = true;
71
- }
72
- }
73
- }
74
-
75
- /**
76
- * Check whether a rectangle fits entirely within walkable (unblocked) cells.
77
- * @param {number} x
78
- * @param {number} y
79
- * @param {number} w
80
- * @param {number} h
81
- * @returns {boolean}
82
- */
83
- fits(x, y, w, h) {
84
- if (x < 0 || y < 0 || x + w > this.width || y + h > this.height) return false;
85
- for (let row = y; row < y + h; row++) {
86
- for (let col = x; col < x + w; col++) {
87
- if (this.cells[row][col]) return false;
88
- }
89
- }
90
- return true;
91
- }
92
-
93
- /**
94
- * Find a random walkable position for a rectangle of given dimensions.
95
- * Tries up to `maxAttempts` random positions before giving up.
96
- * @param {number} w
97
- * @param {number} h
98
- * @param {number} [maxAttempts=200]
99
- * @returns {{ x: number, y: number } | null} Position or null if no fit found.
100
- */
101
- findPosition(w, h, maxAttempts = 200) {
102
- const maxX = Math.max(0, this.width - w);
103
- const maxY = Math.max(0, this.height - h);
104
- for (let i = 0; i < maxAttempts; i++) {
105
- const x = randInt(0, maxX);
106
- const y = randInt(0, maxY);
107
- if (this.fits(x, y, w, h)) return { x, y };
108
- }
109
- return null;
110
- }
111
-
112
- /**
113
- * Populate the grid from an array of obstacle entities.
114
- * @param {Array<{ initCellX: number, initCellY: number, dimX: number, dimY: number }>} obstacles
115
- */
116
- addObstacles(obstacles) {
117
- for (const o of obstacles) {
118
- this.block(o.initCellX, o.initCellY, o.dimX, o.dimY);
119
- }
120
- }
121
- }
122
-
123
- // ── Portal topology builders ─────────────────────────────────────────────────
23
+ // ── Portal mode constants ────────────────────────────────────────────────────
124
24
 
125
25
  /**
126
26
  * Canonical portal mode strings.
@@ -157,6 +57,8 @@ const PORTAL_MODE_COLOR_KEY = Object.freeze({
157
57
  */
158
58
  const EXTRA_PORTAL_MODES = [PORTAL_MODES.INTRA_PORTAL, PORTAL_MODES.INTRA_RANDOM, PORTAL_MODES.INTER_RANDOM];
159
59
 
60
+ // ── Portal topology builders ─────────────────────────────────────────────────
61
+
160
62
  /**
161
63
  * Extract all portal-type entities from each map document and build
162
64
  * a lookup: `{ [mapCode]: portalEntity[] }`.
@@ -247,7 +149,9 @@ function buildTopologyFromSubtypes(orderedCodes, portalIndex) {
247
149
  const remaining = allOnMap.filter((e) => !usedInRing.has(e));
248
150
 
249
151
  for (const srcEnt of remaining) {
250
- const sub = srcEnt.portalSubtype || PORTAL_MODES.INTER_PORTAL;
152
+ // If the entity already has an explicit subtype, honour it;
153
+ // otherwise assign a random mode (matching fallback-world behaviour).
154
+ const sub = srcEnt.portalSubtype || PORTAL_MODE_LIST[Math.floor(Math.random() * PORTAL_MODE_LIST.length)];
251
155
 
252
156
  switch (sub) {
253
157
  case PORTAL_MODES.INTER_PORTAL: {
@@ -341,119 +245,6 @@ function connectPortals(mapCodes, maps) {
341
245
  return { portals, topology, mapCount: ordered.length };
342
246
  }
343
247
 
344
- // ── Procedural entity generators ─────────────────────────────────────────────
345
-
346
- /**
347
- * Generate procedural obstacle entities for a map.
348
- *
349
- * Obstacles use empty `objectLayerItemIds` so they render as a solid colour
350
- * from the OBSTACLE palette entry. Count, dimensions, and positions are
351
- * all fully random within the declared ranges.
352
- *
353
- * @param {{ gridX: number, gridY: number }} mapDims Map grid dimensions.
354
- * @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors Palette.
355
- * @param {object} [opts]
356
- * @param {number} [opts.count] Override count (ignores range).
357
- * @param {number} [opts.minDim=1] Minimum obstacle width/height (cells).
358
- * @param {number} [opts.maxDim=4] Maximum obstacle width/height (cells).
359
- * @returns {object[]} Array of CyberiaEntity plain objects.
360
- */
361
- function generateObstacles(mapDims, colors, opts = {}) {
362
- const { minDim = 1, maxDim = 4 } = opts;
363
- const count = opts.count ?? randInt(OBSTACLE_RANGE[0], OBSTACLE_RANGE[1]);
364
- const { gridX, gridY } = mapDims;
365
-
366
- const obstacleColor = findColor(colors, 'OBSTACLE');
367
- const rgba = obstacleColor ? colorToRgba(obstacleColor) : 'rgba(80, 80, 80, 1)';
368
-
369
- const entities = [];
370
- for (let i = 0; i < count; i++) {
371
- const dimX = randInt(minDim, maxDim);
372
- const dimY = randInt(minDim, maxDim);
373
- const maxX = Math.max(0, gridX - dimX);
374
- const maxY = Math.max(0, gridY - dimY);
375
- entities.push({
376
- entityType: 'obstacle',
377
- initCellX: randInt(0, maxX),
378
- initCellY: randInt(0, maxY),
379
- dimX,
380
- dimY,
381
- color: rgba,
382
- objectLayerItemIds: [],
383
- });
384
- }
385
- return entities;
386
- }
387
-
388
- /**
389
- * Generate procedural foreground entities for a map.
390
- *
391
- * Foregrounds use empty `objectLayerItemIds` and a semi-transparent colour
392
- * from the FOREGROUND palette entry. Count, dimensions, and positions are
393
- * all fully random within the declared ranges.
394
- *
395
- * @param {{ gridX: number, gridY: number }} mapDims Map grid dimensions.
396
- * @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors Palette.
397
- * @param {object} [opts]
398
- * @param {number} [opts.count] Override count (ignores range).
399
- * @param {number} [opts.minDim=2] Minimum foreground width/height (cells).
400
- * @param {number} [opts.maxDim=6] Maximum foreground width/height (cells).
401
- * @returns {object[]} Array of CyberiaEntity plain objects.
402
- */
403
- function generateForeground(mapDims, colors, opts = {}) {
404
- const { minDim = 2, maxDim = 6 } = opts;
405
- const count = opts.count ?? randInt(FOREGROUND_RANGE[0], FOREGROUND_RANGE[1]);
406
- const { gridX, gridY } = mapDims;
407
-
408
- const fgColor = findColor(colors, 'FOREGROUND');
409
- const rgba = fgColor ? colorToRgba(fgColor) : 'rgba(200, 200, 200, 0.31)';
410
-
411
- const entities = [];
412
- for (let i = 0; i < count; i++) {
413
- const dimX = randInt(minDim, maxDim);
414
- const dimY = randInt(minDim, maxDim);
415
- const maxX = Math.max(0, gridX - dimX);
416
- const maxY = Math.max(0, gridY - dimY);
417
- entities.push({
418
- entityType: 'foreground',
419
- initCellX: randInt(0, maxX),
420
- initCellY: randInt(0, maxY),
421
- dimX,
422
- dimY,
423
- color: rgba,
424
- objectLayerItemIds: [],
425
- });
426
- }
427
- return entities;
428
- }
429
-
430
- /**
431
- * Generate all procedural fallback entities (obstacles + foreground) for a map.
432
- *
433
- * @param {{ gridX: number, gridY: number }} mapDims
434
- * @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors
435
- * @param {object} [opts]
436
- * @param {number} [opts.obstacleCount]
437
- * @param {number} [opts.foregroundCount]
438
- * @returns {{ obstacles: object[], foreground: object[] }}
439
- */
440
- function generateProceduralEntities(mapDims, colors, opts = {}) {
441
- return {
442
- obstacles: generateObstacles(mapDims, colors, { count: opts.obstacleCount }),
443
- foreground: generateForeground(mapDims, colors, { count: opts.foregroundCount }),
444
- };
445
- }
446
-
447
- // ── Entity count ranges ──────────────────────────────────────────────────────
448
- // [min, max] — actual count is random within range on each generation call.
449
-
450
- const OBSTACLE_RANGE = [20, 35];
451
- const FOREGROUND_RANGE = [10, 20];
452
- const BOT_RANGE = [8, 16];
453
- const BOT_WEAPON_CHANCE = 0.6;
454
- const PORTAL_DIM_RANGE = [2, 3];
455
- const PORTAL_COUNT_RANGE = [2, 4];
456
-
457
248
  // ── Public API ───────────────────────────────────────────────────────────────
458
249
 
459
250
  export {
@@ -466,21 +257,4 @@ export {
466
257
  PORTAL_MODE_LIST,
467
258
  PORTAL_MODE_COLOR_KEY,
468
259
  EXTRA_PORTAL_MODES,
469
- // Procedural entities
470
- generateObstacles,
471
- generateForeground,
472
- generateProceduralEntities,
473
- // Placement
474
- OccupancyGrid,
475
- // Helpers
476
- colorToRgba,
477
- findColor,
478
- randInt,
479
- // Ranges
480
- OBSTACLE_RANGE,
481
- FOREGROUND_RANGE,
482
- BOT_RANGE,
483
- BOT_WEAPON_CHANCE,
484
- PORTAL_DIM_RANGE,
485
- PORTAL_COUNT_RANGE,
486
260
  };