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,18 @@
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
4
 
5
5
  const logger = loggerFactory(import.meta);
6
6
 
7
- const DefaultService = {
8
- post: async (req, res, options) => {
7
+ class DefaultService {
8
+ static post = async (req, res, options) => {
9
9
  /** @type {import('./default.model.js').DefaultModel} */
10
- const Default = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Default;
10
+ const Default = DataBaseProviderService.getModel("Default", options);
11
11
  return await new Default(req.body).save();
12
- },
13
- get: async (req, res, options) => {
12
+ };
13
+ static get = async (req, res, options) => {
14
14
  /** @type {import('./default.model.js').DefaultModel} */
15
- const Default = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Default;
15
+ const Default = DataBaseProviderService.getModel("Default", options);
16
16
  if (req.params.id) return await Default.findById(req.params.id);
17
17
 
18
18
  // Parse query parameters using DataQuery helper
@@ -25,18 +25,18 @@ const DefaultService = {
25
25
 
26
26
  const totalPages = Math.ceil(total / limit);
27
27
  return { data, total, page, totalPages };
28
- },
29
- put: async (req, res, options) => {
28
+ };
29
+ static put = async (req, res, options) => {
30
30
  /** @type {import('./default.model.js').DefaultModel} */
31
- const Default = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Default;
31
+ const Default = DataBaseProviderService.getModel("Default", options);
32
32
  return await Default.findByIdAndUpdate(req.params.id, req.body);
33
- },
34
- delete: async (req, res, options) => {
33
+ };
34
+ static delete = async (req, res, options) => {
35
35
  /** @type {import('./default.model.js').DefaultModel} */
36
- const Default = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Default;
36
+ const Default = DataBaseProviderService.getModel("Default", options);
37
37
  if (req.params.id) return await Default.findByIdAndDelete(req.params.id);
38
38
  else return await Default.deleteMany();
39
- },
40
- };
39
+ };
40
+ }
41
41
 
42
42
  export { DefaultService };
@@ -2,8 +2,8 @@ import { loggerFactory } from '../../server/logger.js';
2
2
  import { DocumentService } from './document.service.js';
3
3
  const logger = loggerFactory(import.meta);
4
4
 
5
- const DocumentController = {
6
- post: async (req, res, options) => {
5
+ class DocumentController {
6
+ static post = async (req, res, options) => {
7
7
  try {
8
8
  return res.status(200).json({
9
9
  status: 'success',
@@ -16,8 +16,8 @@ const DocumentController = {
16
16
  message: error.message,
17
17
  });
18
18
  }
19
- },
20
- get: async (req, res, options) => {
19
+ };
20
+ static get = async (req, res, options) => {
21
21
  try {
22
22
  return res.status(200).json({
23
23
  status: 'success',
@@ -30,8 +30,8 @@ const DocumentController = {
30
30
  message: error.message,
31
31
  });
32
32
  }
33
- },
34
- delete: async (req, res, options) => {
33
+ };
34
+ static delete = async (req, res, options) => {
35
35
  try {
36
36
  const result = await DocumentService.delete(req, res, options);
37
37
  return res.status(200).json({
@@ -45,8 +45,8 @@ const DocumentController = {
45
45
  message: error.message,
46
46
  });
47
47
  }
48
- },
49
- put: async (req, res, options) => {
48
+ };
49
+ static put = async (req, res, options) => {
50
50
  try {
51
51
  const result = await DocumentService.put(req, res, options);
52
52
  return res.status(200).json({
@@ -60,8 +60,8 @@ const DocumentController = {
60
60
  message: error.message,
61
61
  });
62
62
  }
63
- },
64
- patch: async (req, res, options) => {
63
+ };
64
+ static patch = async (req, res, options) => {
65
65
  try {
66
66
  const result = await DocumentService.patch(req, res, options);
67
67
  return res.status(200).json({
@@ -75,7 +75,7 @@ const DocumentController = {
75
75
  message: error.message,
76
76
  });
77
77
  }
78
- },
79
- };
78
+ };
79
+ }
80
80
 
81
81
  export { DocumentController };
@@ -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 DocumentSchema = new Schema(
6
4
  {
7
5
  userId: {
@@ -35,13 +33,10 @@ const DocumentSchema = new Schema(
35
33
  timestamps: true,
36
34
  },
37
35
  );
38
-
39
36
  const DocumentModel = model('Document', DocumentSchema);
40
-
41
37
  const ProviderSchema = DocumentSchema;
42
-
43
- const DocumentDto = {
44
- populate: {
38
+ class DocumentDto {
39
+ static populate = {
45
40
  file: () => {
46
41
  return {
47
42
  path: 'fileId',
@@ -68,34 +63,33 @@ const DocumentDto = {
68
63
  },
69
64
  };
70
65
  },
71
- },
72
- getTotalCopyShareLinkCount: (document) => {
66
+ };
67
+ static getTotalCopyShareLinkCount = (document) => {
73
68
  if (!document.share || !document.share.copyShareLinkEvent) return 0;
74
69
  return document.share.copyShareLinkEvent.reduce((total, event) => total + (event.count || 0), 0);
75
- },
70
+ };
76
71
  /**
77
72
  * Filter 'public' tag from tags array
78
73
  * The 'public' tag is internal and should not be rendered to users
79
74
  * @param {string[]} tags - Array of tags
80
75
  * @returns {string[]} - Filtered tags without 'public'
81
76
  */
82
- filterPublicTag: (tags) => {
77
+ static filterPublicTag = (tags) => {
83
78
  if (!tags || !Array.isArray(tags)) return [];
84
79
  return tags.filter((tag) => tag !== 'public');
85
- },
80
+ };
86
81
  /**
87
82
  * Extract isPublic boolean from tags array and return cleaned tags
88
83
  * @param {string[]} tags - Array of tags potentially containing 'public'
89
84
  * @returns {{ isPublic: boolean, tags: string[] }} - Object with isPublic flag and cleaned tags
90
85
  */
91
- extractPublicFromTags: (tags) => {
86
+ static extractPublicFromTags = (tags) => {
92
87
  if (!tags || !Array.isArray(tags)) {
93
88
  return { isPublic: false, tags: [] };
94
89
  }
95
90
  const hasPublicTag = tags.includes('public');
96
91
  const cleanedTags = tags.filter((tag) => tag !== 'public');
97
92
  return { isPublic: hasPublicTag, tags: cleanedTags };
98
- },
99
- };
100
-
93
+ };
94
+ }
101
95
  export { DocumentSchema, DocumentModel, ProviderSchema, DocumentDto };
@@ -1,31 +1,36 @@
1
1
  import { loggerFactory } from '../../server/logger.js';
2
2
  import { DocumentController } from './document.controller.js';
3
3
  import express from 'express';
4
- import fs from 'fs-extra';
4
+
5
5
  const logger = loggerFactory(import.meta);
6
6
 
7
- const DocumentRouter = (options) => {
8
- const router = express.Router();
9
- const authMiddleware = options.authMiddleware;
10
- router.post(`/:id`, authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
11
- router.post(`/`, authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
12
- router.get(`/public/high`, async (req, res) => await DocumentController.get(req, res, options));
13
- router.get(`/public`, async (req, res) => await DocumentController.get(req, res, options));
14
- router.get(`/:id`, authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
15
- router.get(`/`, authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
16
- router.put(`/:id`, authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
17
- router.put(`/`, authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
18
- router.patch(`/:id/copy-share-link`, async (req, res) => await DocumentController.patch(req, res, options));
19
- router.patch(
20
- `/:id/toggle-public`,
21
- authMiddleware,
22
- async (req, res) => await DocumentController.patch(req, res, options),
23
- );
24
- router.delete(`/:id`, authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
25
- router.delete(`/`, authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
26
- return router;
27
- };
7
+ class DocumentRouter {
8
+ /**
9
+ * @param {import('../types.js').RouterOptions} options
10
+ * @returns {import('express').Router}
11
+ */
12
+ static router(options) {
13
+ const router = express.Router();
14
+ router.post(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
15
+ router.post(`/`, options.authMiddleware, async (req, res) => await DocumentController.post(req, res, options));
16
+ router.get(`/public/high`, async (req, res) => await DocumentController.get(req, res, options));
17
+ router.get(`/public`, async (req, res) => await DocumentController.get(req, res, options));
18
+ router.get(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
19
+ router.get(`/`, options.authMiddleware, async (req, res) => await DocumentController.get(req, res, options));
20
+ router.put(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
21
+ router.put(`/`, options.authMiddleware, async (req, res) => await DocumentController.put(req, res, options));
22
+ router.patch(`/:id/copy-share-link`, async (req, res) => await DocumentController.patch(req, res, options));
23
+ router.patch(
24
+ `/:id/toggle-public`,
25
+ options.authMiddleware,
26
+ async (req, res) => await DocumentController.patch(req, res, options),
27
+ );
28
+ router.delete(`/:id`, options.authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
29
+ router.delete(`/`, options.authMiddleware, async (req, res) => await DocumentController.delete(req, res, options));
30
+ return router;
31
+ }
32
+ }
28
33
 
29
- const ApiRouter = DocumentRouter;
34
+ const ApiRouter = (options) => DocumentRouter.router(options);
30
35
 
31
36
  export { ApiRouter, DocumentRouter };
@@ -1,5 +1,14 @@
1
+ /**
2
+ * Document service module for handling document CRUD operations.
3
+ * Provides REST API handlers for document management with security-aware
4
+ * public/private document access control, search, and file cleanup integration.
5
+ *
6
+ * @module src/api/document/document.service.js
7
+ * @namespace DocumentService
8
+ */
9
+
1
10
  import { loggerFactory } from '../../server/logger.js';
2
- import { DataBaseProvider } from '../../db/DataBaseProvider.js';
11
+ import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
3
12
  import { DocumentDto } from './document.model.js';
4
13
  import { uniqueArray } from '../../client/components/core/CommonJs.js';
5
14
  import { getBearerToken, verifyJWT } from '../../server/auth.js';
@@ -8,10 +17,26 @@ import { FileCleanup } from '../file/file.service.js';
8
17
 
9
18
  const logger = loggerFactory(import.meta);
10
19
 
11
- const DocumentService = {
12
- post: async (req, res, options) => {
20
+ /**
21
+ * Document Service for handling REST API document operations.
22
+ * Implements a security model for public/private document access control
23
+ * with support for high-query typeahead search, tag filtering, and pagination.
24
+ * @namespace DocumentService
25
+ */
26
+ class DocumentService {
27
+ /**
28
+ * POST - Create a new document.
29
+ * @async
30
+ * @function post
31
+ * @memberof DocumentService
32
+ * @param {Object} req - Express request object.
33
+ * @param {Object} res - Express response object.
34
+ * @param {Object} options - Request options containing host and path.
35
+ * @returns {Promise<Object>} Created document object.
36
+ */
37
+ static post = async (req, res, options) => {
13
38
  /** @type {import('./document.model.js').DocumentModel} */
14
- const Document = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Document;
39
+ const Document = DataBaseProviderService.getModel("Document", options);
15
40
 
16
41
  switch (req.params.id) {
17
42
  default:
@@ -25,14 +50,28 @@ const DocumentService = {
25
50
 
26
51
  return await new Document(req.body).save();
27
52
  }
28
- },
29
- get: async (req, res, options) => {
53
+ };
54
+
55
+ /**
56
+ * GET - Retrieve documents.
57
+ * Supports public high-query search, public tag-filtered listing,
58
+ * and authenticated user document retrieval with pagination.
59
+ * @async
60
+ * @function get
61
+ * @memberof DocumentService
62
+ * @param {Object} req - Express request object.
63
+ * @param {Object} res - Express response object.
64
+ * @param {Object} options - Request options containing host and path.
65
+ * @returns {Promise<Object>} Document data with optional pagination metadata.
66
+ * @throws {Error} If search query is invalid or document not found.
67
+ */
68
+ static get = async (req, res, options) => {
30
69
  /** @type {import('./document.model.js').DocumentModel} */
31
- const Document = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Document;
70
+ const Document = DataBaseProviderService.getModel("Document", options);
32
71
  /** @type {import('../user/user.model.js').UserModel} */
33
- const User = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.User;
72
+ const User = DataBaseProviderService.getModel("User", options);
34
73
  /** @type {import('../file/file.model.js').FileModel} */
35
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
74
+ const File = DataBaseProviderService.getModel("File", options);
36
75
 
37
76
  // High-query endpoint for typeahead search
38
77
  //
@@ -436,12 +475,24 @@ const DocumentService = {
436
475
  };
437
476
  }
438
477
  }
439
- },
440
- delete: async (req, res, options) => {
478
+ };
479
+
480
+ /**
481
+ * DELETE - Remove a document and its associated files.
482
+ * @async
483
+ * @function delete
484
+ * @memberof DocumentService
485
+ * @param {Object} req - Express request object.
486
+ * @param {Object} res - Express response object.
487
+ * @param {Object} options - Request options containing host and path.
488
+ * @returns {Promise<Object>} Deleted document object.
489
+ * @throws {Error} If document not found or user not authorized.
490
+ */
491
+ static delete = async (req, res, options) => {
441
492
  /** @type {import('./document.model.js').DocumentModel} */
442
- const Document = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Document;
493
+ const Document = DataBaseProviderService.getModel("Document", options);
443
494
  /** @type {import('../file/file.model.js').FileModel} */
444
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
495
+ const File = DataBaseProviderService.getModel("File", options);
445
496
 
446
497
  switch (req.params.id) {
447
498
  default: {
@@ -460,12 +511,25 @@ const DocumentService = {
460
511
  return await Document.findByIdAndDelete(req.params.id);
461
512
  }
462
513
  }
463
- },
464
- put: async (req, res, options) => {
514
+ };
515
+
516
+ /**
517
+ * PUT - Update a document.
518
+ * Cleans up replaced files and handles tag-based isPublic extraction.
519
+ * @async
520
+ * @function put
521
+ * @memberof DocumentService
522
+ * @param {Object} req - Express request object.
523
+ * @param {Object} res - Express response object.
524
+ * @param {Object} options - Request options containing host and path.
525
+ * @returns {Promise<Object>} Updated document object.
526
+ * @throws {Error} If document not found.
527
+ */
528
+ static put = async (req, res, options) => {
465
529
  /** @type {import('./document.model.js').DocumentModel} */
466
- const Document = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Document;
530
+ const Document = DataBaseProviderService.getModel("Document", options);
467
531
  /** @type {import('../file/file.model.js').FileModel} */
468
- const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
532
+ const File = DataBaseProviderService.getModel("File", options);
469
533
 
470
534
  switch (req.params.id) {
471
535
  default: {
@@ -500,10 +564,23 @@ const DocumentService = {
500
564
  return await Document.findByIdAndUpdate(req.params.id, req.body, { returnDocument: 'after' });
501
565
  }
502
566
  }
503
- },
504
- patch: async (req, res, options) => {
567
+ };
568
+
569
+ /**
570
+ * PATCH - Partially update a document.
571
+ * Supports toggle-public and copy-share-link operations.
572
+ * @async
573
+ * @function patch
574
+ * @memberof DocumentService
575
+ * @param {Object} req - Express request object.
576
+ * @param {Object} res - Express response object.
577
+ * @param {Object} options - Request options containing host and path.
578
+ * @returns {Promise<Object>} Updated document or result object.
579
+ * @throws {Error} If document not found or invalid patch endpoint.
580
+ */
581
+ static patch = async (req, res, options) => {
505
582
  /** @type {import('./document.model.js').DocumentModel} */
506
- const Document = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Document;
583
+ const Document = DataBaseProviderService.getModel("Document", options);
507
584
 
508
585
  if (req.path.includes('/toggle-public')) {
509
586
  const document = await Document.findById(req.params.id);
@@ -550,7 +627,7 @@ const DocumentService = {
550
627
  }
551
628
 
552
629
  throw new Error('Invalid patch endpoint');
553
- },
554
- };
630
+ };
631
+ }
555
632
 
556
- export { DocumentService };
633
+ export { DocumentService };
@@ -2,8 +2,8 @@ import { loggerFactory } from '../../server/logger.js';
2
2
  import { FileService } from './file.service.js';
3
3
  const logger = loggerFactory(import.meta);
4
4
 
5
- const FileController = {
6
- post: async (req, res, options) => {
5
+ class FileController {
6
+ static post = async (req, res, options) => {
7
7
  try {
8
8
  return res.status(200).json({
9
9
  status: 'success',
@@ -16,8 +16,8 @@ const FileController = {
16
16
  message: error.message,
17
17
  });
18
18
  }
19
- },
20
- get: async (req, res, options) => {
19
+ };
20
+ static get = async (req, res, options) => {
21
21
  try {
22
22
  if (req && req.headers && req.headers.origin) {
23
23
  res.set('Access-Control-Allow-Origin', req.headers.origin);
@@ -38,8 +38,8 @@ const FileController = {
38
38
  message: error.message,
39
39
  });
40
40
  }
41
- },
42
- delete: async (req, res, options) => {
41
+ };
42
+ static delete = async (req, res, options) => {
43
43
  try {
44
44
  const result = await FileService.delete(req, res, options);
45
45
  return res.status(200).json({
@@ -53,7 +53,7 @@ const FileController = {
53
53
  message: error.message,
54
54
  });
55
55
  }
56
- },
57
- };
56
+ };
57
+ }
58
58
 
59
59
  export { FileController };
@@ -47,7 +47,7 @@ const ProviderSchema = FileSchema;
47
47
  * @namespace FileModelServer.FileModelDto
48
48
  * @memberof FileModelServer
49
49
  */
50
- const FileModelDto = {
50
+ class FileModelDto {
51
51
  /**
52
52
  * Returns file metadata only (no buffer data).
53
53
  * Used for list responses and API integration.
@@ -56,7 +56,7 @@ const FileModelDto = {
56
56
  * @param {Object} file - File document from database.
57
57
  * @returns {Object|null} File metadata object, or null if file is falsy.
58
58
  */
59
- toMetadata: (file) => {
59
+ static toMetadata = (file) => {
60
60
  if (!file) return null;
61
61
  return {
62
62
  _id: file._id,
@@ -68,7 +68,7 @@ const FileModelDto = {
68
68
  createdAt: file.createdAt,
69
69
  updatedAt: file.updatedAt,
70
70
  };
71
- },
71
+ };
72
72
 
73
73
  /**
74
74
  * Returns file with complete data.
@@ -78,7 +78,7 @@ const FileModelDto = {
78
78
  * @param {Object} file - File document from database.
79
79
  * @returns {Object|null} Complete file object with buffer data, or null if file is falsy.
80
80
  */
81
- toFull: (file) => {
81
+ static toFull = (file) => {
82
82
  if (!file) return null;
83
83
  return {
84
84
  _id: file._id,
@@ -92,7 +92,7 @@ const FileModelDto = {
92
92
  createdAt: file.createdAt,
93
93
  updatedAt: file.updatedAt,
94
94
  };
95
- },
95
+ };
96
96
 
97
97
  /**
98
98
  * Transforms array of files to metadata only.
@@ -101,10 +101,10 @@ const FileModelDto = {
101
101
  * @param {Array} files - Array of file documents.
102
102
  * @returns {Array} Array of file metadata objects.
103
103
  */
104
- toMetadataArray: (files) => {
104
+ static toMetadataArray = (files) => {
105
105
  if (!Array.isArray(files)) return [];
106
106
  return files.map((file) => FileModelDto.toMetadata(file));
107
- },
107
+ };
108
108
 
109
109
  /**
110
110
  * Ensures UTF-8 encoding for filenames.
@@ -114,14 +114,14 @@ const FileModelDto = {
114
114
  * @param {string} filename - Raw filename from upload.
115
115
  * @returns {string} UTF-8 encoded filename.
116
116
  */
117
- normalizeFilename: (filename) => {
117
+ static normalizeFilename = (filename) => {
118
118
  if (!filename) return '';
119
119
  // Ensure string and normalize to UTF-8
120
120
  let normalized = String(filename);
121
121
  // Replace any incorrectly encoded sequences
122
122
  normalized = Buffer.from(normalized, 'utf8').toString('utf8');
123
123
  return normalized;
124
- },
125
- };
124
+ };
125
+ }
126
126
 
127
127
  export { FileSchema, FileModel, ProviderSchema, FileModelDto };
@@ -2,21 +2,27 @@ import { adminGuard } from '../../server/auth.js';
2
2
  import { loggerFactory } from '../../server/logger.js';
3
3
  import { FileController } from './file.controller.js';
4
4
  import express from 'express';
5
+
5
6
  const logger = loggerFactory(import.meta);
6
7
 
7
- const FileRouter = (options) => {
8
- const router = express.Router();
9
- const authMiddleware = options.authMiddleware;
10
- router.post(`/:id`, authMiddleware, async (req, res) => await FileController.post(req, res, options));
11
- router.post(`/`, authMiddleware, async (req, res) => await FileController.post(req, res, options));
12
- router.get(`/blob/:id`, async (req, res) => await FileController.get(req, res, options));
13
- router.get(`/:id`, async (req, res) => await FileController.get(req, res, options));
14
- router.get(`/`, async (req, res) => await FileController.get(req, res, options));
15
- router.delete(`/:id`, authMiddleware, adminGuard, async (req, res) => await FileController.delete(req, res, options));
16
- router.delete(`/`, authMiddleware, adminGuard, async (req, res) => await FileController.delete(req, res, options));
17
- return router;
18
- };
8
+ class FileRouter {
9
+ /**
10
+ * @param {import('../types.js').RouterOptions} options
11
+ * @returns {import('express').Router}
12
+ */
13
+ static router(options) {
14
+ const router = express.Router();
15
+ router.post(`/:id`, options.authMiddleware, async (req, res) => await FileController.post(req, res, options));
16
+ router.post(`/`, options.authMiddleware, async (req, res) => await FileController.post(req, res, options));
17
+ router.get(`/blob/:id`, async (req, res) => await FileController.get(req, res, options));
18
+ router.get(`/:id`, async (req, res) => await FileController.get(req, res, options));
19
+ router.get(`/`, async (req, res) => await FileController.get(req, res, options));
20
+ router.delete(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await FileController.delete(req, res, options));
21
+ router.delete(`/`, options.authMiddleware, adminGuard, async (req, res) => await FileController.delete(req, res, options));
22
+ return router;
23
+ }
24
+ }
19
25
 
20
- const ApiRouter = FileRouter;
26
+ const ApiRouter = (options) => FileRouter.router(options);
21
27
 
22
28
  export { ApiRouter, FileRouter };