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
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* @namespace FileServiceServer
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import {
|
|
9
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
10
10
|
import { getBearerToken, jwtVerify } from '../../server/auth.js';
|
|
11
11
|
import { loggerFactory } from '../../server/logger.js';
|
|
12
12
|
import crypto from 'crypto';
|
|
@@ -27,7 +27,7 @@ const logger = loggerFactory(import.meta);
|
|
|
27
27
|
* @namespace FileServiceServer.FileServiceDto
|
|
28
28
|
* @memberof FileServiceServer
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
class FileServiceDto {
|
|
31
31
|
/**
|
|
32
32
|
* Returns file metadata only (no buffer data).
|
|
33
33
|
* Used for list responses and API integration.
|
|
@@ -36,7 +36,7 @@ const FileServiceDto = {
|
|
|
36
36
|
* @param {Object} file - File document from database.
|
|
37
37
|
* @returns {Object|null} File metadata object, or null if file is falsy.
|
|
38
38
|
*/
|
|
39
|
-
toMetadata
|
|
39
|
+
static toMetadata = (file) => {
|
|
40
40
|
if (!file) return null;
|
|
41
41
|
return {
|
|
42
42
|
_id: file._id,
|
|
@@ -48,7 +48,7 @@ const FileServiceDto = {
|
|
|
48
48
|
createdAt: file.createdAt,
|
|
49
49
|
updatedAt: file.updatedAt,
|
|
50
50
|
};
|
|
51
|
-
}
|
|
51
|
+
};
|
|
52
52
|
|
|
53
53
|
/**
|
|
54
54
|
* Transforms array of files to metadata only.
|
|
@@ -57,10 +57,10 @@ const FileServiceDto = {
|
|
|
57
57
|
* @param {Array} files - Array of file documents.
|
|
58
58
|
* @returns {Array} Array of file metadata objects.
|
|
59
59
|
*/
|
|
60
|
-
toMetadataArray
|
|
60
|
+
static toMetadataArray = (files) => {
|
|
61
61
|
if (!Array.isArray(files)) return [];
|
|
62
62
|
return files.map((file) => FileServiceDto.toMetadata(file));
|
|
63
|
-
}
|
|
63
|
+
};
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* Ensures UTF-8 encoding for filenames.
|
|
@@ -70,14 +70,14 @@ const FileServiceDto = {
|
|
|
70
70
|
* @param {string} filename - Raw filename from upload.
|
|
71
71
|
* @returns {string} UTF-8 encoded filename.
|
|
72
72
|
*/
|
|
73
|
-
normalizeFilename
|
|
73
|
+
static normalizeFilename = (filename) => {
|
|
74
74
|
if (!filename) return '';
|
|
75
75
|
// Ensure string and normalize to UTF-8
|
|
76
76
|
let normalized = String(filename);
|
|
77
77
|
// Replace any incorrectly encoded sequences
|
|
78
78
|
normalized = Buffer.from(normalized, 'utf8').toString('utf8');
|
|
79
79
|
return normalized;
|
|
80
|
-
}
|
|
80
|
+
};
|
|
81
81
|
|
|
82
82
|
/**
|
|
83
83
|
* Get select fields for metadata-only queries.
|
|
@@ -86,17 +86,17 @@ const FileServiceDto = {
|
|
|
86
86
|
* @memberof FileServiceServer.FileServiceDto
|
|
87
87
|
* @returns {string} Space-separated list of field names for metadata selection.
|
|
88
88
|
*/
|
|
89
|
-
metadataSelect
|
|
89
|
+
static metadataSelect = () => {
|
|
90
90
|
return '_id name mimetype size encoding md5 cid createdAt updatedAt';
|
|
91
|
-
}
|
|
92
|
-
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
93
|
|
|
94
94
|
/**
|
|
95
95
|
* File Factory for file extraction, upload, and creation utilities.
|
|
96
96
|
* @namespace FileServiceServer.FileFactory
|
|
97
97
|
* @memberof FileServiceServer
|
|
98
98
|
*/
|
|
99
|
-
|
|
99
|
+
class FileFactory {
|
|
100
100
|
/**
|
|
101
101
|
* Extract files from request.
|
|
102
102
|
* Handles both standard 'file' field and custom fields.
|
|
@@ -105,7 +105,7 @@ const FileFactory = {
|
|
|
105
105
|
* @param {Object} req - Express request object with files.
|
|
106
106
|
* @returns {Array} Array of extracted file objects.
|
|
107
107
|
*/
|
|
108
|
-
filesExtract
|
|
108
|
+
static filesExtract = (req) => {
|
|
109
109
|
const files = [];
|
|
110
110
|
if (!req.files || Object.keys(req.files).length === 0) {
|
|
111
111
|
return files;
|
|
@@ -139,7 +139,7 @@ const FileFactory = {
|
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
return files;
|
|
142
|
-
}
|
|
142
|
+
};
|
|
143
143
|
|
|
144
144
|
/**
|
|
145
145
|
* Upload files to database with UTF-8 encoding.
|
|
@@ -150,7 +150,7 @@ const FileFactory = {
|
|
|
150
150
|
* @param {import('mongoose').Model} File - Mongoose File model.
|
|
151
151
|
* @returns {Promise<Array>} Array of uploaded file metadata objects.
|
|
152
152
|
*/
|
|
153
|
-
|
|
153
|
+
static async upload(req, File) {
|
|
154
154
|
const results = FileFactory.filesExtract(req);
|
|
155
155
|
let index = -1;
|
|
156
156
|
|
|
@@ -172,7 +172,7 @@ const FileFactory = {
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
return results;
|
|
175
|
-
}
|
|
175
|
+
}
|
|
176
176
|
|
|
177
177
|
/**
|
|
178
178
|
* Convert string to hexadecimal.
|
|
@@ -181,9 +181,9 @@ const FileFactory = {
|
|
|
181
181
|
* @param {string} [raw=''] - Raw string to convert.
|
|
182
182
|
* @returns {string} Hexadecimal representation of the string.
|
|
183
183
|
*/
|
|
184
|
-
hex
|
|
184
|
+
static hex = (raw = '') => {
|
|
185
185
|
return Buffer.from(raw, 'utf8').toString('hex');
|
|
186
|
-
}
|
|
186
|
+
};
|
|
187
187
|
|
|
188
188
|
/**
|
|
189
189
|
* Get MIME type from file path based on extension.
|
|
@@ -192,7 +192,7 @@ const FileFactory = {
|
|
|
192
192
|
* @param {string} path - File path or filename with extension.
|
|
193
193
|
* @returns {string} MIME type string.
|
|
194
194
|
*/
|
|
195
|
-
getMymeTypeFromPath
|
|
195
|
+
static getMymeTypeFromPath = (path) => {
|
|
196
196
|
const ext = String(path || '')
|
|
197
197
|
.toLowerCase()
|
|
198
198
|
.split('.')
|
|
@@ -210,7 +210,7 @@ const FileFactory = {
|
|
|
210
210
|
json: 'application/json',
|
|
211
211
|
};
|
|
212
212
|
return mimeTypes[ext] || 'application/octet-stream';
|
|
213
|
-
}
|
|
213
|
+
};
|
|
214
214
|
|
|
215
215
|
/**
|
|
216
216
|
* Create file object with proper encoding.
|
|
@@ -220,7 +220,7 @@ const FileFactory = {
|
|
|
220
220
|
* @param {string} [name=''] - File name.
|
|
221
221
|
* @returns {Object} File object with name, data, size, encoding, mimetype, and md5.
|
|
222
222
|
*/
|
|
223
|
-
create
|
|
223
|
+
static create = (data = Buffer.from([]), name = '') => {
|
|
224
224
|
const normalizedName = FileServiceDto.normalizeFilename(name);
|
|
225
225
|
|
|
226
226
|
return {
|
|
@@ -234,8 +234,8 @@ const FileFactory = {
|
|
|
234
234
|
md5: crypto.createHash('md5').update(data).digest('hex'),
|
|
235
235
|
cid: undefined,
|
|
236
236
|
};
|
|
237
|
-
}
|
|
238
|
-
}
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
239
|
|
|
240
240
|
/**
|
|
241
241
|
* File cleanup utilities for preventing orphaned files.
|
|
@@ -244,7 +244,7 @@ const FileFactory = {
|
|
|
244
244
|
* @namespace FileServiceServer.FileCleanup
|
|
245
245
|
* @memberof FileServiceServer
|
|
246
246
|
*/
|
|
247
|
-
|
|
247
|
+
class FileCleanup {
|
|
248
248
|
/**
|
|
249
249
|
* Clean up old file references when document fields are updated.
|
|
250
250
|
* Deletes old files that are being replaced by new file IDs.
|
|
@@ -258,7 +258,7 @@ const FileCleanup = {
|
|
|
258
258
|
* @param {import('mongoose').Model} options.File - Mongoose File model.
|
|
259
259
|
* @returns {Promise<Array>} Array of deleted file IDs.
|
|
260
260
|
*/
|
|
261
|
-
cleanupReplacedFiles
|
|
261
|
+
static cleanupReplacedFiles = async ({ oldDoc, newData, fileFields, File }) => {
|
|
262
262
|
const deletedFileIds = [];
|
|
263
263
|
|
|
264
264
|
for (const field of fileFields) {
|
|
@@ -266,7 +266,9 @@ const FileCleanup = {
|
|
|
266
266
|
const newFileId = newData[field];
|
|
267
267
|
|
|
268
268
|
// If field has old file and new data changes or removes it
|
|
269
|
-
|
|
269
|
+
// newFileId === null means client explicitly wants to remove the file
|
|
270
|
+
// newFileId === undefined means field was not included in request (no change)
|
|
271
|
+
if (oldFileId && newFileId !== undefined && (newFileId === null || String(oldFileId) !== String(newFileId))) {
|
|
270
272
|
try {
|
|
271
273
|
const file = await File.findOne({ _id: oldFileId });
|
|
272
274
|
if (file) {
|
|
@@ -281,7 +283,7 @@ const FileCleanup = {
|
|
|
281
283
|
}
|
|
282
284
|
|
|
283
285
|
return deletedFileIds;
|
|
284
|
-
}
|
|
286
|
+
};
|
|
285
287
|
|
|
286
288
|
/**
|
|
287
289
|
* Delete all files referenced in a document.
|
|
@@ -297,7 +299,7 @@ const FileCleanup = {
|
|
|
297
299
|
* @param {import('mongoose').Model} options.File - Mongoose File model.
|
|
298
300
|
* @returns {Promise<Array>} Array of deleted file IDs.
|
|
299
301
|
*/
|
|
300
|
-
deleteDocumentFiles
|
|
302
|
+
static deleteDocumentFiles = async ({ doc, fileFields, File }) => {
|
|
301
303
|
const deletedFileIds = [];
|
|
302
304
|
|
|
303
305
|
for (const field of fileFields) {
|
|
@@ -318,15 +320,15 @@ const FileCleanup = {
|
|
|
318
320
|
}
|
|
319
321
|
|
|
320
322
|
return deletedFileIds;
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
+
};
|
|
324
|
+
}
|
|
323
325
|
|
|
324
326
|
/**
|
|
325
327
|
* File Service for handling REST API file operations.
|
|
326
328
|
* @namespace FileServiceServer.FileService
|
|
327
329
|
* @memberof FileServiceServer
|
|
328
330
|
*/
|
|
329
|
-
|
|
331
|
+
class FileService {
|
|
330
332
|
/**
|
|
331
333
|
* POST - Upload files.
|
|
332
334
|
* Returns metadata-only response (no buffer data).
|
|
@@ -338,18 +340,18 @@ const FileService = {
|
|
|
338
340
|
* @param {Object} options - Request options containing host and path.
|
|
339
341
|
* @returns {Promise<Array>} Array of uploaded file metadata objects.
|
|
340
342
|
*/
|
|
341
|
-
post
|
|
343
|
+
static post = async (req, res, options) => {
|
|
342
344
|
// Check that user is authenticated and not a guest
|
|
343
345
|
if (!req.auth || !req.auth.user || req.auth.user.role === 'guest') {
|
|
344
346
|
throw new Error('Authentication required. Guest users cannot upload files.');
|
|
345
347
|
}
|
|
346
348
|
|
|
347
349
|
/** @type {import('./file.model.js').FileModel} */
|
|
348
|
-
const File =
|
|
350
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
349
351
|
|
|
350
352
|
const uploadedFiles = await FileFactory.upload(req, File);
|
|
351
353
|
return FileServiceDto.toMetadataArray(uploadedFiles);
|
|
352
|
-
}
|
|
354
|
+
};
|
|
353
355
|
|
|
354
356
|
/**
|
|
355
357
|
* GET - Retrieve files.
|
|
@@ -365,13 +367,13 @@ const FileService = {
|
|
|
365
367
|
* @returns {Promise<Array|Buffer>} Array of file metadata objects or Buffer for blob endpoint.
|
|
366
368
|
* @throws {Error} If file not found or user not authorized.
|
|
367
369
|
*/
|
|
368
|
-
get
|
|
370
|
+
static get = async (req, res, options) => {
|
|
369
371
|
/** @type {import('./file.model.js').FileModel} */
|
|
370
|
-
const File =
|
|
372
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
371
373
|
/** @type {import('../document/document.model.js').DocumentModel} */
|
|
372
|
-
const Document =
|
|
374
|
+
const Document = DataBaseProviderService.getModel("Document", options);
|
|
373
375
|
/** @type {import('../user/user.model.js').User} */
|
|
374
|
-
const User =
|
|
376
|
+
const User = DataBaseProviderService.getModel("User", options);
|
|
375
377
|
|
|
376
378
|
const isFileAuthorized = async (fileId) => {
|
|
377
379
|
try {
|
|
@@ -467,7 +469,7 @@ const FileService = {
|
|
|
467
469
|
return FileServiceDto.toMetadataArray(files);
|
|
468
470
|
}
|
|
469
471
|
}
|
|
470
|
-
}
|
|
472
|
+
};
|
|
471
473
|
|
|
472
474
|
/**
|
|
473
475
|
* DELETE - Remove files.
|
|
@@ -480,9 +482,9 @@ const FileService = {
|
|
|
480
482
|
* @returns {Promise<Object>} Deleted file metadata object.
|
|
481
483
|
* @throws {Error} If file not found.
|
|
482
484
|
*/
|
|
483
|
-
delete
|
|
485
|
+
static delete = async (req, res, options) => {
|
|
484
486
|
/** @type {import('./file.model.js').FileModel} */
|
|
485
|
-
const File =
|
|
487
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
486
488
|
|
|
487
489
|
const result = await File.findByIdAndDelete(req.params.id);
|
|
488
490
|
|
|
@@ -491,7 +493,7 @@ const FileService = {
|
|
|
491
493
|
}
|
|
492
494
|
|
|
493
495
|
return FileServiceDto.toMetadata(result);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
+
};
|
|
497
|
+
}
|
|
496
498
|
|
|
497
499
|
export { FileService, FileFactory, FileServiceDto, FileCleanup };
|
|
@@ -3,8 +3,8 @@ import { InstanceService } from './instance.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class InstanceController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await InstanceService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const InstanceController = {
|
|
|
18
18
|
message: error.message,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
22
|
-
get
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
24
|
const result = await InstanceService.get(req, res, options);
|
|
25
25
|
return res.status(200).json({
|
|
@@ -33,8 +33,8 @@ const InstanceController = {
|
|
|
33
33
|
message: error.message,
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
|
-
}
|
|
37
|
-
put
|
|
36
|
+
};
|
|
37
|
+
static put = async (req, res, options) => {
|
|
38
38
|
try {
|
|
39
39
|
const result = await InstanceService.put(req, res, options);
|
|
40
40
|
return res.status(200).json({
|
|
@@ -48,8 +48,8 @@ const InstanceController = {
|
|
|
48
48
|
message: error.message,
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
}
|
|
52
|
-
delete
|
|
51
|
+
};
|
|
52
|
+
static delete = async (req, res, options) => {
|
|
53
53
|
try {
|
|
54
54
|
const result = await InstanceService.delete(req, res, options);
|
|
55
55
|
return res.status(200).json({
|
|
@@ -63,7 +63,7 @@ const InstanceController = {
|
|
|
63
63
|
message: error.message,
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
68
|
|
|
69
69
|
export { InstanceController };
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { Schema, model, Types } from 'mongoose';
|
|
2
|
-
|
|
3
2
|
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
4
|
-
|
|
5
3
|
const InstanceSchema = new Schema(
|
|
6
4
|
{
|
|
7
5
|
deployId: { type: String },
|
|
@@ -20,9 +18,8 @@ const InstanceSchema = new Schema(
|
|
|
20
18
|
timestamps: true,
|
|
21
19
|
},
|
|
22
20
|
);
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
populate: {
|
|
21
|
+
class InstanceDto {
|
|
22
|
+
static populate = {
|
|
26
23
|
get: () => {
|
|
27
24
|
return {
|
|
28
25
|
path: 'userId',
|
|
@@ -30,11 +27,8 @@ const InstanceDto = {
|
|
|
30
27
|
select: '_id email',
|
|
31
28
|
};
|
|
32
29
|
},
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
30
|
+
};
|
|
31
|
+
}
|
|
36
32
|
const InstanceModel = model('Instance', InstanceSchema);
|
|
37
|
-
|
|
38
33
|
const ProviderSchema = InstanceSchema;
|
|
39
|
-
|
|
40
34
|
export { InstanceSchema, InstanceModel, ProviderSchema, InstanceDto };
|
|
@@ -5,30 +5,35 @@ import express from 'express';
|
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
router
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
authMiddleware,
|
|
20
|
-
adminGuard,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
8
|
+
class InstanceRouter {
|
|
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, adminGuard, async (req, res) => await InstanceController.post(req, res, options));
|
|
16
|
+
router.post(`/`, options.authMiddleware, adminGuard, async (req, res) => await InstanceController.post(req, res, options));
|
|
17
|
+
router.get(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await InstanceController.get(req, res, options));
|
|
18
|
+
router.get(`/`, options.authMiddleware, async (req, res) => await InstanceController.get(req, res, options));
|
|
19
|
+
router.put(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await InstanceController.put(req, res, options));
|
|
20
|
+
router.put(`/`, options.authMiddleware, adminGuard, async (req, res) => await InstanceController.put(req, res, options));
|
|
21
|
+
router.delete(
|
|
22
|
+
`/:id`,
|
|
23
|
+
options.authMiddleware,
|
|
24
|
+
adminGuard,
|
|
25
|
+
async (req, res) => await InstanceController.delete(req, res, options),
|
|
26
|
+
);
|
|
27
|
+
router.delete(
|
|
28
|
+
`/`,
|
|
29
|
+
options.authMiddleware,
|
|
30
|
+
adminGuard,
|
|
31
|
+
async (req, res) => await InstanceController.delete(req, res, options),
|
|
32
|
+
);
|
|
33
|
+
return router;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
31
36
|
|
|
32
|
-
const ApiRouter = InstanceRouter;
|
|
37
|
+
const ApiRouter = (options) => InstanceRouter.router(options);
|
|
33
38
|
|
|
34
39
|
export { ApiRouter, InstanceRouter };
|
|
@@ -1,22 +1,22 @@
|
|
|
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
|
import { InstanceDto } from './instance.model.js';
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
post
|
|
8
|
+
class InstanceService {
|
|
9
|
+
static post = async (req, res, options) => {
|
|
10
10
|
/** @type {import('./instance.model.js').InstanceModel} */
|
|
11
|
-
const Instance =
|
|
11
|
+
const Instance = DataBaseProviderService.getModel("Instance", options);
|
|
12
12
|
return await new Instance(req.body).save();
|
|
13
|
-
}
|
|
14
|
-
get
|
|
13
|
+
};
|
|
14
|
+
static get = async (req, res, options) => {
|
|
15
15
|
/** @type {import('./instance.model.js').InstanceModel} */
|
|
16
|
-
const Instance =
|
|
16
|
+
const Instance = DataBaseProviderService.getModel("Instance", options);
|
|
17
17
|
|
|
18
18
|
/** @type {import('../user/user.model.js').UserModel} */
|
|
19
|
-
const User =
|
|
19
|
+
const User = DataBaseProviderService.getModel("User", options);
|
|
20
20
|
|
|
21
21
|
const user = await User.findOne({
|
|
22
22
|
_id: req.auth.user._id,
|
|
@@ -58,18 +58,18 @@ const InstanceService = {
|
|
|
58
58
|
return { data: dataUser, total: totalUser, page, totalPages: Math.ceil(totalUser / limit) };
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
}
|
|
62
|
-
put
|
|
61
|
+
};
|
|
62
|
+
static put = async (req, res, options) => {
|
|
63
63
|
/** @type {import('./instance.model.js').InstanceModel} */
|
|
64
|
-
const Instance =
|
|
64
|
+
const Instance = DataBaseProviderService.getModel("Instance", options);
|
|
65
65
|
return await Instance.findByIdAndUpdate(req.params.id, req.body);
|
|
66
|
-
}
|
|
67
|
-
delete
|
|
66
|
+
};
|
|
67
|
+
static delete = async (req, res, options) => {
|
|
68
68
|
/** @type {import('./instance.model.js').InstanceModel} */
|
|
69
|
-
const Instance =
|
|
69
|
+
const Instance = DataBaseProviderService.getModel("Instance", options);
|
|
70
70
|
if (req.params.id) return await Instance.findByIdAndDelete(req.params.id);
|
|
71
71
|
else return await Instance.deleteMany();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
74
|
|
|
75
75
|
export { InstanceService };
|
|
@@ -3,8 +3,8 @@ import { IpfsService } from './ipfs.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class IpfsController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await IpfsService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const IpfsController = {
|
|
|
18
18
|
message: error.message,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
22
|
-
get
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
24
|
const { page, limit } = req.query;
|
|
25
25
|
const result = await IpfsService.get(
|
|
@@ -38,8 +38,8 @@ const IpfsController = {
|
|
|
38
38
|
message: error.message,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
}
|
|
42
|
-
put
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
43
|
try {
|
|
44
44
|
const result = await IpfsService.put(req, res, options);
|
|
45
45
|
return res.status(200).json({
|
|
@@ -53,8 +53,8 @@ const IpfsController = {
|
|
|
53
53
|
message: error.message,
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
}
|
|
57
|
-
delete
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
58
|
try {
|
|
59
59
|
const result = await IpfsService.delete(req, res, options);
|
|
60
60
|
return res.status(200).json({
|
|
@@ -68,8 +68,8 @@ const IpfsController = {
|
|
|
68
68
|
message: error.message,
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
|
-
}
|
|
72
|
-
verify
|
|
71
|
+
};
|
|
72
|
+
static verify = async (req, res, options) => {
|
|
73
73
|
try {
|
|
74
74
|
const result = await IpfsService.verify(req, res, options);
|
|
75
75
|
return res.status(200).json({ status: 'success', data: result });
|
|
@@ -77,7 +77,7 @@ const IpfsController = {
|
|
|
77
77
|
logger.error(error, error.stack);
|
|
78
78
|
return res.status(400).json({ status: 'error', message: error.message });
|
|
79
79
|
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
82
|
|
|
83
83
|
export { IpfsController };
|
|
@@ -21,9 +21,7 @@
|
|
|
21
21
|
* @module src/api/ipfs/ipfs.model.js
|
|
22
22
|
* @namespace IpfsModel
|
|
23
23
|
*/
|
|
24
|
-
|
|
25
24
|
import { Schema, model } from 'mongoose';
|
|
26
|
-
|
|
27
25
|
const IpfsSchema = new Schema(
|
|
28
26
|
{
|
|
29
27
|
cid: {
|
|
@@ -50,22 +48,16 @@ const IpfsSchema = new Schema(
|
|
|
50
48
|
timestamps: true,
|
|
51
49
|
},
|
|
52
50
|
);
|
|
53
|
-
|
|
54
51
|
// One DB record per (CID, resourceType) pair.
|
|
55
52
|
IpfsSchema.index({ cid: 1, resourceType: 1 }, { unique: true });
|
|
56
|
-
|
|
57
53
|
// Fast look-ups for health-check and garbage-collection by type.
|
|
58
54
|
IpfsSchema.index({ resourceType: 1 });
|
|
59
|
-
|
|
60
55
|
// Fast look-ups for targeted MFS cleanup.
|
|
61
56
|
IpfsSchema.index({ mfsPath: 1 });
|
|
62
|
-
|
|
63
57
|
const IpfsModel = model('Ipfs', IpfsSchema);
|
|
64
|
-
|
|
65
58
|
const ProviderSchema = IpfsSchema;
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
select: {
|
|
59
|
+
class IpfsDto {
|
|
60
|
+
static select = {
|
|
69
61
|
get: () => ({
|
|
70
62
|
_id: 1,
|
|
71
63
|
cid: 1,
|
|
@@ -74,7 +66,6 @@ const IpfsDto = {
|
|
|
74
66
|
createdAt: 1,
|
|
75
67
|
updatedAt: 1,
|
|
76
68
|
}),
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
69
|
+
};
|
|
70
|
+
}
|
|
80
71
|
export { IpfsSchema, IpfsModel, ProviderSchema, IpfsDto };
|
|
@@ -5,22 +5,27 @@ import express from 'express';
|
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
router
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
class IpfsRouter {
|
|
9
|
+
/**
|
|
10
|
+
* @param {import('../types.js').RouterOptions} options
|
|
11
|
+
* @returns {import('express').Router}
|
|
12
|
+
*/
|
|
13
|
+
static router(options) {
|
|
14
|
+
const router = express.Router();
|
|
15
|
+
// Health / audit — must come before /:id to avoid matching conflicts.
|
|
16
|
+
router.get(`/verify`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.verify(req, res, options));
|
|
17
|
+
router.post(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.post(req, res, options));
|
|
18
|
+
router.post(`/`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.post(req, res, options));
|
|
19
|
+
router.get(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.get(req, res, options));
|
|
20
|
+
router.get(`/`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.get(req, res, options));
|
|
21
|
+
router.put(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.put(req, res, options));
|
|
22
|
+
router.put(`/`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.put(req, res, options));
|
|
23
|
+
router.delete(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.delete(req, res, options));
|
|
24
|
+
router.delete(`/`, options.authMiddleware, adminGuard, async (req, res) => await IpfsController.delete(req, res, options));
|
|
25
|
+
return router;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
23
28
|
|
|
24
|
-
const ApiRouter = IpfsRouter;
|
|
29
|
+
const ApiRouter = (options) => IpfsRouter.router(options);
|
|
25
30
|
|
|
26
31
|
export { ApiRouter, IpfsRouter };
|