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
@@ -27,7 +27,7 @@ const logger = loggerFactory(import.meta);
27
27
  * @namespace FileServiceServer.FileServiceDto
28
28
  * @memberof FileServiceServer
29
29
  */
30
- const FileServiceDto = {
30
+ class FileServiceDto {
31
31
  /**
32
32
  * Returns file metadata only (no buffer data).
33
33
  * Used for list responses and API integration.
@@ -36,7 +36,7 @@ const FileServiceDto = {
36
36
  * @param {Object} file - File document from database.
37
37
  * @returns {Object|null} File metadata object, or null if file is falsy.
38
38
  */
39
- toMetadata: (file) => {
39
+ static toMetadata = (file) => {
40
40
  if (!file) return null;
41
41
  return {
42
42
  _id: file._id,
@@ -48,7 +48,7 @@ const FileServiceDto = {
48
48
  createdAt: file.createdAt,
49
49
  updatedAt: file.updatedAt,
50
50
  };
51
- },
51
+ };
52
52
 
53
53
  /**
54
54
  * Transforms array of files to metadata only.
@@ -57,10 +57,10 @@ const FileServiceDto = {
57
57
  * @param {Array} files - Array of file documents.
58
58
  * @returns {Array} Array of file metadata objects.
59
59
  */
60
- toMetadataArray: (files) => {
60
+ static toMetadataArray = (files) => {
61
61
  if (!Array.isArray(files)) return [];
62
62
  return files.map((file) => FileServiceDto.toMetadata(file));
63
- },
63
+ };
64
64
 
65
65
  /**
66
66
  * Ensures UTF-8 encoding for filenames.
@@ -70,14 +70,14 @@ const FileServiceDto = {
70
70
  * @param {string} filename - Raw filename from upload.
71
71
  * @returns {string} UTF-8 encoded filename.
72
72
  */
73
- normalizeFilename: (filename) => {
73
+ static normalizeFilename = (filename) => {
74
74
  if (!filename) return '';
75
75
  // Ensure string and normalize to UTF-8
76
76
  let normalized = String(filename);
77
77
  // Replace any incorrectly encoded sequences
78
78
  normalized = Buffer.from(normalized, 'utf8').toString('utf8');
79
79
  return normalized;
80
- },
80
+ };
81
81
 
82
82
  /**
83
83
  * Get select fields for metadata-only queries.
@@ -86,17 +86,17 @@ const FileServiceDto = {
86
86
  * @memberof FileServiceServer.FileServiceDto
87
87
  * @returns {string} Space-separated list of field names for metadata selection.
88
88
  */
89
- metadataSelect: () => {
89
+ static metadataSelect = () => {
90
90
  return '_id name mimetype size encoding md5 cid createdAt updatedAt';
91
- },
92
- };
91
+ };
92
+ }
93
93
 
94
94
  /**
95
95
  * File Factory for file extraction, upload, and creation utilities.
96
96
  * @namespace FileServiceServer.FileFactory
97
97
  * @memberof FileServiceServer
98
98
  */
99
- const FileFactory = {
99
+ class FileFactory {
100
100
  /**
101
101
  * Extract files from request.
102
102
  * Handles both standard 'file' field and custom fields.
@@ -105,7 +105,7 @@ const FileFactory = {
105
105
  * @param {Object} req - Express request object with files.
106
106
  * @returns {Array} Array of extracted file objects.
107
107
  */
108
- filesExtract: (req) => {
108
+ static filesExtract = (req) => {
109
109
  const files = [];
110
110
  if (!req.files || Object.keys(req.files).length === 0) {
111
111
  return files;
@@ -139,7 +139,7 @@ const FileFactory = {
139
139
  }
140
140
 
141
141
  return files;
142
- },
142
+ };
143
143
 
144
144
  /**
145
145
  * Upload files to database with UTF-8 encoding.
@@ -150,7 +150,7 @@ const FileFactory = {
150
150
  * @param {import('mongoose').Model} File - Mongoose File model.
151
151
  * @returns {Promise<Array>} Array of uploaded file metadata objects.
152
152
  */
153
- upload: async function (req, File) {
153
+ static async upload(req, File) {
154
154
  const results = FileFactory.filesExtract(req);
155
155
  let index = -1;
156
156
 
@@ -172,7 +172,7 @@ const FileFactory = {
172
172
  }
173
173
 
174
174
  return results;
175
- },
175
+ }
176
176
 
177
177
  /**
178
178
  * Convert string to hexadecimal.
@@ -181,9 +181,9 @@ const FileFactory = {
181
181
  * @param {string} [raw=''] - Raw string to convert.
182
182
  * @returns {string} Hexadecimal representation of the string.
183
183
  */
184
- hex: (raw = '') => {
184
+ static hex = (raw = '') => {
185
185
  return Buffer.from(raw, 'utf8').toString('hex');
186
- },
186
+ };
187
187
 
188
188
  /**
189
189
  * Get MIME type from file path based on extension.
@@ -192,7 +192,7 @@ const FileFactory = {
192
192
  * @param {string} path - File path or filename with extension.
193
193
  * @returns {string} MIME type string.
194
194
  */
195
- getMymeTypeFromPath: (path) => {
195
+ static getMymeTypeFromPath = (path) => {
196
196
  const ext = String(path || '')
197
197
  .toLowerCase()
198
198
  .split('.')
@@ -210,7 +210,7 @@ const FileFactory = {
210
210
  json: 'application/json',
211
211
  };
212
212
  return mimeTypes[ext] || 'application/octet-stream';
213
- },
213
+ };
214
214
 
215
215
  /**
216
216
  * Create file object with proper encoding.
@@ -220,7 +220,7 @@ const FileFactory = {
220
220
  * @param {string} [name=''] - File name.
221
221
  * @returns {Object} File object with name, data, size, encoding, mimetype, and md5.
222
222
  */
223
- create: (data = Buffer.from([]), name = '') => {
223
+ static create = (data = Buffer.from([]), name = '') => {
224
224
  const normalizedName = FileServiceDto.normalizeFilename(name);
225
225
 
226
226
  return {
@@ -234,8 +234,8 @@ const FileFactory = {
234
234
  md5: crypto.createHash('md5').update(data).digest('hex'),
235
235
  cid: undefined,
236
236
  };
237
- },
238
- };
237
+ };
238
+ }
239
239
 
240
240
  /**
241
241
  * File cleanup utilities for preventing orphaned files.
@@ -244,7 +244,7 @@ const FileFactory = {
244
244
  * @namespace FileServiceServer.FileCleanup
245
245
  * @memberof FileServiceServer
246
246
  */
247
- const FileCleanup = {
247
+ class FileCleanup {
248
248
  /**
249
249
  * Clean up old file references when document fields are updated.
250
250
  * Deletes old files that are being replaced by new file IDs.
@@ -258,7 +258,7 @@ const FileCleanup = {
258
258
  * @param {import('mongoose').Model} options.File - Mongoose File model.
259
259
  * @returns {Promise<Array>} Array of deleted file IDs.
260
260
  */
261
- cleanupReplacedFiles: async ({ oldDoc, newData, fileFields, File }) => {
261
+ static cleanupReplacedFiles = async ({ oldDoc, newData, fileFields, File }) => {
262
262
  const deletedFileIds = [];
263
263
 
264
264
  for (const field of fileFields) {
@@ -281,7 +281,7 @@ const FileCleanup = {
281
281
  }
282
282
 
283
283
  return deletedFileIds;
284
- },
284
+ };
285
285
 
286
286
  /**
287
287
  * Delete all files referenced in a document.
@@ -297,7 +297,7 @@ const FileCleanup = {
297
297
  * @param {import('mongoose').Model} options.File - Mongoose File model.
298
298
  * @returns {Promise<Array>} Array of deleted file IDs.
299
299
  */
300
- deleteDocumentFiles: async ({ doc, fileFields, File }) => {
300
+ static deleteDocumentFiles = async ({ doc, fileFields, File }) => {
301
301
  const deletedFileIds = [];
302
302
 
303
303
  for (const field of fileFields) {
@@ -318,15 +318,15 @@ const FileCleanup = {
318
318
  }
319
319
 
320
320
  return deletedFileIds;
321
- },
322
- };
321
+ };
322
+ }
323
323
 
324
324
  /**
325
325
  * File Service for handling REST API file operations.
326
326
  * @namespace FileServiceServer.FileService
327
327
  * @memberof FileServiceServer
328
328
  */
329
- const FileService = {
329
+ class FileService {
330
330
  /**
331
331
  * POST - Upload files.
332
332
  * Returns metadata-only response (no buffer data).
@@ -338,7 +338,7 @@ const FileService = {
338
338
  * @param {Object} options - Request options containing host and path.
339
339
  * @returns {Promise<Array>} Array of uploaded file metadata objects.
340
340
  */
341
- post: async (req, res, options) => {
341
+ static post = async (req, res, options) => {
342
342
  // Check that user is authenticated and not a guest
343
343
  if (!req.auth || !req.auth.user || req.auth.user.role === 'guest') {
344
344
  throw new Error('Authentication required. Guest users cannot upload files.');
@@ -349,7 +349,7 @@ const FileService = {
349
349
 
350
350
  const uploadedFiles = await FileFactory.upload(req, File);
351
351
  return FileServiceDto.toMetadataArray(uploadedFiles);
352
- },
352
+ };
353
353
 
354
354
  /**
355
355
  * GET - Retrieve files.
@@ -365,7 +365,7 @@ const FileService = {
365
365
  * @returns {Promise<Array|Buffer>} Array of file metadata objects or Buffer for blob endpoint.
366
366
  * @throws {Error} If file not found or user not authorized.
367
367
  */
368
- get: async (req, res, options) => {
368
+ static get = async (req, res, options) => {
369
369
  /** @type {import('./file.model.js').FileModel} */
370
370
  const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
371
371
  /** @type {import('../document/document.model.js').DocumentModel} */
@@ -467,7 +467,7 @@ const FileService = {
467
467
  return FileServiceDto.toMetadataArray(files);
468
468
  }
469
469
  }
470
- },
470
+ };
471
471
 
472
472
  /**
473
473
  * DELETE - Remove files.
@@ -480,7 +480,7 @@ const FileService = {
480
480
  * @returns {Promise<Object>} Deleted file metadata object.
481
481
  * @throws {Error} If file not found.
482
482
  */
483
- delete: async (req, res, options) => {
483
+ static delete = async (req, res, options) => {
484
484
  /** @type {import('./file.model.js').FileModel} */
485
485
  const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
486
486
 
@@ -491,7 +491,7 @@ const FileService = {
491
491
  }
492
492
 
493
493
  return FileServiceDto.toMetadata(result);
494
- },
495
- };
494
+ };
495
+ }
496
496
 
497
497
  export { FileService, FileFactory, FileServiceDto, FileCleanup };
@@ -3,8 +3,8 @@ import { InstanceService } from './instance.service.js';
3
3
 
4
4
  const logger = loggerFactory(import.meta);
5
5
 
6
- const InstanceController = {
7
- post: async (req, res, options) => {
6
+ class InstanceController {
7
+ static post = async (req, res, options) => {
8
8
  try {
9
9
  const result = await InstanceService.post(req, res, options);
10
10
  return res.status(200).json({
@@ -18,8 +18,8 @@ const InstanceController = {
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
  const result = await InstanceService.get(req, res, options);
25
25
  return res.status(200).json({
@@ -33,8 +33,8 @@ const InstanceController = {
33
33
  message: error.message,
34
34
  });
35
35
  }
36
- },
37
- put: async (req, res, options) => {
36
+ };
37
+ static put = async (req, res, options) => {
38
38
  try {
39
39
  const result = await InstanceService.put(req, res, options);
40
40
  return res.status(200).json({
@@ -48,8 +48,8 @@ const InstanceController = {
48
48
  message: error.message,
49
49
  });
50
50
  }
51
- },
52
- delete: async (req, res, options) => {
51
+ };
52
+ static delete = async (req, res, options) => {
53
53
  try {
54
54
  const result = await InstanceService.delete(req, res, options);
55
55
  return res.status(200).json({
@@ -63,7 +63,7 @@ const InstanceController = {
63
63
  message: error.message,
64
64
  });
65
65
  }
66
- },
67
- };
66
+ };
67
+ }
68
68
 
69
69
  export { InstanceController };
@@ -1,7 +1,5 @@
1
1
  import { Schema, model, Types } from 'mongoose';
2
-
3
2
  // https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
4
-
5
3
  const InstanceSchema = new Schema(
6
4
  {
7
5
  deployId: { type: String },
@@ -20,9 +18,8 @@ const InstanceSchema = new Schema(
20
18
  timestamps: true,
21
19
  },
22
20
  );
23
-
24
- const InstanceDto = {
25
- populate: {
21
+ class InstanceDto {
22
+ static populate = {
26
23
  get: () => {
27
24
  return {
28
25
  path: 'userId',
@@ -30,11 +27,8 @@ const InstanceDto = {
30
27
  select: '_id email',
31
28
  };
32
29
  },
33
- },
34
- };
35
-
30
+ };
31
+ }
36
32
  const InstanceModel = model('Instance', InstanceSchema);
37
-
38
33
  const ProviderSchema = InstanceSchema;
39
-
40
34
  export { InstanceSchema, InstanceModel, ProviderSchema, InstanceDto };
@@ -5,13 +5,13 @@ import { InstanceDto } from './instance.model.js';
5
5
 
6
6
  const logger = loggerFactory(import.meta);
7
7
 
8
- const InstanceService = {
9
- post: async (req, res, options) => {
8
+ class InstanceService {
9
+ static post = async (req, res, options) => {
10
10
  /** @type {import('./instance.model.js').InstanceModel} */
11
11
  const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
12
12
  return await new Instance(req.body).save();
13
- },
14
- get: async (req, res, options) => {
13
+ };
14
+ static get = async (req, res, options) => {
15
15
  /** @type {import('./instance.model.js').InstanceModel} */
16
16
  const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
17
17
 
@@ -58,18 +58,18 @@ const InstanceService = {
58
58
  return { data: dataUser, total: totalUser, page, totalPages: Math.ceil(totalUser / limit) };
59
59
  }
60
60
  }
61
- },
62
- put: async (req, res, options) => {
61
+ };
62
+ static put = async (req, res, options) => {
63
63
  /** @type {import('./instance.model.js').InstanceModel} */
64
64
  const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
65
65
  return await Instance.findByIdAndUpdate(req.params.id, req.body);
66
- },
67
- delete: async (req, res, options) => {
66
+ };
67
+ static delete = async (req, res, options) => {
68
68
  /** @type {import('./instance.model.js').InstanceModel} */
69
69
  const Instance = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Instance;
70
70
  if (req.params.id) return await Instance.findByIdAndDelete(req.params.id);
71
71
  else return await Instance.deleteMany();
72
- },
73
- };
72
+ };
73
+ }
74
74
 
75
75
  export { InstanceService };
@@ -3,8 +3,8 @@ import { IpfsService } from './ipfs.service.js';
3
3
 
4
4
  const logger = loggerFactory(import.meta);
5
5
 
6
- const IpfsController = {
7
- post: async (req, res, options) => {
6
+ class IpfsController {
7
+ static post = async (req, res, options) => {
8
8
  try {
9
9
  const result = await IpfsService.post(req, res, options);
10
10
  return res.status(200).json({
@@ -18,8 +18,8 @@ const IpfsController = {
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
  const { page, limit } = req.query;
25
25
  const result = await IpfsService.get(
@@ -38,8 +38,8 @@ const IpfsController = {
38
38
  message: error.message,
39
39
  });
40
40
  }
41
- },
42
- put: async (req, res, options) => {
41
+ };
42
+ static put = async (req, res, options) => {
43
43
  try {
44
44
  const result = await IpfsService.put(req, res, options);
45
45
  return res.status(200).json({
@@ -53,8 +53,8 @@ const IpfsController = {
53
53
  message: error.message,
54
54
  });
55
55
  }
56
- },
57
- delete: async (req, res, options) => {
56
+ };
57
+ static delete = async (req, res, options) => {
58
58
  try {
59
59
  const result = await IpfsService.delete(req, res, options);
60
60
  return res.status(200).json({
@@ -68,37 +68,16 @@ const IpfsController = {
68
68
  message: error.message,
69
69
  });
70
70
  }
71
- },
72
- pin: async (req, res, options) => {
71
+ };
72
+ static verify = async (req, res, options) => {
73
73
  try {
74
- const result = await IpfsService.pin(req, res, options);
75
- return res.status(200).json({
76
- status: 'success',
77
- data: result,
78
- });
79
- } catch (error) {
80
- logger.error(error, error.stack);
81
- return res.status(400).json({
82
- status: 'error',
83
- message: error.message,
84
- });
85
- }
86
- },
87
- unpin: async (req, res, options) => {
88
- try {
89
- const result = await IpfsService.unpin(req, res, options);
90
- return res.status(200).json({
91
- status: 'success',
92
- data: result,
93
- });
74
+ const result = await IpfsService.verify(req, res, options);
75
+ return res.status(200).json({ status: 'success', data: result });
94
76
  } catch (error) {
95
77
  logger.error(error, error.stack);
96
- return res.status(400).json({
97
- status: 'error',
98
- message: error.message,
99
- });
78
+ return res.status(400).json({ status: 'error', message: error.message });
100
79
  }
101
- },
102
- };
80
+ };
81
+ }
103
82
 
104
83
  export { IpfsController };
@@ -1,21 +1,27 @@
1
1
  /**
2
- * Mongoose model for IPFS API – a general-purpose pin record that relates
3
- * a user to a CID.
2
+ * Mongoose model for the IPFS CID Registry.
3
+ *
4
+ * Purpose: tracks every CID that the Engine has pinned to IPFS so that:
5
+ * 1. Deletions can cleanly unpin the right CID from the IPFS node/cluster.
6
+ * 2. Admins can run a health-check that verifies every DB-registered CID is
7
+ * still actually pinned (GET /ipfs/verify).
8
+ * 3. Garbage-collection jobs can discover orphaned CIDs (pinned on the node
9
+ * but not referenced by any DB document).
10
+ *
11
+ * Fields:
12
+ * cid - IPFS Content Identifier (CIDv0 or CIDv1).
13
+ * resourceType - What kind of asset this CID belongs to:
14
+ * 'object-layer-data' - JSON payload of an ObjectLayer document.
15
+ * 'atlas-sprite-sheet' - PNG sprite-sheet of an ObjectLayer.
16
+ * 'atlas-metadata' - JSON metadata of an AtlasSpriteSheet.
17
+ * mfsPath - MFS (Mutable File System) path used when the CID was added,
18
+ * e.g. /object-layer/sword/sword_data.json.
19
+ * Enables targeted removal via files/rm without knowing the CID.
4
20
  *
5
21
  * @module src/api/ipfs/ipfs.model.js
6
22
  * @namespace IpfsModel
7
23
  */
8
-
9
24
  import { Schema, model } from 'mongoose';
10
-
11
- /**
12
- * @typedef {Object} Ipfs
13
- * @property {string} cid – IPFS Content Identifier (CIDv0 or CIDv1).
14
- * @property {Types.ObjectId} userId – Reference to the User who owns / requested the pin.
15
- * @property {Date} createdAt – Auto-managed by Mongoose.
16
- * @property {Date} updatedAt – Auto-managed by Mongoose.
17
- * @memberof IpfsModel
18
- */
19
25
  const IpfsSchema = new Schema(
20
26
  {
21
27
  cid: {
@@ -23,49 +29,43 @@ const IpfsSchema = new Schema(
23
29
  required: true,
24
30
  trim: true,
25
31
  },
26
- userId: {
27
- type: Schema.Types.ObjectId,
28
- ref: 'User',
32
+ // Asset category - determines which service owns this CID.
33
+ resourceType: {
34
+ type: String,
29
35
  required: true,
36
+ trim: true,
37
+ enum: ['object-layer-data', 'atlas-sprite-sheet', 'atlas-metadata'],
38
+ },
39
+ // MFS path used when the content was added to IPFS.
40
+ // Empty string when the content was added without an MFS copy.
41
+ mfsPath: {
42
+ type: String,
43
+ default: '',
44
+ trim: true,
30
45
  },
31
46
  },
32
47
  {
33
48
  timestamps: true,
34
49
  },
35
50
  );
36
-
37
- // Compound index: one pin record per user + CID pair.
38
- IpfsSchema.index({ cid: 1, userId: 1 }, { unique: true });
39
-
40
- // Fast look-ups by user.
41
- IpfsSchema.index({ userId: 1 });
42
-
43
- // Fast look-ups by CID.
44
- IpfsSchema.index({ cid: 1 });
45
-
51
+ // One DB record per (CID, resourceType) pair.
52
+ IpfsSchema.index({ cid: 1, resourceType: 1 }, { unique: true });
53
+ // Fast look-ups for health-check and garbage-collection by type.
54
+ IpfsSchema.index({ resourceType: 1 });
55
+ // Fast look-ups for targeted MFS cleanup.
56
+ IpfsSchema.index({ mfsPath: 1 });
46
57
  const IpfsModel = model('Ipfs', IpfsSchema);
47
-
48
58
  const ProviderSchema = IpfsSchema;
49
-
50
- const IpfsDto = {
51
- select: {
52
- get: () => {
53
- return {
54
- _id: 1,
55
- cid: 1,
56
- userId: 1,
57
- createdAt: 1,
58
- updatedAt: 1,
59
- };
60
- },
61
- },
62
- populate: {
63
- user: () => ({
64
- path: 'userId',
65
- model: 'User',
66
- select: '_id username email role',
59
+ class IpfsDto {
60
+ static select = {
61
+ get: () => ({
62
+ _id: 1,
63
+ cid: 1,
64
+ resourceType: 1,
65
+ mfsPath: 1,
66
+ createdAt: 1,
67
+ updatedAt: 1,
67
68
  }),
68
- },
69
- };
70
-
69
+ };
70
+ }
71
71
  export { IpfsSchema, IpfsModel, ProviderSchema, IpfsDto };
@@ -8,19 +8,14 @@ const logger = loggerFactory(import.meta);
8
8
  const IpfsRouter = (options) => {
9
9
  const router = express.Router();
10
10
  const authMiddleware = options.authMiddleware;
11
- router.post(`/pin`, authMiddleware, adminGuard, async (req, res) => await IpfsController.pin(req, res, options));
12
- router.delete(
13
- `/pin/:cid`,
14
- authMiddleware,
15
- adminGuard,
16
- async (req, res) => await IpfsController.unpin(req, res, options),
17
- );
18
- router.post(`/:id`, authMiddleware, async (req, res) => await IpfsController.post(req, res, options));
19
- router.post(`/`, authMiddleware, async (req, res) => await IpfsController.post(req, res, options));
20
- router.get(`/:id`, authMiddleware, async (req, res) => await IpfsController.get(req, res, options));
21
- router.get(`/`, authMiddleware, async (req, res) => await IpfsController.get(req, res, options));
22
- router.put(`/:id`, authMiddleware, async (req, res) => await IpfsController.put(req, res, options));
23
- router.put(`/`, authMiddleware, async (req, res) => await IpfsController.put(req, res, options));
11
+ // Health / audit must come before /:id to avoid matching conflicts.
12
+ router.get(`/verify`, authMiddleware, adminGuard, async (req, res) => await IpfsController.verify(req, res, options));
13
+ router.post(`/:id`, authMiddleware, adminGuard, async (req, res) => await IpfsController.post(req, res, options));
14
+ router.post(`/`, authMiddleware, adminGuard, async (req, res) => await IpfsController.post(req, res, options));
15
+ router.get(`/:id`, authMiddleware, adminGuard, async (req, res) => await IpfsController.get(req, res, options));
16
+ router.get(`/`, authMiddleware, adminGuard, async (req, res) => await IpfsController.get(req, res, options));
17
+ router.put(`/:id`, authMiddleware, adminGuard, async (req, res) => await IpfsController.put(req, res, options));
18
+ router.put(`/`, authMiddleware, adminGuard, async (req, res) => await IpfsController.put(req, res, options));
24
19
  router.delete(`/:id`, authMiddleware, adminGuard, async (req, res) => await IpfsController.delete(req, res, options));
25
20
  router.delete(`/`, authMiddleware, adminGuard, async (req, res) => await IpfsController.delete(req, res, options));
26
21
  return router;