cyberia 3.1.3 → 3.2.9

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 (377) hide show
  1. package/.env.example +0 -2
  2. package/.github/workflows/engine-cyberia.cd.yml +10 -8
  3. package/.github/workflows/engine-cyberia.ci.yml +12 -29
  4. package/.github/workflows/ghpkg.ci.yml +4 -4
  5. package/.github/workflows/npmpkg.ci.yml +28 -11
  6. package/.github/workflows/publish.ci.yml +21 -2
  7. package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -5
  8. package/.github/workflows/pwa-microservices-template-test.ci.yml +3 -3
  9. package/.github/workflows/release.cd.yml +14 -10
  10. package/CHANGELOG.md +783 -1
  11. package/CLI-HELP.md +95 -18
  12. package/Dockerfile +0 -2
  13. package/README.md +290 -220
  14. package/bin/build.js +24 -7
  15. package/bin/cyberia.js +2838 -252
  16. package/bin/deploy.js +747 -125
  17. package/bin/file.js +9 -0
  18. package/bin/index.js +2838 -252
  19. package/bin/vs.js +1 -1
  20. package/conf.js +99 -65
  21. package/deployment.yaml +18 -164
  22. package/hardhat/hardhat.config.js +13 -13
  23. package/hardhat/ignition/modules/ObjectLayerToken.js +1 -1
  24. package/hardhat/package-lock.json +2559 -5864
  25. package/hardhat/package.json +14 -23
  26. package/hardhat/scripts/deployObjectLayerToken.js +1 -1
  27. package/hardhat/test/ObjectLayerToken.js +4 -2
  28. package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
  29. package/hardhat/types/ethers-contracts/common.ts +92 -0
  30. package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
  31. package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
  32. package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
  33. package/hardhat/types/ethers-contracts/index.ts +6 -0
  34. package/jsconfig.json +1 -1
  35. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +6 -5
  36. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +6 -5
  37. package/manifests/deployment/dd-cyberia-development/deployment.yaml +18 -164
  38. package/manifests/deployment/dd-cyberia-development/proxy.yaml +7 -79
  39. package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
  40. package/manifests/deployment/dd-test-development/deployment.yaml +112 -28
  41. package/manifests/deployment/dd-test-development/proxy.yaml +46 -1
  42. package/manifests/deployment/playwright/deployment.yaml +1 -1
  43. package/nodemon.json +1 -1
  44. package/package.json +39 -24
  45. package/proxy.yaml +7 -79
  46. package/scripts/k3s-node-setup.sh +2 -2
  47. package/scripts/nat-iptables.sh +103 -18
  48. package/scripts/rhel-grpc-setup.sh +56 -0
  49. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +58 -14
  50. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +23 -14
  51. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
  52. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +148 -20
  53. package/src/api/core/core.controller.js +10 -10
  54. package/src/api/core/core.service.js +10 -10
  55. package/src/api/crypto/crypto.controller.js +8 -8
  56. package/src/api/crypto/crypto.service.js +8 -8
  57. package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
  58. package/src/api/cyberia-action/cyberia-action.model.js +87 -0
  59. package/src/api/cyberia-action/cyberia-action.router.js +27 -0
  60. package/src/api/cyberia-action/cyberia-action.service.js +42 -0
  61. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +93 -0
  62. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
  63. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +29 -0
  64. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +51 -0
  65. package/src/api/cyberia-entity/cyberia-entity.controller.js +74 -0
  66. package/src/api/cyberia-entity/cyberia-entity.model.js +24 -0
  67. package/src/api/cyberia-entity/cyberia-entity.router.js +27 -0
  68. package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
  69. package/src/api/cyberia-instance/cyberia-fallback-world.js +178 -0
  70. package/src/api/cyberia-instance/cyberia-instance.controller.js +92 -0
  71. package/src/api/cyberia-instance/cyberia-instance.model.js +87 -0
  72. package/src/api/cyberia-instance/cyberia-instance.router.js +63 -0
  73. package/src/api/cyberia-instance/cyberia-instance.service.js +156 -0
  74. package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
  75. package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
  76. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +74 -0
  77. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +574 -0
  78. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +231 -0
  79. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +27 -0
  80. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
  81. package/src/api/cyberia-map/cyberia-map.controller.js +79 -0
  82. package/src/api/cyberia-map/cyberia-map.model.js +30 -0
  83. package/src/api/cyberia-map/cyberia-map.router.js +40 -0
  84. package/src/api/cyberia-map/cyberia-map.service.js +74 -0
  85. package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
  86. package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
  87. package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
  88. package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
  89. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
  90. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
  91. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
  92. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
  93. package/src/api/default/default.controller.js +10 -10
  94. package/src/api/default/default.service.js +10 -10
  95. package/src/api/document/document.controller.js +12 -12
  96. package/src/api/document/document.model.js +10 -16
  97. package/src/api/file/file.controller.js +8 -8
  98. package/src/api/file/file.model.js +10 -10
  99. package/src/api/file/file.ref.json +18 -0
  100. package/src/api/file/file.service.js +36 -36
  101. package/src/api/instance/instance.controller.js +10 -10
  102. package/src/api/instance/instance.model.js +4 -10
  103. package/src/api/instance/instance.service.js +10 -10
  104. package/src/api/ipfs/ipfs.controller.js +15 -36
  105. package/src/api/ipfs/ipfs.model.js +47 -47
  106. package/src/api/ipfs/ipfs.router.js +8 -13
  107. package/src/api/ipfs/ipfs.service.js +67 -129
  108. package/src/api/object-layer/object-layer.controller.js +12 -12
  109. package/src/api/object-layer/object-layer.model.js +4 -17
  110. package/src/api/object-layer/object-layer.router.js +30 -0
  111. package/src/api/object-layer/object-layer.service.js +126 -43
  112. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
  113. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
  114. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
  115. package/src/api/test/test.controller.js +8 -8
  116. package/src/api/test/test.service.js +8 -8
  117. package/src/api/user/guest.service.js +99 -0
  118. package/src/api/user/user.controller.js +6 -6
  119. package/src/api/user/user.model.js +8 -13
  120. package/src/api/user/user.service.js +11 -27
  121. package/src/cli/cluster.js +68 -21
  122. package/src/cli/db.js +753 -825
  123. package/src/cli/deploy.js +215 -125
  124. package/src/cli/env.js +29 -0
  125. package/src/cli/fs.js +82 -8
  126. package/src/cli/image.js +43 -1
  127. package/src/cli/index.js +74 -3
  128. package/src/cli/kubectl.js +211 -0
  129. package/src/cli/release.js +340 -0
  130. package/src/cli/repository.js +475 -74
  131. package/src/cli/run.js +582 -43
  132. package/src/cli/secrets.js +73 -0
  133. package/src/cli/ssh.js +1 -1
  134. package/src/cli/static.js +43 -115
  135. package/src/cli/test.js +3 -3
  136. package/src/client/Cryptokoyn.index.js +18 -22
  137. package/src/client/CyberiaPortal.index.js +19 -24
  138. package/src/client/Default.index.js +21 -34
  139. package/src/client/Itemledger.index.js +20 -27
  140. package/src/client/Underpost.index.js +19 -24
  141. package/src/client/components/core/404.js +4 -4
  142. package/src/client/components/core/500.js +4 -4
  143. package/src/client/components/core/Account.js +73 -60
  144. package/src/client/components/core/AgGrid.js +23 -33
  145. package/src/client/components/core/Alert.js +12 -13
  146. package/src/client/components/core/AppStore.js +69 -0
  147. package/src/client/components/core/Auth.js +35 -37
  148. package/src/client/components/core/Badge.js +7 -13
  149. package/src/client/components/core/BtnIcon.js +15 -17
  150. package/src/client/components/core/CalendarCore.js +43 -64
  151. package/src/client/components/core/Chat.js +13 -15
  152. package/src/client/components/core/ClientEvents.js +87 -0
  153. package/src/client/components/core/ColorPaletteElement.js +309 -0
  154. package/src/client/components/core/Content.js +17 -14
  155. package/src/client/components/core/Css.js +15 -71
  156. package/src/client/components/core/CssCore.js +12 -16
  157. package/src/client/components/core/D3Chart.js +4 -4
  158. package/src/client/components/core/Docs.js +64 -91
  159. package/src/client/components/core/DropDown.js +194 -96
  160. package/src/client/components/core/EventBus.js +92 -0
  161. package/src/client/components/core/EventsUI.js +14 -17
  162. package/src/client/components/core/FileExplorer.js +96 -228
  163. package/src/client/components/core/FullScreen.js +47 -75
  164. package/src/client/components/core/Input.js +24 -69
  165. package/src/client/components/core/Keyboard.js +26 -19
  166. package/src/client/components/core/KeyboardAvoidance.js +145 -0
  167. package/src/client/components/core/LoadingAnimation.js +25 -31
  168. package/src/client/components/core/LogIn.js +43 -43
  169. package/src/client/components/core/LogOut.js +25 -16
  170. package/src/client/components/core/Modal.js +462 -179
  171. package/src/client/components/core/NotificationManager.js +14 -18
  172. package/src/client/components/core/Panel.js +54 -51
  173. package/src/client/components/core/PanelForm.js +44 -144
  174. package/src/client/components/core/Polyhedron.js +110 -214
  175. package/src/client/components/core/PublicProfile.js +39 -32
  176. package/src/client/components/core/Recover.js +48 -44
  177. package/src/client/components/core/Responsive.js +88 -32
  178. package/src/client/components/core/RichText.js +9 -18
  179. package/src/client/components/core/Router.js +24 -3
  180. package/src/client/components/core/SearchBox.js +37 -37
  181. package/src/client/components/core/SignUp.js +39 -30
  182. package/src/client/components/core/SocketIo.js +112 -30
  183. package/src/client/components/core/SocketIoHandler.js +75 -0
  184. package/src/client/components/core/Stream.js +143 -95
  185. package/src/client/components/core/ToggleSwitch.js +8 -20
  186. package/src/client/components/core/ToolTip.js +5 -17
  187. package/src/client/components/core/Translate.js +56 -59
  188. package/src/client/components/core/Validator.js +26 -16
  189. package/src/client/components/core/Wallet.js +15 -26
  190. package/src/client/components/core/Webhook.js +40 -7
  191. package/src/client/components/core/Worker.js +163 -27
  192. package/src/client/components/core/windowGetDimensions.js +7 -7
  193. package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +59 -59
  194. package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
  195. package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
  196. package/src/client/components/cryptokoyn/LogInCryptokoyn.js +9 -7
  197. package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +8 -6
  198. package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
  199. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
  200. package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
  201. package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +3 -51
  202. package/src/client/components/cyberia/InstanceEngineCyberia.js +781 -0
  203. package/src/client/components/cyberia/MapEngineCyberia.js +1836 -2
  204. package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
  205. package/src/client/components/cyberia/ObjectLayerEngineModal.js +1220 -99
  206. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +252 -316
  207. package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +136 -103
  208. package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
  209. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +462 -32
  210. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
  211. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +9 -7
  212. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +8 -6
  213. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
  214. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
  215. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
  216. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
  217. package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +3 -49
  218. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +8 -4
  219. package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +91 -91
  220. package/src/client/components/default/AppStoreDefault.js +5 -0
  221. package/src/client/components/default/CssDefault.js +12 -12
  222. package/src/client/components/default/LogInDefault.js +9 -7
  223. package/src/client/components/default/LogOutDefault.js +8 -6
  224. package/src/client/components/default/RouterDefault.js +47 -0
  225. package/src/client/components/default/SettingsDefault.js +4 -4
  226. package/src/client/components/default/SignUpDefault.js +6 -4
  227. package/src/client/components/default/SocketIoDefault.js +3 -51
  228. package/src/client/components/default/TranslateDefault.js +3 -3
  229. package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +59 -59
  230. package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
  231. package/src/client/components/itemledger/CssItemledger.js +15 -15
  232. package/src/client/components/itemledger/LogInItemledger.js +9 -7
  233. package/src/client/components/itemledger/LogOutItemledger.js +8 -6
  234. package/src/client/components/itemledger/RouterItemledger.js +38 -0
  235. package/src/client/components/itemledger/SettingsItemledger.js +4 -4
  236. package/src/client/components/itemledger/SignUpItemledger.js +6 -4
  237. package/src/client/components/itemledger/SocketIoItemledger.js +3 -51
  238. package/src/client/components/itemledger/TranslateItemledger.js +3 -3
  239. package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +92 -92
  240. package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
  241. package/src/client/components/underpost/CssUnderpost.js +14 -14
  242. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
  243. package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
  244. package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
  245. package/src/client/components/underpost/LogInUnderpost.js +9 -7
  246. package/src/client/components/underpost/LogOutUnderpost.js +8 -6
  247. package/src/client/components/underpost/RouterUnderpost.js +45 -0
  248. package/src/client/components/underpost/SettingsUnderpost.js +4 -4
  249. package/src/client/components/underpost/SignUpUnderpost.js +6 -4
  250. package/src/client/components/underpost/SocketIoUnderpost.js +3 -51
  251. package/src/client/components/underpost/TranslateUnderpost.js +4 -4
  252. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
  253. package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
  254. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
  255. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
  256. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
  257. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
  258. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
  259. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
  260. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
  261. package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
  262. package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
  263. package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
  264. package/src/client/services/core/core.service.js +35 -55
  265. package/src/client/services/crypto/crypto.service.js +8 -13
  266. package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
  267. package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +99 -0
  268. package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
  269. package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
  270. package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
  271. package/src/client/services/cyberia-instance/cyberia-instance.service.js +116 -0
  272. package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
  273. package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
  274. package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
  275. package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
  276. package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
  277. package/src/client/services/default/default.management.js +159 -267
  278. package/src/client/services/default/default.service.js +10 -16
  279. package/src/client/services/document/document.service.js +14 -19
  280. package/src/client/services/file/file.service.js +8 -13
  281. package/src/client/services/instance/instance.management.js +6 -6
  282. package/src/client/services/instance/instance.service.js +10 -15
  283. package/src/client/services/ipfs/ipfs.service.js +14 -40
  284. package/src/client/services/object-layer/object-layer.management.js +14 -14
  285. package/src/client/services/object-layer/object-layer.service.js +39 -24
  286. package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
  287. package/src/client/services/test/test.service.js +8 -13
  288. package/src/client/services/user/guest.service.js +86 -0
  289. package/src/client/services/user/user.management.js +6 -6
  290. package/src/client/services/user/user.service.js +14 -20
  291. package/src/client/ssr/body/404.js +3 -3
  292. package/src/client/ssr/body/500.js +3 -3
  293. package/src/client/ssr/body/CacheControl.js +5 -2
  294. package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
  295. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
  296. package/src/client/ssr/head/PwaItemledger.js +197 -60
  297. package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
  298. package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
  299. package/src/client/ssr/offline/Maintenance.js +12 -11
  300. package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
  301. package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
  302. package/src/client/ssr/pages/Test.js +2 -2
  303. package/src/client/sw/core.sw.js +212 -0
  304. package/src/grpc/cyberia/grpc-server.js +642 -0
  305. package/src/index.js +24 -1
  306. package/src/runtime/cyberia-client/Dockerfile +80 -0
  307. package/src/runtime/cyberia-server/Dockerfile +37 -0
  308. package/src/runtime/express/Dockerfile +5 -1
  309. package/src/runtime/express/Express.js +18 -1
  310. package/src/runtime/lampp/Dockerfile +17 -5
  311. package/src/runtime/lampp/Lampp.js +27 -4
  312. package/src/runtime/wp/Dockerfile +62 -0
  313. package/src/runtime/wp/Wp.js +639 -0
  314. package/src/server/atlas-sprite-sheet-generator.js +4 -2
  315. package/src/server/auth.js +24 -1
  316. package/src/server/backup.js +37 -9
  317. package/src/server/client-build-docs.js +52 -46
  318. package/src/server/client-build.js +356 -82
  319. package/src/server/client-formatted.js +140 -57
  320. package/src/server/conf.js +29 -13
  321. package/src/server/cron.js +25 -23
  322. package/src/server/data-query.js +32 -20
  323. package/src/server/dns.js +24 -1
  324. package/src/server/ipfs-client.js +253 -89
  325. package/src/server/object-layer.js +150 -114
  326. package/src/server/peer.js +8 -0
  327. package/src/server/process.js +13 -27
  328. package/src/server/runtime.js +25 -1
  329. package/src/server/semantic-layer-generator-floor.js +319 -0
  330. package/src/server/semantic-layer-generator-resource.js +259 -0
  331. package/src/server/semantic-layer-generator-skin.js +1164 -0
  332. package/src/server/semantic-layer-generator.js +211 -542
  333. package/src/server/shape-generator.js +108 -0
  334. package/src/server/start.js +19 -5
  335. package/src/server/valkey.js +141 -235
  336. package/src/ws/IoInterface.js +1 -10
  337. package/src/ws/IoServer.js +14 -33
  338. package/src/ws/core/channels/core.ws.chat.js +65 -20
  339. package/src/ws/core/channels/core.ws.mailer.js +113 -32
  340. package/src/ws/core/channels/core.ws.stream.js +90 -31
  341. package/src/ws/core/core.ws.connection.js +12 -33
  342. package/src/ws/core/core.ws.emit.js +10 -26
  343. package/src/ws/core/core.ws.server.js +25 -58
  344. package/src/ws/default/channels/default.ws.main.js +53 -12
  345. package/src/ws/default/default.ws.connection.js +26 -13
  346. package/src/ws/default/default.ws.server.js +30 -12
  347. package/tsconfig.docs.json +15 -0
  348. package/typedoc.dd-cyberia.json +29 -0
  349. package/typedoc.json +29 -0
  350. package/WHITE-PAPER.md +0 -1540
  351. package/hardhat/README.md +0 -531
  352. package/hardhat/WHITE-PAPER.md +0 -1540
  353. package/jsdoc.dd-cyberia.json +0 -59
  354. package/jsdoc.json +0 -59
  355. package/src/api/object-layer/README.md +0 -347
  356. package/src/client/components/core/ColorPalette.js +0 -5267
  357. package/src/client/components/core/JoyStick.js +0 -80
  358. package/src/client/components/cryptokoyn/CommonCryptokoyn.js +0 -29
  359. package/src/client/components/cryptokoyn/ElementsCryptokoyn.js +0 -38
  360. package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
  361. package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +0 -38
  362. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -58
  363. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
  364. package/src/client/components/default/ElementsDefault.js +0 -38
  365. package/src/client/components/default/RoutesDefault.js +0 -49
  366. package/src/client/components/itemledger/CommonItemledger.js +0 -29
  367. package/src/client/components/itemledger/ElementsItemledger.js +0 -38
  368. package/src/client/components/itemledger/RoutesItemledger.js +0 -40
  369. package/src/client/components/underpost/CommonUnderpost.js +0 -29
  370. package/src/client/components/underpost/ElementsUnderpost.js +0 -38
  371. package/src/client/components/underpost/RoutesUnderpost.js +0 -47
  372. package/src/client/sw/default.sw.js +0 -127
  373. package/src/client/sw/template.sw.js +0 -84
  374. package/src/ws/core/management/core.ws.chat.js +0 -8
  375. package/src/ws/core/management/core.ws.mailer.js +0 -16
  376. package/src/ws/core/management/core.ws.stream.js +0 -8
  377. package/src/ws/default/management/default.ws.main.js +0 -8
@@ -3,191 +3,129 @@ import { loggerFactory } from '../../server/logger.js';
3
3
  import { DataQuery } from '../../server/data-query.js';
4
4
  import { IpfsClient } from '../../server/ipfs-client.js';
5
5
  import { IpfsDto } from './ipfs.model.js';
6
-
7
6
  const logger = loggerFactory(import.meta);
8
-
9
7
  /**
10
- * Create (or upsert) an IPFS pin record for a given user + CID pair.
11
- * This is a helper consumed by other services (ObjectLayer, AtlasSpriteSheet, …)
12
- * so they don't need to know about the Ipfs model directly.
8
+ * Upsert a CID registry entry.
9
+ * Called by asset services (ObjectLayer, AtlasSpriteSheet) after a successful
10
+ * IPFS pin so the registry always reflects what is actually pinned.
13
11
  *
14
- * @param {object} opts
15
- * @param {string} opts.cid IPFS Content Identifier.
16
- * @param {string} opts.userId – Mongoose ObjectId string of the owning user.
17
- * @param {object} opts.options – Router options ({ host, path }) for DB lookup.
12
+ * @param {object} opts
13
+ * @param {string} opts.cid - IPFS Content Identifier.
14
+ * @param {string} opts.resourceType - Asset category ('object-layer-data' | 'atlas-sprite-sheet' | 'atlas-metadata').
15
+ * @param {string} [opts.mfsPath] - MFS path used when adding the content.
16
+ * @param {object} opts.options - Router options ({ host, path }) for DB lookup.
18
17
  * @returns {Promise<import('mongoose').Document>}
19
18
  */
20
- const createPinRecord = async ({ cid, userId, options }) => {
19
+ const createPinRecord = async ({ cid, resourceType, mfsPath = '', options }) => {
21
20
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
22
-
23
- // Upsert: if a record for this user + CID already exists, just touch it.
24
21
  const record = await Ipfs.findOneAndUpdate(
25
- { cid, userId },
26
- { cid, userId },
22
+ { cid, resourceType },
23
+ { cid, resourceType, mfsPath },
27
24
  { upsert: true, returnDocument: 'after', setDefaultsOnInsert: true },
28
25
  );
29
-
30
- logger.info(`IPFS pin record upserted – CID: ${cid}, userId: ${userId}`);
26
+ logger.info(`IPFS registry upserted – CID: ${cid}, type: ${resourceType}, mfsPath: ${mfsPath}`);
31
27
  return record;
32
28
  };
33
-
34
29
  /**
35
- * Remove all DB pin records for a CID, then best-effort unpin from IPFS node/cluster.
36
- * Always deletes the DB records first so that even if the IPFS node is unreachable
37
- * the database stays clean.
30
+ * Remove all DB registry entries for a CID, then best-effort unpin from the IPFS node.
31
+ * Always deletes DB records first so the registry stays clean even if the node is down.
38
32
  *
39
- * @param {string} cid IPFS Content Identifier to clean up.
40
- * @param {object} options Router options ({ host, path }) for DB lookup.
33
+ * @param {string} cid - IPFS Content Identifier to remove.
34
+ * @param {object} options - Router options ({ host, path }) for DB lookup.
41
35
  * @returns {Promise<void>}
42
36
  */
43
37
  const removePinRecordsAndUnpin = async (cid, options) => {
44
38
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
45
-
46
- // 1. Remove all DB pin records for this CID first
47
39
  await Ipfs.deleteMany({ cid });
48
- logger.info(`Removed all IPFS pin records for CID: ${cid}`);
49
-
50
- // 2. Best-effort unpin from IPFS node/cluster (ignore "not pinned" errors)
40
+ logger.info(`Removed IPFS registry entries for CID: ${cid}`);
51
41
  try {
52
42
  await IpfsClient.unpinCid(cid);
53
43
  } catch (err) {
54
44
  logger.warn(`Best-effort IPFS unpin failed for CID ${cid}: ${err.message}`);
55
45
  }
56
46
  };
57
-
58
- const IpfsService = {
47
+ class IpfsService {
59
48
  /** Expose helpers so other modules can import them directly. */
60
- createPinRecord,
61
- removePinRecordsAndUnpin,
62
-
49
+ static createPinRecord = createPinRecord;
50
+ static removePinRecordsAndUnpin = removePinRecordsAndUnpin;
63
51
  // ──────────────────────────────────────────────
64
52
  // Standard CRUD
65
53
  // ──────────────────────────────────────────────
66
-
67
- post: async (req, res, options) => {
68
- /** @type {import('./ipfs.model.js').IpfsModel} */
54
+ static post = async (req, res, options) => {
69
55
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
70
-
71
- // Accept { cid, userId? } in body.
72
- // If userId is omitted, fall back to the authenticated user.
73
- const body = { ...req.body };
74
- if (!body.userId && req.auth && req.auth.user) {
75
- body.userId = req.auth.user._id;
76
- }
77
- // Strip pinType if sent by legacy clients
78
- delete body.pinType;
79
-
80
- return await new Ipfs(body).save();
81
- },
82
-
83
- get: async (req, res, options) => {
84
- /** @type {import('./ipfs.model.js').IpfsModel} */
56
+ return await new Ipfs(req.body).save();
57
+ };
58
+ static get = async (req, res, options) => {
85
59
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
86
-
87
60
  if (req.params.id) {
88
- return await Ipfs.findById(req.params.id).select(IpfsDto.select.get()).populate(IpfsDto.populate.user());
61
+ return await Ipfs.findById(req.params.id).select(IpfsDto.select.get());
89
62
  }
90
-
91
63
  const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
92
-
93
64
  const [data, total] = await Promise.all([
94
- Ipfs.find(query)
95
- .select(IpfsDto.select.get())
96
- .sort(sort)
97
- .limit(limit)
98
- .skip(skip)
99
- .populate(IpfsDto.populate.user()),
65
+ Ipfs.find(query).select(IpfsDto.select.get()).sort(sort).limit(limit).skip(skip),
100
66
  Ipfs.countDocuments(query),
101
67
  ]);
102
-
103
68
  const totalPages = Math.ceil(total / limit);
104
69
  return { data, total, page, totalPages };
105
- },
106
-
107
- put: async (req, res, options) => {
108
- /** @type {import('./ipfs.model.js').IpfsModel} */
70
+ };
71
+ static put = async (req, res, options) => {
109
72
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
110
73
  return await Ipfs.findByIdAndUpdate(req.params.id, req.body, { returnDocument: 'after' });
111
- },
112
-
113
- delete: async (req, res, options) => {
114
- /** @type {import('./ipfs.model.js').IpfsModel} */
74
+ };
75
+ static delete = async (req, res, options) => {
115
76
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
116
-
117
77
  if (req.params.id) {
118
78
  const record = await Ipfs.findById(req.params.id);
119
79
  if (record) {
120
- // Remove DB record first, then best-effort unpin
121
80
  await Ipfs.findByIdAndDelete(req.params.id);
122
- try {
123
- // Only unpin from IPFS if no other records reference this CID
124
- const remaining = await Ipfs.countDocuments({ cid: record.cid });
125
- if (remaining === 0) {
81
+ // Only unpin from the node when no other registry entries reference this CID.
82
+ const remaining = await Ipfs.countDocuments({ cid: record.cid });
83
+ if (remaining === 0) {
84
+ try {
126
85
  await IpfsClient.unpinCid(record.cid);
86
+ } catch (err) {
87
+ logger.warn(`Failed to unpin CID ${record.cid}: ${err.message}`);
127
88
  }
128
- } catch (err) {
129
- logger.warn(`Failed to unpin CID ${record.cid} from IPFS node: ${err.message}`);
130
89
  }
131
90
  return record;
132
91
  }
133
92
  return null;
134
93
  }
135
-
136
94
  return await Ipfs.deleteMany();
137
- },
138
-
95
+ };
139
96
  // ──────────────────────────────────────────────
140
- // Pin / Unpin helpers (called via controller)
97
+ // Health / audit
141
98
  // ──────────────────────────────────────────────
142
-
143
99
  /**
144
- * POST /ipfs/pin – add content to IPFS, pin it, and create a DB record.
145
- * Body: { data: <string|object>, userId? }
100
+ * GET /ipfs/verify
101
+ *
102
+ * Iterates every CID in the registry and checks whether it is actually pinned
103
+ * on the connected IPFS node. Returns a summary suitable for admin dashboards
104
+ * and automated alerting.
105
+ *
106
+ * Response shape:
107
+ * { total, pinned, unpinned, errors, entries: [{ cid, resourceType, mfsPath, pinned, error? }] }
146
108
  */
147
- pin: async (req, res, options) => {
148
- const userId = req.body.userId || (req.auth && req.auth.user ? req.auth.user._id : undefined);
149
- if (!userId) throw new Error('userId is required to create a pin record');
150
-
151
- const content = typeof req.body.data === 'string' ? req.body.data : JSON.stringify(req.body.data);
152
- const result = await IpfsClient.addToIpfs(Buffer.from(content, 'utf-8'), req.body.filename || 'data');
153
-
154
- if (!result) throw new Error('IPFS node is unreachable – content was not pinned');
155
-
156
- const record = await createPinRecord({
157
- cid: result.cid,
158
- userId,
159
- options,
160
- });
161
-
162
- return { cid: result.cid, size: result.size, record };
163
- },
164
-
165
- /**
166
- * DELETE /ipfs/pin/:cid – unpin a CID and remove the DB record for the current user.
167
- */
168
- unpin: async (req, res, options) => {
109
+ static verify = async (req, res, options) => {
169
110
  const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
170
- const userId = req.auth && req.auth.user ? req.auth.user._id : undefined;
171
- const cid = req.params.cid || req.params.id;
172
-
173
- const record = await Ipfs.findOne({ cid, ...(userId ? { userId } : {}) });
174
- if (!record) throw new Error(`No pin record found for CID ${cid}`);
175
-
176
- // Remove DB record first
177
- await Ipfs.findByIdAndDelete(record._id);
178
-
179
- // Only unpin from the IPFS node when nobody else has a record for this CID
180
- const remaining = await Ipfs.countDocuments({ cid });
181
- if (remaining === 0) {
182
- try {
183
- await IpfsClient.unpinCid(cid);
184
- } catch (err) {
185
- logger.warn(`Best-effort IPFS unpin failed for CID ${cid}: ${err.message}`);
186
- }
187
- }
188
-
189
- return { success: true, cid };
190
- },
191
- };
192
-
111
+ const records = await Ipfs.find({}).select(IpfsDto.select.get()).lean();
112
+ let pinned = 0;
113
+ let unpinned = 0;
114
+ let errors = 0;
115
+ const entries = await Promise.all(
116
+ records.map(async (r) => {
117
+ try {
118
+ const isPinned = await IpfsClient.isCidPinned(r.cid);
119
+ if (isPinned) pinned++;
120
+ else unpinned++;
121
+ return { cid: r.cid, resourceType: r.resourceType, mfsPath: r.mfsPath, pinned: isPinned };
122
+ } catch (err) {
123
+ errors++;
124
+ return { cid: r.cid, resourceType: r.resourceType, mfsPath: r.mfsPath, pinned: false, error: err.message };
125
+ }
126
+ }),
127
+ );
128
+ return { total: records.length, pinned, unpinned, errors, entries };
129
+ };
130
+ }
193
131
  export { IpfsService, createPinRecord, removePinRecordsAndUnpin };
@@ -3,8 +3,8 @@ import { ObjectLayerService } from './object-layer.service.js';
3
3
 
4
4
  const logger = loggerFactory(import.meta);
5
5
 
6
- const ObjectLayerController = {
7
- post: async (req, res, options) => {
6
+ class ObjectLayerController {
7
+ static post = async (req, res, options) => {
8
8
  try {
9
9
  const result = await ObjectLayerService.post(req, res, options);
10
10
  return res.status(200).json({
@@ -18,8 +18,8 @@ const ObjectLayerController = {
18
18
  message: error.message,
19
19
  });
20
20
  }
21
- },
22
- get: async (req, res, options) => {
21
+ };
22
+ static get = async (req, res, options) => {
23
23
  try {
24
24
  if (req && req.headers && req.headers.origin) {
25
25
  res.set('Access-Control-Allow-Origin', req.headers.origin);
@@ -37,8 +37,8 @@ const ObjectLayerController = {
37
37
  message: error.message,
38
38
  });
39
39
  }
40
- },
41
- generateWebp: async (req, res, options) => {
40
+ };
41
+ static generateWebp = async (req, res, options) => {
42
42
  try {
43
43
  const result = await ObjectLayerService.generateWebp(req, res, options);
44
44
  if (req && req.headers && req.headers.origin) {
@@ -59,8 +59,8 @@ const ObjectLayerController = {
59
59
  message: error.message,
60
60
  });
61
61
  }
62
- },
63
- put: async (req, res, options) => {
62
+ };
63
+ static put = async (req, res, options) => {
64
64
  try {
65
65
  const result = await ObjectLayerService.put(req, res, options);
66
66
  return res.status(200).json({
@@ -74,8 +74,8 @@ const ObjectLayerController = {
74
74
  message: error.message,
75
75
  });
76
76
  }
77
- },
78
- delete: async (req, res, options) => {
77
+ };
78
+ static delete = async (req, res, options) => {
79
79
  try {
80
80
  const result = await ObjectLayerService.delete(req, res, options);
81
81
  return res.status(200).json({
@@ -89,7 +89,7 @@ const ObjectLayerController = {
89
89
  message: error.message,
90
90
  });
91
91
  }
92
- },
93
- };
92
+ };
93
+ }
94
94
 
95
95
  export { ObjectLayerController };
@@ -3,9 +3,7 @@
3
3
  * @module src/api/object-layer/object-layer.model.js
4
4
  * @namespace CyberiaObjectLayerModel
5
5
  */
6
-
7
6
  import { Schema, model } from 'mongoose';
8
-
9
7
  /**
10
8
  * @typedef {Object} Stats
11
9
  * @property {number} effect - The effect attribute value
@@ -27,7 +25,6 @@ const StatsSchema = new Schema(
27
25
  },
28
26
  { _id: false },
29
27
  );
30
-
31
28
  /**
32
29
  * @typedef {Object} Item
33
30
  * @property {string} id - Unique identifier for the item
@@ -45,7 +42,6 @@ const ItemSchema = new Schema(
45
42
  },
46
43
  { _id: false },
47
44
  );
48
-
49
45
  /**
50
46
  * @typedef {Object} Ledger
51
47
  * Blockchain protocol metadata linking the visual object-layer prefab to its economic reality.
@@ -68,7 +64,6 @@ const LedgerSchema = new Schema(
68
64
  },
69
65
  { _id: false },
70
66
  );
71
-
72
67
  /**
73
68
  * @typedef {Object} Render
74
69
  * IPFS content identifiers for the consolidated atlas sprite sheet.
@@ -83,7 +78,6 @@ const RenderSchema = new Schema(
83
78
  },
84
79
  { _id: false },
85
80
  );
86
-
87
81
  /**
88
82
  * @typedef {Object} ObjectLayer
89
83
  * @property {Object} data - Object layer data
@@ -138,11 +132,9 @@ const ObjectLayerSchema = new Schema(
138
132
  toObject: { virtuals: true },
139
133
  },
140
134
  );
141
-
142
135
  // Index for faster querying
143
136
  ObjectLayerSchema.index({ 'data.item.id': 1 });
144
137
  ObjectLayerSchema.index({ 'data.item.type': 1 });
145
-
146
138
  // Add text index for searchable fields
147
139
  ObjectLayerSchema.index(
148
140
  {
@@ -158,7 +150,6 @@ ObjectLayerSchema.index(
158
150
  },
159
151
  },
160
152
  );
161
-
162
153
  // Pre-save hook to ensure data consistency
163
154
  ObjectLayerSchema.pre('save', function () {
164
155
  // Ensure all required fields are present
@@ -167,14 +158,11 @@ ObjectLayerSchema.pre('save', function () {
167
158
  }
168
159
  // cid (object layer data JSON) and data.render.cid (atlas PNG) are optional – default to ''
169
160
  });
170
-
171
161
  // Create and export the model
172
162
  const ObjectLayerModel = model('ObjectLayer', ObjectLayerSchema);
173
-
174
163
  const ProviderSchema = ObjectLayerSchema;
175
-
176
- const ObjectLayerDto = {
177
- select: {
164
+ class ObjectLayerDto {
165
+ static select = {
178
166
  get: () => {
179
167
  return {
180
168
  _id: 1,
@@ -207,7 +195,6 @@ const ObjectLayerDto = {
207
195
  objectLayerRenderFramesId: 1,
208
196
  };
209
197
  },
210
- },
211
- };
212
-
198
+ };
199
+ }
213
200
  export { ObjectLayerSchema, ObjectLayerModel, ProviderSchema, ObjectLayerDto };
@@ -334,6 +334,36 @@ const ObjectLayerRouter = (options) => {
334
334
  */
335
335
  return await ObjectLayerController.get(req, res, options);
336
336
  });
337
+ router.get(`/search-item-ids`, async (req, res) => {
338
+ /*
339
+ #swagger.auto = false
340
+ #swagger.tags = ['object-layer']
341
+ #swagger.summary = 'Search object layer item IDs'
342
+ #swagger.description = 'Returns partial matches of data.item.id for type-ahead autocomplete'
343
+ #swagger.path = '/object-layer/search-item-ids'
344
+ #swagger.method = 'get'
345
+ #swagger.produces = ['application/json']
346
+
347
+ #swagger.parameters['q'] = {
348
+ in: 'query',
349
+ description: 'Partial item ID to search for',
350
+ required: false,
351
+ type: 'string'
352
+ }
353
+
354
+ #swagger.responses[200] = {
355
+ description: 'Item IDs matching the query',
356
+ content: {
357
+ 'application/json': {
358
+ schema: {
359
+ $ref: '#/components/schemas/objectLayerResponse'
360
+ }
361
+ }
362
+ }
363
+ }
364
+ */
365
+ return await ObjectLayerController.get(req, res, options);
366
+ });
337
367
  router.get(`/frame-counts/:id`, async (req, res) => {
338
368
  /*
339
369
  #swagger.auto = false