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.
- package/.github/workflows/engine-cyberia.cd.yml +8 -2
- package/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +2 -2
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +563 -1
- package/CLI-HELP.md +130 -34
- package/Dockerfile +0 -4
- package/README.md +194 -607
- package/bin/build.js +42 -12
- package/bin/build.template.js +187 -0
- package/bin/cyberia.js +1367 -281
- package/bin/deploy.js +582 -3
- package/bin/index.js +1367 -281
- package/bump.config.js +26 -0
- package/conf.js +195 -111
- package/deployment.yaml +6 -222
- package/hardhat/package-lock.json +118 -149
- package/hardhat/package.json +5 -4
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +6 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +138 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +45 -24
- package/proxy.yaml +10 -118
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +83 -48
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +15 -15
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.router.js +18 -12
- package/src/api/crypto/crypto.service.js +11 -11
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +31 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
- package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
- package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
- package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +18 -49
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.router.js +35 -30
- package/src/api/cyberia-map/cyberia-map.service.js +17 -17
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +31 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +31 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +15 -15
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +45 -43
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.router.js +29 -24
- package/src/api/instance/instance.service.js +16 -16
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.router.js +21 -16
- package/src/api/ipfs/ipfs.service.js +22 -36
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.router.js +512 -507
- package/src/api/object-layer/object-layer.service.js +29 -26
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.router.js +17 -12
- package/src/api/test/test.service.js +8 -8
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +103 -55
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +732 -217
- package/src/cli/db.js +106 -62
- package/src/cli/deploy.js +260 -149
- package/src/cli/fs.js +90 -9
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +106 -16
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +336 -86
- package/src/cli/repository.js +136 -53
- package/src/cli/run.js +599 -76
- package/src/cli/secrets.js +11 -2
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/cli/test.js +9 -3
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +30 -36
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +40 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +544 -219
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +81 -177
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +211 -276
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +83 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
- package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
- package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
- package/src/client/ssr/{pages → views}/Test.js +2 -2
- package/src/client/sw/core.sw.js +274 -0
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/grpc/cyberia/grpc-server.js +185 -105
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +101 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
- package/src/runtime/cyberia-server/Dockerfile +62 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +46 -47
- package/src/server/client-build.js +371 -132
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +91 -87
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +192 -45
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +34 -8
- package/src/server/valkey.js +143 -235
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/bin/file.js +0 -196
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -223
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
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
|
-
|
|
8
|
-
post
|
|
7
|
+
class DefaultService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
10
|
-
const Default =
|
|
10
|
+
const Default = DataBaseProviderService.getModel("Default", options);
|
|
11
11
|
return await new Default(req.body).save();
|
|
12
|
-
}
|
|
13
|
-
get
|
|
12
|
+
};
|
|
13
|
+
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
15
|
-
const 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
|
|
28
|
+
};
|
|
29
|
+
static put = async (req, res, options) => {
|
|
30
30
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
31
|
-
const Default =
|
|
31
|
+
const Default = DataBaseProviderService.getModel("Default", options);
|
|
32
32
|
return await Default.findByIdAndUpdate(req.params.id, req.body);
|
|
33
|
-
}
|
|
34
|
-
delete
|
|
33
|
+
};
|
|
34
|
+
static delete = async (req, res, options) => {
|
|
35
35
|
/** @type {import('./default.model.js').DefaultModel} */
|
|
36
|
-
const 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
|
-
|
|
6
|
-
post
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
4
|
+
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
router
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
`/:id
|
|
21
|
-
authMiddleware,
|
|
22
|
-
async (req, res) => await DocumentController.patch(req, res, options)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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 {
|
|
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
|
-
|
|
12
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
70
|
+
const Document = DataBaseProviderService.getModel("Document", options);
|
|
32
71
|
/** @type {import('../user/user.model.js').UserModel} */
|
|
33
|
-
const User =
|
|
72
|
+
const User = DataBaseProviderService.getModel("User", options);
|
|
34
73
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
35
|
-
const 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
|
-
|
|
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 =
|
|
493
|
+
const Document = DataBaseProviderService.getModel("Document", options);
|
|
443
494
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
444
|
-
const 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
|
-
|
|
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 =
|
|
530
|
+
const Document = DataBaseProviderService.getModel("Document", options);
|
|
467
531
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
468
|
-
const 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
|
-
|
|
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 =
|
|
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
|
-
|
|
6
|
-
post
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
router
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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 };
|