cyberia 3.1.3 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +0 -2
- package/.github/workflows/engine-cyberia.cd.yml +10 -8
- package/.github/workflows/engine-cyberia.ci.yml +12 -29
- package/.github/workflows/ghpkg.ci.yml +4 -4
- package/.github/workflows/npmpkg.ci.yml +28 -11
- package/.github/workflows/publish.ci.yml +21 -2
- package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -5
- package/.github/workflows/pwa-microservices-template-test.ci.yml +3 -3
- package/.github/workflows/release.cd.yml +14 -10
- package/CHANGELOG.md +783 -1
- package/CLI-HELP.md +95 -18
- package/Dockerfile +0 -2
- package/README.md +290 -220
- package/bin/build.js +24 -7
- package/bin/cyberia.js +2838 -252
- package/bin/deploy.js +747 -125
- package/bin/file.js +9 -0
- package/bin/index.js +2838 -252
- package/bin/vs.js +1 -1
- package/conf.js +99 -65
- package/deployment.yaml +18 -164
- package/hardhat/hardhat.config.js +13 -13
- package/hardhat/ignition/modules/ObjectLayerToken.js +1 -1
- package/hardhat/package-lock.json +2559 -5864
- package/hardhat/package.json +14 -23
- package/hardhat/scripts/deployObjectLayerToken.js +1 -1
- package/hardhat/test/ObjectLayerToken.js +4 -2
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +6 -5
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +6 -5
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +18 -164
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +7 -79
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +112 -28
- package/manifests/deployment/dd-test-development/proxy.yaml +46 -1
- package/manifests/deployment/playwright/deployment.yaml +1 -1
- package/nodemon.json +1 -1
- package/package.json +39 -24
- package/proxy.yaml +7 -79
- package/scripts/k3s-node-setup.sh +2 -2
- package/scripts/nat-iptables.sh +103 -18
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +58 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +23 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +148 -20
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.service.js +10 -10
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.service.js +8 -8
- 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 +27 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +93 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +29 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +51 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +74 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +24 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +27 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +178 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +92 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +87 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +63 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +156 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +74 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +574 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +231 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +27 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +79 -0
- package/src/api/cyberia-map/cyberia-map.model.js +30 -0
- package/src/api/cyberia-map/cyberia-map.router.js +40 -0
- package/src/api/cyberia-map/cyberia-map.service.js +74 -0
- 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 +27 -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 +27 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.service.js +10 -10
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.ref.json +18 -0
- package/src/api/file/file.service.js +36 -36
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.service.js +10 -10
- package/src/api/ipfs/ipfs.controller.js +15 -36
- package/src/api/ipfs/ipfs.model.js +47 -47
- package/src/api/ipfs/ipfs.router.js +8 -13
- package/src/api/ipfs/ipfs.service.js +67 -129
- 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 +30 -0
- package/src/api/object-layer/object-layer.service.js +126 -43
- 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.service.js +18 -14
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.service.js +8 -8
- package/src/api/user/guest.service.js +99 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.service.js +11 -27
- package/src/cli/cluster.js +68 -21
- package/src/cli/db.js +753 -825
- package/src/cli/deploy.js +215 -125
- package/src/cli/env.js +29 -0
- package/src/cli/fs.js +82 -8
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +74 -3
- package/src/cli/kubectl.js +211 -0
- package/src/cli/release.js +340 -0
- package/src/cli/repository.js +475 -74
- package/src/cli/run.js +582 -43
- package/src/cli/secrets.js +73 -0
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/cli/test.js +3 -3
- package/src/client/Cryptokoyn.index.js +18 -22
- package/src/client/CyberiaPortal.index.js +19 -24
- package/src/client/Default.index.js +21 -34
- package/src/client/Itemledger.index.js +20 -27
- package/src/client/Underpost.index.js +19 -24
- 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 +69 -0
- package/src/client/components/core/Auth.js +35 -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 +43 -64
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +87 -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 +194 -96
- package/src/client/components/core/EventBus.js +92 -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 +26 -19
- 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 +43 -43
- package/src/client/components/core/LogOut.js +25 -16
- package/src/client/components/core/Modal.js +462 -179
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -51
- package/src/client/components/core/PanelForm.js +44 -144
- 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 +112 -30
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +143 -95
- 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/Webhook.js +40 -7
- package/src/client/components/core/Worker.js +163 -27
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +59 -59
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +9 -7
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +8 -6
- 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/cryptokoyn/SocketIoCryptokoyn.js +3 -51
- package/src/client/components/cyberia/InstanceEngineCyberia.js +781 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1836 -2
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1220 -99
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +252 -316
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +136 -103
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +462 -32
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +9 -7
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +8 -6
- 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/SocketIoCyberiaPortal.js +3 -49
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +8 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +91 -91
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +9 -7
- package/src/client/components/default/LogOutDefault.js +8 -6
- 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/SocketIoDefault.js +3 -51
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +59 -59
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +9 -7
- package/src/client/components/itemledger/LogOutItemledger.js +8 -6
- 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/SocketIoItemledger.js +3 -51
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +92 -92
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- 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 +9 -7
- package/src/client/components/underpost/LogOutUnderpost.js +8 -6
- 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/SocketIoUnderpost.js +3 -51
- 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 +443 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -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/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 +35 -55
- 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-dialogue/cyberia-dialogue.service.js +99 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +116 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
- 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 +6 -6
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +14 -40
- package/src/client/services/object-layer/object-layer.management.js +14 -14
- package/src/client/services/object-layer/object-layer.service.js +39 -24
- 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 +6 -6
- 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/offline/Maintenance.js +12 -11
- package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
- package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/pages/Test.js +2 -2
- package/src/client/sw/core.sw.js +212 -0
- package/src/grpc/cyberia/grpc-server.js +642 -0
- package/src/index.js +24 -1
- package/src/runtime/cyberia-client/Dockerfile +80 -0
- package/src/runtime/cyberia-server/Dockerfile +37 -0
- package/src/runtime/express/Dockerfile +5 -1
- package/src/runtime/express/Express.js +18 -1
- package/src/runtime/lampp/Dockerfile +17 -5
- package/src/runtime/lampp/Lampp.js +27 -4
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +639 -0
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/auth.js +24 -1
- package/src/server/backup.js +37 -9
- package/src/server/client-build-docs.js +52 -46
- package/src/server/client-build.js +356 -82
- package/src/server/client-formatted.js +140 -57
- package/src/server/conf.js +29 -13
- package/src/server/cron.js +25 -23
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +24 -1
- package/src/server/ipfs-client.js +253 -89
- package/src/server/object-layer.js +150 -114
- package/src/server/peer.js +8 -0
- package/src/server/process.js +13 -27
- package/src/server/runtime.js +25 -1
- package/src/server/semantic-layer-generator-floor.js +319 -0
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +1164 -0
- package/src/server/semantic-layer-generator.js +211 -542
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +19 -5
- package/src/server/valkey.js +141 -235
- package/src/ws/IoInterface.js +1 -10
- package/src/ws/IoServer.js +14 -33
- package/src/ws/core/channels/core.ws.chat.js +65 -20
- package/src/ws/core/channels/core.ws.mailer.js +113 -32
- package/src/ws/core/channels/core.ws.stream.js +90 -31
- package/src/ws/core/core.ws.connection.js +12 -33
- package/src/ws/core/core.ws.emit.js +10 -26
- package/src/ws/core/core.ws.server.js +25 -58
- package/src/ws/default/channels/default.ws.main.js +53 -12
- package/src/ws/default/default.ws.connection.js +26 -13
- package/src/ws/default/default.ws.server.js +30 -12
- 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/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -59
- package/jsdoc.json +0 -59
- package/src/api/object-layer/README.md +0 -347
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/CommonCryptokoyn.js +0 -29
- package/src/client/components/cryptokoyn/ElementsCryptokoyn.js +0 -38
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +0 -38
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -58
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/ElementsDefault.js +0 -38
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/CommonItemledger.js +0 -29
- package/src/client/components/itemledger/ElementsItemledger.js +0 -38
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/CommonUnderpost.js +0 -29
- package/src/client/components/underpost/ElementsUnderpost.js +0 -38
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/ws/core/management/core.ws.chat.js +0 -8
- package/src/ws/core/management/core.ws.mailer.js +0 -16
- package/src/ws/core/management/core.ws.stream.js +0 -8
- package/src/ws/default/management/default.ws.main.js +0 -8
|
@@ -3,191 +3,129 @@ import { loggerFactory } from '../../server/logger.js';
|
|
|
3
3
|
import { DataQuery } from '../../server/data-query.js';
|
|
4
4
|
import { IpfsClient } from '../../server/ipfs-client.js';
|
|
5
5
|
import { IpfsDto } from './ipfs.model.js';
|
|
6
|
-
|
|
7
6
|
const logger = loggerFactory(import.meta);
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
8
|
+
* Upsert a CID registry entry.
|
|
9
|
+
* Called by asset services (ObjectLayer, AtlasSpriteSheet) after a successful
|
|
10
|
+
* IPFS pin so the registry always reflects what is actually pinned.
|
|
13
11
|
*
|
|
14
|
-
* @param {object}
|
|
15
|
-
* @param {string}
|
|
16
|
-
* @param {string}
|
|
17
|
-
* @param {
|
|
12
|
+
* @param {object} opts
|
|
13
|
+
* @param {string} opts.cid - IPFS Content Identifier.
|
|
14
|
+
* @param {string} opts.resourceType - Asset category ('object-layer-data' | 'atlas-sprite-sheet' | 'atlas-metadata').
|
|
15
|
+
* @param {string} [opts.mfsPath] - MFS path used when adding the content.
|
|
16
|
+
* @param {object} opts.options - Router options ({ host, path }) for DB lookup.
|
|
18
17
|
* @returns {Promise<import('mongoose').Document>}
|
|
19
18
|
*/
|
|
20
|
-
const createPinRecord = async ({ cid,
|
|
19
|
+
const createPinRecord = async ({ cid, resourceType, mfsPath = '', options }) => {
|
|
21
20
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
22
|
-
|
|
23
|
-
// Upsert: if a record for this user + CID already exists, just touch it.
|
|
24
21
|
const record = await Ipfs.findOneAndUpdate(
|
|
25
|
-
{ cid,
|
|
26
|
-
{ cid,
|
|
22
|
+
{ cid, resourceType },
|
|
23
|
+
{ cid, resourceType, mfsPath },
|
|
27
24
|
{ upsert: true, returnDocument: 'after', setDefaultsOnInsert: true },
|
|
28
25
|
);
|
|
29
|
-
|
|
30
|
-
logger.info(`IPFS pin record upserted – CID: ${cid}, userId: ${userId}`);
|
|
26
|
+
logger.info(`IPFS registry upserted – CID: ${cid}, type: ${resourceType}, mfsPath: ${mfsPath}`);
|
|
31
27
|
return record;
|
|
32
28
|
};
|
|
33
|
-
|
|
34
29
|
/**
|
|
35
|
-
* Remove all DB
|
|
36
|
-
* Always deletes
|
|
37
|
-
* the database stays clean.
|
|
30
|
+
* Remove all DB registry entries for a CID, then best-effort unpin from the IPFS node.
|
|
31
|
+
* Always deletes DB records first so the registry stays clean even if the node is down.
|
|
38
32
|
*
|
|
39
|
-
* @param {string} cid
|
|
40
|
-
* @param {object} options
|
|
33
|
+
* @param {string} cid - IPFS Content Identifier to remove.
|
|
34
|
+
* @param {object} options - Router options ({ host, path }) for DB lookup.
|
|
41
35
|
* @returns {Promise<void>}
|
|
42
36
|
*/
|
|
43
37
|
const removePinRecordsAndUnpin = async (cid, options) => {
|
|
44
38
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
45
|
-
|
|
46
|
-
// 1. Remove all DB pin records for this CID first
|
|
47
39
|
await Ipfs.deleteMany({ cid });
|
|
48
|
-
logger.info(`Removed
|
|
49
|
-
|
|
50
|
-
// 2. Best-effort unpin from IPFS node/cluster (ignore "not pinned" errors)
|
|
40
|
+
logger.info(`Removed IPFS registry entries for CID: ${cid}`);
|
|
51
41
|
try {
|
|
52
42
|
await IpfsClient.unpinCid(cid);
|
|
53
43
|
} catch (err) {
|
|
54
44
|
logger.warn(`Best-effort IPFS unpin failed for CID ${cid}: ${err.message}`);
|
|
55
45
|
}
|
|
56
46
|
};
|
|
57
|
-
|
|
58
|
-
const IpfsService = {
|
|
47
|
+
class IpfsService {
|
|
59
48
|
/** Expose helpers so other modules can import them directly. */
|
|
60
|
-
createPinRecord
|
|
61
|
-
removePinRecordsAndUnpin
|
|
62
|
-
|
|
49
|
+
static createPinRecord = createPinRecord;
|
|
50
|
+
static removePinRecordsAndUnpin = removePinRecordsAndUnpin;
|
|
63
51
|
// ──────────────────────────────────────────────
|
|
64
52
|
// Standard CRUD
|
|
65
53
|
// ──────────────────────────────────────────────
|
|
66
|
-
|
|
67
|
-
post: async (req, res, options) => {
|
|
68
|
-
/** @type {import('./ipfs.model.js').IpfsModel} */
|
|
54
|
+
static post = async (req, res, options) => {
|
|
69
55
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const body = { ...req.body };
|
|
74
|
-
if (!body.userId && req.auth && req.auth.user) {
|
|
75
|
-
body.userId = req.auth.user._id;
|
|
76
|
-
}
|
|
77
|
-
// Strip pinType if sent by legacy clients
|
|
78
|
-
delete body.pinType;
|
|
79
|
-
|
|
80
|
-
return await new Ipfs(body).save();
|
|
81
|
-
},
|
|
82
|
-
|
|
83
|
-
get: async (req, res, options) => {
|
|
84
|
-
/** @type {import('./ipfs.model.js').IpfsModel} */
|
|
56
|
+
return await new Ipfs(req.body).save();
|
|
57
|
+
};
|
|
58
|
+
static get = async (req, res, options) => {
|
|
85
59
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
86
|
-
|
|
87
60
|
if (req.params.id) {
|
|
88
|
-
return await Ipfs.findById(req.params.id).select(IpfsDto.select.get())
|
|
61
|
+
return await Ipfs.findById(req.params.id).select(IpfsDto.select.get());
|
|
89
62
|
}
|
|
90
|
-
|
|
91
63
|
const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
|
|
92
|
-
|
|
93
64
|
const [data, total] = await Promise.all([
|
|
94
|
-
Ipfs.find(query)
|
|
95
|
-
.select(IpfsDto.select.get())
|
|
96
|
-
.sort(sort)
|
|
97
|
-
.limit(limit)
|
|
98
|
-
.skip(skip)
|
|
99
|
-
.populate(IpfsDto.populate.user()),
|
|
65
|
+
Ipfs.find(query).select(IpfsDto.select.get()).sort(sort).limit(limit).skip(skip),
|
|
100
66
|
Ipfs.countDocuments(query),
|
|
101
67
|
]);
|
|
102
|
-
|
|
103
68
|
const totalPages = Math.ceil(total / limit);
|
|
104
69
|
return { data, total, page, totalPages };
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
put: async (req, res, options) => {
|
|
108
|
-
/** @type {import('./ipfs.model.js').IpfsModel} */
|
|
70
|
+
};
|
|
71
|
+
static put = async (req, res, options) => {
|
|
109
72
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
110
73
|
return await Ipfs.findByIdAndUpdate(req.params.id, req.body, { returnDocument: 'after' });
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
delete: async (req, res, options) => {
|
|
114
|
-
/** @type {import('./ipfs.model.js').IpfsModel} */
|
|
74
|
+
};
|
|
75
|
+
static delete = async (req, res, options) => {
|
|
115
76
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
116
|
-
|
|
117
77
|
if (req.params.id) {
|
|
118
78
|
const record = await Ipfs.findById(req.params.id);
|
|
119
79
|
if (record) {
|
|
120
|
-
// Remove DB record first, then best-effort unpin
|
|
121
80
|
await Ipfs.findByIdAndDelete(req.params.id);
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
81
|
+
// Only unpin from the node when no other registry entries reference this CID.
|
|
82
|
+
const remaining = await Ipfs.countDocuments({ cid: record.cid });
|
|
83
|
+
if (remaining === 0) {
|
|
84
|
+
try {
|
|
126
85
|
await IpfsClient.unpinCid(record.cid);
|
|
86
|
+
} catch (err) {
|
|
87
|
+
logger.warn(`Failed to unpin CID ${record.cid}: ${err.message}`);
|
|
127
88
|
}
|
|
128
|
-
} catch (err) {
|
|
129
|
-
logger.warn(`Failed to unpin CID ${record.cid} from IPFS node: ${err.message}`);
|
|
130
89
|
}
|
|
131
90
|
return record;
|
|
132
91
|
}
|
|
133
92
|
return null;
|
|
134
93
|
}
|
|
135
|
-
|
|
136
94
|
return await Ipfs.deleteMany();
|
|
137
|
-
}
|
|
138
|
-
|
|
95
|
+
};
|
|
139
96
|
// ──────────────────────────────────────────────
|
|
140
|
-
//
|
|
97
|
+
// Health / audit
|
|
141
98
|
// ──────────────────────────────────────────────
|
|
142
|
-
|
|
143
99
|
/**
|
|
144
|
-
*
|
|
145
|
-
*
|
|
100
|
+
* GET /ipfs/verify
|
|
101
|
+
*
|
|
102
|
+
* Iterates every CID in the registry and checks whether it is actually pinned
|
|
103
|
+
* on the connected IPFS node. Returns a summary suitable for admin dashboards
|
|
104
|
+
* and automated alerting.
|
|
105
|
+
*
|
|
106
|
+
* Response shape:
|
|
107
|
+
* { total, pinned, unpinned, errors, entries: [{ cid, resourceType, mfsPath, pinned, error? }] }
|
|
146
108
|
*/
|
|
147
|
-
|
|
148
|
-
const userId = req.body.userId || (req.auth && req.auth.user ? req.auth.user._id : undefined);
|
|
149
|
-
if (!userId) throw new Error('userId is required to create a pin record');
|
|
150
|
-
|
|
151
|
-
const content = typeof req.body.data === 'string' ? req.body.data : JSON.stringify(req.body.data);
|
|
152
|
-
const result = await IpfsClient.addToIpfs(Buffer.from(content, 'utf-8'), req.body.filename || 'data');
|
|
153
|
-
|
|
154
|
-
if (!result) throw new Error('IPFS node is unreachable – content was not pinned');
|
|
155
|
-
|
|
156
|
-
const record = await createPinRecord({
|
|
157
|
-
cid: result.cid,
|
|
158
|
-
userId,
|
|
159
|
-
options,
|
|
160
|
-
});
|
|
161
|
-
|
|
162
|
-
return { cid: result.cid, size: result.size, record };
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* DELETE /ipfs/pin/:cid – unpin a CID and remove the DB record for the current user.
|
|
167
|
-
*/
|
|
168
|
-
unpin: async (req, res, options) => {
|
|
109
|
+
static verify = async (req, res, options) => {
|
|
169
110
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
},
|
|
191
|
-
};
|
|
192
|
-
|
|
111
|
+
const records = await Ipfs.find({}).select(IpfsDto.select.get()).lean();
|
|
112
|
+
let pinned = 0;
|
|
113
|
+
let unpinned = 0;
|
|
114
|
+
let errors = 0;
|
|
115
|
+
const entries = await Promise.all(
|
|
116
|
+
records.map(async (r) => {
|
|
117
|
+
try {
|
|
118
|
+
const isPinned = await IpfsClient.isCidPinned(r.cid);
|
|
119
|
+
if (isPinned) pinned++;
|
|
120
|
+
else unpinned++;
|
|
121
|
+
return { cid: r.cid, resourceType: r.resourceType, mfsPath: r.mfsPath, pinned: isPinned };
|
|
122
|
+
} catch (err) {
|
|
123
|
+
errors++;
|
|
124
|
+
return { cid: r.cid, resourceType: r.resourceType, mfsPath: r.mfsPath, pinned: false, error: err.message };
|
|
125
|
+
}
|
|
126
|
+
}),
|
|
127
|
+
);
|
|
128
|
+
return { total: records.length, pinned, unpinned, errors, entries };
|
|
129
|
+
};
|
|
130
|
+
}
|
|
193
131
|
export { IpfsService, createPinRecord, removePinRecordsAndUnpin };
|
|
@@ -3,8 +3,8 @@ import { ObjectLayerService } from './object-layer.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class ObjectLayerController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await ObjectLayerService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const ObjectLayerController = {
|
|
|
18
18
|
message: error.message,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
22
|
-
get
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
24
|
if (req && req.headers && req.headers.origin) {
|
|
25
25
|
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
@@ -37,8 +37,8 @@ const ObjectLayerController = {
|
|
|
37
37
|
message: error.message,
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
}
|
|
41
|
-
generateWebp
|
|
40
|
+
};
|
|
41
|
+
static generateWebp = async (req, res, options) => {
|
|
42
42
|
try {
|
|
43
43
|
const result = await ObjectLayerService.generateWebp(req, res, options);
|
|
44
44
|
if (req && req.headers && req.headers.origin) {
|
|
@@ -59,8 +59,8 @@ const ObjectLayerController = {
|
|
|
59
59
|
message: error.message,
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
|
-
}
|
|
63
|
-
put
|
|
62
|
+
};
|
|
63
|
+
static put = async (req, res, options) => {
|
|
64
64
|
try {
|
|
65
65
|
const result = await ObjectLayerService.put(req, res, options);
|
|
66
66
|
return res.status(200).json({
|
|
@@ -74,8 +74,8 @@ const ObjectLayerController = {
|
|
|
74
74
|
message: error.message,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
-
}
|
|
78
|
-
delete
|
|
77
|
+
};
|
|
78
|
+
static delete = async (req, res, options) => {
|
|
79
79
|
try {
|
|
80
80
|
const result = await ObjectLayerService.delete(req, res, options);
|
|
81
81
|
return res.status(200).json({
|
|
@@ -89,7 +89,7 @@ const ObjectLayerController = {
|
|
|
89
89
|
message: error.message,
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
94
|
|
|
95
95
|
export { ObjectLayerController };
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
* @module src/api/object-layer/object-layer.model.js
|
|
4
4
|
* @namespace CyberiaObjectLayerModel
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { Schema, model } from 'mongoose';
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* @typedef {Object} Stats
|
|
11
9
|
* @property {number} effect - The effect attribute value
|
|
@@ -27,7 +25,6 @@ const StatsSchema = new Schema(
|
|
|
27
25
|
},
|
|
28
26
|
{ _id: false },
|
|
29
27
|
);
|
|
30
|
-
|
|
31
28
|
/**
|
|
32
29
|
* @typedef {Object} Item
|
|
33
30
|
* @property {string} id - Unique identifier for the item
|
|
@@ -45,7 +42,6 @@ const ItemSchema = new Schema(
|
|
|
45
42
|
},
|
|
46
43
|
{ _id: false },
|
|
47
44
|
);
|
|
48
|
-
|
|
49
45
|
/**
|
|
50
46
|
* @typedef {Object} Ledger
|
|
51
47
|
* Blockchain protocol metadata linking the visual object-layer prefab to its economic reality.
|
|
@@ -68,7 +64,6 @@ const LedgerSchema = new Schema(
|
|
|
68
64
|
},
|
|
69
65
|
{ _id: false },
|
|
70
66
|
);
|
|
71
|
-
|
|
72
67
|
/**
|
|
73
68
|
* @typedef {Object} Render
|
|
74
69
|
* IPFS content identifiers for the consolidated atlas sprite sheet.
|
|
@@ -83,7 +78,6 @@ const RenderSchema = new Schema(
|
|
|
83
78
|
},
|
|
84
79
|
{ _id: false },
|
|
85
80
|
);
|
|
86
|
-
|
|
87
81
|
/**
|
|
88
82
|
* @typedef {Object} ObjectLayer
|
|
89
83
|
* @property {Object} data - Object layer data
|
|
@@ -138,11 +132,9 @@ const ObjectLayerSchema = new Schema(
|
|
|
138
132
|
toObject: { virtuals: true },
|
|
139
133
|
},
|
|
140
134
|
);
|
|
141
|
-
|
|
142
135
|
// Index for faster querying
|
|
143
136
|
ObjectLayerSchema.index({ 'data.item.id': 1 });
|
|
144
137
|
ObjectLayerSchema.index({ 'data.item.type': 1 });
|
|
145
|
-
|
|
146
138
|
// Add text index for searchable fields
|
|
147
139
|
ObjectLayerSchema.index(
|
|
148
140
|
{
|
|
@@ -158,7 +150,6 @@ ObjectLayerSchema.index(
|
|
|
158
150
|
},
|
|
159
151
|
},
|
|
160
152
|
);
|
|
161
|
-
|
|
162
153
|
// Pre-save hook to ensure data consistency
|
|
163
154
|
ObjectLayerSchema.pre('save', function () {
|
|
164
155
|
// Ensure all required fields are present
|
|
@@ -167,14 +158,11 @@ ObjectLayerSchema.pre('save', function () {
|
|
|
167
158
|
}
|
|
168
159
|
// cid (object layer data JSON) and data.render.cid (atlas PNG) are optional – default to ''
|
|
169
160
|
});
|
|
170
|
-
|
|
171
161
|
// Create and export the model
|
|
172
162
|
const ObjectLayerModel = model('ObjectLayer', ObjectLayerSchema);
|
|
173
|
-
|
|
174
163
|
const ProviderSchema = ObjectLayerSchema;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
select: {
|
|
164
|
+
class ObjectLayerDto {
|
|
165
|
+
static select = {
|
|
178
166
|
get: () => {
|
|
179
167
|
return {
|
|
180
168
|
_id: 1,
|
|
@@ -207,7 +195,6 @@ const ObjectLayerDto = {
|
|
|
207
195
|
objectLayerRenderFramesId: 1,
|
|
208
196
|
};
|
|
209
197
|
},
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
198
|
+
};
|
|
199
|
+
}
|
|
213
200
|
export { ObjectLayerSchema, ObjectLayerModel, ProviderSchema, ObjectLayerDto };
|
|
@@ -334,6 +334,36 @@ const ObjectLayerRouter = (options) => {
|
|
|
334
334
|
*/
|
|
335
335
|
return await ObjectLayerController.get(req, res, options);
|
|
336
336
|
});
|
|
337
|
+
router.get(`/search-item-ids`, async (req, res) => {
|
|
338
|
+
/*
|
|
339
|
+
#swagger.auto = false
|
|
340
|
+
#swagger.tags = ['object-layer']
|
|
341
|
+
#swagger.summary = 'Search object layer item IDs'
|
|
342
|
+
#swagger.description = 'Returns partial matches of data.item.id for type-ahead autocomplete'
|
|
343
|
+
#swagger.path = '/object-layer/search-item-ids'
|
|
344
|
+
#swagger.method = 'get'
|
|
345
|
+
#swagger.produces = ['application/json']
|
|
346
|
+
|
|
347
|
+
#swagger.parameters['q'] = {
|
|
348
|
+
in: 'query',
|
|
349
|
+
description: 'Partial item ID to search for',
|
|
350
|
+
required: false,
|
|
351
|
+
type: 'string'
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
#swagger.responses[200] = {
|
|
355
|
+
description: 'Item IDs matching the query',
|
|
356
|
+
content: {
|
|
357
|
+
'application/json': {
|
|
358
|
+
schema: {
|
|
359
|
+
$ref: '#/components/schemas/objectLayerResponse'
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
*/
|
|
365
|
+
return await ObjectLayerController.get(req, res, options);
|
|
366
|
+
});
|
|
337
367
|
router.get(`/frame-counts/:id`, async (req, res) => {
|
|
338
368
|
/*
|
|
339
369
|
#swagger.auto = false
|