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
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# ──────────────────────────────────────────────────────────────────
|
|
5
|
+
# rhel-grpc-setup.sh — Install gRPC / Protocol Buffers system
|
|
6
|
+
# packages on RHEL / Rocky Linux / AlmaLinux / Fedora.
|
|
7
|
+
#
|
|
8
|
+
# Installs:
|
|
9
|
+
# 1. protobuf-compiler (protoc) + protobuf-devel
|
|
10
|
+
# 2. grpc / grpc-devel / grpc-plugins (C++ libs + plugin binaries)
|
|
11
|
+
#
|
|
12
|
+
# For Go-specific tooling (protoc-gen-go, protoc-gen-go-grpc,
|
|
13
|
+
# go mod tidy, proto codegen) use:
|
|
14
|
+
# ./cyberia-server/scripts/grpc-setup.sh
|
|
15
|
+
#
|
|
16
|
+
# Usage:
|
|
17
|
+
# sudo ./scripts/rhel-grpc-setup.sh
|
|
18
|
+
# ──────────────────────────────────────────────────────────────────
|
|
19
|
+
|
|
20
|
+
if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
|
|
21
|
+
echo "Usage: sudo $0"
|
|
22
|
+
echo "Installs protobuf + gRPC system packages via dnf."
|
|
23
|
+
echo "For Go codegen plugins, run: ./cyberia-server/scripts/grpc-setup.sh"
|
|
24
|
+
exit 0
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# ── 1. Enable EPEL (needed for protobuf / grpc on RHEL) ──────────
|
|
28
|
+
echo ">>> Enabling EPEL repository..."
|
|
29
|
+
sudo dnf install -y epel-release || true
|
|
30
|
+
sudo dnf install -y dnf-plugins-core || true
|
|
31
|
+
|
|
32
|
+
# On RHEL proper, enable CRB/PowerTools for devel headers
|
|
33
|
+
if grep -qi 'Red Hat Enterprise' /etc/os-release 2>/dev/null; then
|
|
34
|
+
sudo dnf config-manager --set-enabled codeready-builder-for-rhel-"$(rpm -E %rhel)"-"$(uname -m)-rpms" 2>/dev/null || true
|
|
35
|
+
elif grep -qi 'Rocky\|AlmaLinux' /etc/os-release 2>/dev/null; then
|
|
36
|
+
sudo dnf config-manager --set-enabled crb 2>/dev/null || \
|
|
37
|
+
sudo dnf config-manager --set-enabled powertools 2>/dev/null || true
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
# ── 2. Install protobuf compiler + gRPC system packages ──────────
|
|
41
|
+
echo ">>> Installing protobuf-compiler, protobuf-devel, grpc, grpc-devel, grpc-plugins..."
|
|
42
|
+
sudo dnf install -y \
|
|
43
|
+
protobuf-compiler \
|
|
44
|
+
protobuf-devel \
|
|
45
|
+
grpc \
|
|
46
|
+
grpc-devel \
|
|
47
|
+
grpc-plugins
|
|
48
|
+
|
|
49
|
+
# ── 3. Verify protoc ─────────────────────────────────────────────
|
|
50
|
+
if command -v protoc &>/dev/null; then
|
|
51
|
+
echo ">>> protoc installed: $(protoc --version)"
|
|
52
|
+
else
|
|
53
|
+
echo "WARNING: protoc not found in PATH after install." >&2
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo ">>> gRPC system packages setup complete."
|
|
@@ -3,8 +3,28 @@ import { AtlasSpriteSheetService } from './atlas-sprite-sheet.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
class AtlasSpriteSheetController {
|
|
7
|
+
static blob = async (req, res, options) => {
|
|
8
|
+
try {
|
|
9
|
+
if (req && req.headers && req.headers.origin) {
|
|
10
|
+
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
11
|
+
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
12
|
+
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
13
|
+
|
|
14
|
+
const { buffer, mimetype, name } = await AtlasSpriteSheetService.blob(req, res, options);
|
|
15
|
+
res.set('Content-Type', mimetype);
|
|
16
|
+
res.set('Content-Length', buffer.length);
|
|
17
|
+
res.set('Content-Disposition', `inline; filename="${name}"`);
|
|
18
|
+
return res.status(200).end(buffer);
|
|
19
|
+
} catch (error) {
|
|
20
|
+
logger.error('AtlasSpriteSheetController.blob error:', error);
|
|
21
|
+
return res.status(404).json({
|
|
22
|
+
status: 'error',
|
|
23
|
+
message: error.message,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
static generate = async (req, res, options) => {
|
|
8
28
|
try {
|
|
9
29
|
const result = await AtlasSpriteSheetService.generate(req, res, options);
|
|
10
30
|
return res.status(200).json({
|
|
@@ -18,8 +38,8 @@ const AtlasSpriteSheetController = {
|
|
|
18
38
|
message: error.message,
|
|
19
39
|
});
|
|
20
40
|
}
|
|
21
|
-
}
|
|
22
|
-
deleteByObjectLayerId
|
|
41
|
+
};
|
|
42
|
+
static deleteByObjectLayerId = async (req, res, options) => {
|
|
23
43
|
try {
|
|
24
44
|
const result = await AtlasSpriteSheetService.deleteByObjectLayerId(req, res, options);
|
|
25
45
|
return res.status(200).json({
|
|
@@ -33,8 +53,8 @@ const AtlasSpriteSheetController = {
|
|
|
33
53
|
message: error.message,
|
|
34
54
|
});
|
|
35
55
|
}
|
|
36
|
-
}
|
|
37
|
-
post
|
|
56
|
+
};
|
|
57
|
+
static post = async (req, res, options) => {
|
|
38
58
|
try {
|
|
39
59
|
const result = await AtlasSpriteSheetService.post(req, res, options);
|
|
40
60
|
return res.status(200).json({
|
|
@@ -48,8 +68,8 @@ const AtlasSpriteSheetController = {
|
|
|
48
68
|
message: error.message,
|
|
49
69
|
});
|
|
50
70
|
}
|
|
51
|
-
}
|
|
52
|
-
get
|
|
71
|
+
};
|
|
72
|
+
static get = async (req, res, options) => {
|
|
53
73
|
try {
|
|
54
74
|
if (req && req.headers && req.headers.origin) {
|
|
55
75
|
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
@@ -72,8 +92,8 @@ const AtlasSpriteSheetController = {
|
|
|
72
92
|
message: error.message,
|
|
73
93
|
});
|
|
74
94
|
}
|
|
75
|
-
}
|
|
76
|
-
put
|
|
95
|
+
};
|
|
96
|
+
static put = async (req, res, options) => {
|
|
77
97
|
try {
|
|
78
98
|
const result = await AtlasSpriteSheetService.put(req, res, options);
|
|
79
99
|
return res.status(200).json({
|
|
@@ -87,8 +107,8 @@ const AtlasSpriteSheetController = {
|
|
|
87
107
|
message: error.message,
|
|
88
108
|
});
|
|
89
109
|
}
|
|
90
|
-
}
|
|
91
|
-
delete
|
|
110
|
+
};
|
|
111
|
+
static delete = async (req, res, options) => {
|
|
92
112
|
try {
|
|
93
113
|
const result = await AtlasSpriteSheetService.delete(req, res, options);
|
|
94
114
|
return res.status(200).json({
|
|
@@ -102,7 +122,31 @@ const AtlasSpriteSheetController = {
|
|
|
102
122
|
message: error.message,
|
|
103
123
|
});
|
|
104
124
|
}
|
|
105
|
-
}
|
|
106
|
-
|
|
125
|
+
};
|
|
126
|
+
static getMetadata = async (req, res, options) => {
|
|
127
|
+
try {
|
|
128
|
+
if (req && req.headers && req.headers.origin) {
|
|
129
|
+
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
130
|
+
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
131
|
+
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
132
|
+
const { page, limit } = req.query;
|
|
133
|
+
const result = await AtlasSpriteSheetService.getMetadata(
|
|
134
|
+
{ ...req, query: { ...req.query, page: parseInt(page), limit: parseInt(limit) } },
|
|
135
|
+
res,
|
|
136
|
+
options,
|
|
137
|
+
);
|
|
138
|
+
return res.status(200).json({
|
|
139
|
+
status: 'success',
|
|
140
|
+
data: result,
|
|
141
|
+
});
|
|
142
|
+
} catch (error) {
|
|
143
|
+
logger.error(error, error.stack);
|
|
144
|
+
return res.status(404).json({
|
|
145
|
+
status: 'error',
|
|
146
|
+
message: error.message,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
}
|
|
107
151
|
|
|
108
152
|
export { AtlasSpriteSheetController };
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
* @module src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js
|
|
4
4
|
* @namespace CyberiaAtlasSpriteSheetModel
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { Schema, model, Types } from 'mongoose';
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* @typedef {Object} FrameMetadata
|
|
11
9
|
* @property {number} x - X position in the atlas
|
|
@@ -25,7 +23,6 @@ const FrameMetadataSchema = new Schema(
|
|
|
25
23
|
},
|
|
26
24
|
{ _id: false },
|
|
27
25
|
);
|
|
28
|
-
|
|
29
26
|
/**
|
|
30
27
|
* @typedef {Object} DirectionFrames
|
|
31
28
|
* @property {FrameMetadata[]} up_idle - Up idle animation frames
|
|
@@ -71,7 +68,6 @@ const DirectionFramesSchema = new Schema(
|
|
|
71
68
|
},
|
|
72
69
|
{ _id: false },
|
|
73
70
|
);
|
|
74
|
-
|
|
75
71
|
/**
|
|
76
72
|
* @typedef {Object} AtlasSpriteSheet
|
|
77
73
|
* @property {Types.ObjectId} fileId - Reference to File document (consolidated PNG)
|
|
@@ -81,6 +77,7 @@ const DirectionFramesSchema = new Schema(
|
|
|
81
77
|
* @property {number} metadata.atlasWidth - Total atlas width in pixels
|
|
82
78
|
* @property {number} metadata.atlasHeight - Total atlas height in pixels
|
|
83
79
|
* @property {number} metadata.cellPixelDim - Pixel dimension of each cell
|
|
80
|
+
* @property {number} metadata.frame_duration - Duration of each frame in milliseconds
|
|
84
81
|
* @property {DirectionFrames} metadata.frames - Frame positions in atlas by direction
|
|
85
82
|
* @property {Date} createdAt - When the document was created
|
|
86
83
|
* @property {Date} updatedAt - When the document was last updated
|
|
@@ -103,6 +100,7 @@ const AtlasSpriteSheetSchema = new Schema(
|
|
|
103
100
|
atlasWidth: { type: Number, required: true, min: 1 },
|
|
104
101
|
atlasHeight: { type: Number, required: true, min: 1 },
|
|
105
102
|
cellPixelDim: { type: Number, required: true, min: 1, default: 20 },
|
|
103
|
+
frame_duration: { type: Number, min: 0, default: 100 },
|
|
106
104
|
frames: { type: DirectionFramesSchema, required: true },
|
|
107
105
|
},
|
|
108
106
|
},
|
|
@@ -112,24 +110,19 @@ const AtlasSpriteSheetSchema = new Schema(
|
|
|
112
110
|
toObject: { virtuals: true },
|
|
113
111
|
},
|
|
114
112
|
);
|
|
115
|
-
|
|
116
113
|
// Indexes for efficient querying
|
|
117
114
|
AtlasSpriteSheetSchema.index({ 'metadata.itemKey': 1 }, { unique: true });
|
|
118
115
|
AtlasSpriteSheetSchema.index({ fileId: 1 });
|
|
119
|
-
|
|
120
116
|
// Pre-save validation
|
|
121
117
|
AtlasSpriteSheetSchema.pre('save', function () {
|
|
122
118
|
if (!this.fileId || !this.metadata) {
|
|
123
119
|
throw new Error('AtlasSpriteSheet missing required fields: fileId or metadata');
|
|
124
120
|
}
|
|
125
121
|
});
|
|
126
|
-
|
|
127
122
|
const AtlasSpriteSheetModel = model('AtlasSpriteSheet', AtlasSpriteSheetSchema);
|
|
128
|
-
|
|
129
123
|
const ProviderSchema = AtlasSpriteSheetSchema;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
select: {
|
|
124
|
+
class AtlasSpriteSheetDto {
|
|
125
|
+
static select = {
|
|
133
126
|
get: () => {
|
|
134
127
|
return {
|
|
135
128
|
_id: 1,
|
|
@@ -140,7 +133,23 @@ const AtlasSpriteSheetDto = {
|
|
|
140
133
|
updatedAt: 1,
|
|
141
134
|
};
|
|
142
135
|
},
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
136
|
+
// Returns all fields the client needs per itemKey:
|
|
137
|
+
// layout dims + frames for rendering, no fileId.
|
|
138
|
+
// Client flow: GET /metadata/:itemKey → cache → GET /blob/:itemKey → cache PNG.
|
|
139
|
+
getMetadataOnly: () => {
|
|
140
|
+
return {
|
|
141
|
+
_id: 1,
|
|
142
|
+
cid: 1,
|
|
143
|
+
'metadata.itemKey': 1,
|
|
144
|
+
'metadata.atlasWidth': 1,
|
|
145
|
+
'metadata.atlasHeight': 1,
|
|
146
|
+
'metadata.cellPixelDim': 1,
|
|
147
|
+
'metadata.frame_duration': 1,
|
|
148
|
+
'metadata.frames': 1,
|
|
149
|
+
createdAt: 1,
|
|
150
|
+
updatedAt: 1,
|
|
151
|
+
};
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
146
155
|
export { AtlasSpriteSheetSchema, AtlasSpriteSheetModel, ProviderSchema, AtlasSpriteSheetDto };
|
|
@@ -19,6 +19,11 @@ const AtlasSpriteSheetRouter = (options) => {
|
|
|
19
19
|
);
|
|
20
20
|
router.post(`/:id`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
|
|
21
21
|
router.post(`/`, authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
|
|
22
|
+
router.get(`/blob/:itemKey`, async (req, res) => await AtlasSpriteSheetController.blob(req, res, options));
|
|
23
|
+
// Metadata endpoints: returns itemKey, atlasWidth, atlasHeight, cellPixelDim, frames (no fileId).
|
|
24
|
+
// Client fetches /metadata/:itemKey once, caches it, then fetches /blob/:itemKey for the PNG.
|
|
25
|
+
router.get(`/metadata/:itemKey`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
|
|
26
|
+
router.get(`/metadata`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
|
|
22
27
|
router.get(
|
|
23
28
|
`/:id`,
|
|
24
29
|
// authMiddleware,
|
|
@@ -8,9 +8,67 @@ import { IpfsClient } from '../../server/ipfs-client.js';
|
|
|
8
8
|
import { createPinRecord, removePinRecordsAndUnpin } from '../ipfs/ipfs.service.js';
|
|
9
9
|
|
|
10
10
|
const logger = loggerFactory(import.meta);
|
|
11
|
+
const DEFAULT_ATLAS_FRAME_DURATION = 100;
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
function parseAtlasFrameDuration(value) {
|
|
14
|
+
const frameDuration = Number(value);
|
|
15
|
+
return Number.isFinite(frameDuration) ? frameDuration : null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function resolveAtlasFrameDuration(ObjectLayer, itemKey) {
|
|
19
|
+
if (!itemKey) return DEFAULT_ATLAS_FRAME_DURATION;
|
|
20
|
+
|
|
21
|
+
const objectLayer = await ObjectLayer.findOne({ 'data.item.id': itemKey })
|
|
22
|
+
.select({ _id: 1, objectLayerRenderFramesId: 1 })
|
|
23
|
+
.populate('objectLayerRenderFramesId', { _id: 1, frame_duration: 1 })
|
|
24
|
+
.lean();
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
parseAtlasFrameDuration(objectLayer?.objectLayerRenderFramesId?.frame_duration) || DEFAULT_ATLAS_FRAME_DURATION
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function withResolvedAtlasFrameDuration(doc, ObjectLayer) {
|
|
32
|
+
if (!doc?.metadata) return doc;
|
|
33
|
+
|
|
34
|
+
const frameDuration = parseAtlasFrameDuration(doc.metadata.frame_duration);
|
|
35
|
+
if (frameDuration !== null) {
|
|
36
|
+
return {
|
|
37
|
+
...doc,
|
|
38
|
+
metadata: {
|
|
39
|
+
...doc.metadata,
|
|
40
|
+
frame_duration: frameDuration,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
...doc,
|
|
47
|
+
metadata: {
|
|
48
|
+
...doc.metadata,
|
|
49
|
+
frame_duration: await resolveAtlasFrameDuration(ObjectLayer, doc.metadata.itemKey),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
class AtlasSpriteSheetService {
|
|
55
|
+
static blob = async (req, res, options) => {
|
|
56
|
+
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
57
|
+
const AtlasSpriteSheet =
|
|
58
|
+
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
|
|
59
|
+
/** @type {import('../file/file.model.js').FileModel} */
|
|
60
|
+
const File = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.File;
|
|
61
|
+
|
|
62
|
+
const itemKey = req.params.itemKey;
|
|
63
|
+
const atlasDoc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': itemKey }).lean();
|
|
64
|
+
if (!atlasDoc) throw new Error(`Atlas not found for itemKey: ${itemKey}`);
|
|
65
|
+
|
|
66
|
+
const fileDoc = await File.findById(atlasDoc.fileId);
|
|
67
|
+
if (!fileDoc || !fileDoc.data) throw new Error(`File not found for atlas itemKey: ${itemKey}`);
|
|
68
|
+
|
|
69
|
+
return { buffer: Buffer.from(fileDoc.data), mimetype: fileDoc.mimetype || 'image/png', name: fileDoc.name };
|
|
70
|
+
};
|
|
71
|
+
static generate = async (req, res, options, generateOptions = {}) => {
|
|
14
72
|
/** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
|
|
15
73
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
16
74
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
@@ -53,9 +111,6 @@ const AtlasSpriteSheetService = {
|
|
|
53
111
|
);
|
|
54
112
|
if (ipfsResult) {
|
|
55
113
|
atlasCid = ipfsResult.cid;
|
|
56
|
-
if (userId) {
|
|
57
|
-
await createPinRecord({ cid: atlasCid, userId, options });
|
|
58
|
-
}
|
|
59
114
|
logger.info(`Atlas sprite sheet pinned to IPFS – CID: ${atlasCid}`);
|
|
60
115
|
}
|
|
61
116
|
} catch (ipfsError) {
|
|
@@ -71,9 +126,6 @@ const AtlasSpriteSheetService = {
|
|
|
71
126
|
);
|
|
72
127
|
if (metadataIpfsResult) {
|
|
73
128
|
atlasMetadataCid = metadataIpfsResult.cid;
|
|
74
|
-
if (userId) {
|
|
75
|
-
await createPinRecord({ cid: atlasMetadataCid, userId, options });
|
|
76
|
-
}
|
|
77
129
|
logger.info(`Atlas metadata pinned to IPFS – CID: ${atlasMetadataCid}`);
|
|
78
130
|
}
|
|
79
131
|
} catch (ipfsError) {
|
|
@@ -99,6 +151,39 @@ const AtlasSpriteSheetService = {
|
|
|
99
151
|
}).save();
|
|
100
152
|
}
|
|
101
153
|
|
|
154
|
+
// Register CIDs in the IPFS registry now that atlasDoc._id is known.
|
|
155
|
+
if (atlasCid) {
|
|
156
|
+
try {
|
|
157
|
+
await createPinRecord({
|
|
158
|
+
cid: atlasCid,
|
|
159
|
+
resourceType: 'atlas-sprite-sheet',
|
|
160
|
+
mfsPath: `/object-layer/${itemKey}/${itemKey}_atlas_sprite_sheet.png`,
|
|
161
|
+
options,
|
|
162
|
+
});
|
|
163
|
+
} catch (e) {
|
|
164
|
+
logger.warn('IPFS registry update failed (atlas PNG):', e.message);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (atlasMetadataCid) {
|
|
168
|
+
try {
|
|
169
|
+
await createPinRecord({
|
|
170
|
+
cid: atlasMetadataCid,
|
|
171
|
+
resourceType: 'atlas-metadata',
|
|
172
|
+
mfsPath: `/object-layer/${itemKey}/${itemKey}_atlas_sprite_sheet_metadata.json`,
|
|
173
|
+
options,
|
|
174
|
+
});
|
|
175
|
+
} catch (e) {
|
|
176
|
+
logger.warn('IPFS registry update failed (atlas metadata):', e.message);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// When skipObjectLayerSave is set, return CIDs without mutating the OL document.
|
|
181
|
+
// This enables cut-over consistency: callers stage CIDs in memory and write the
|
|
182
|
+
// ObjectLayer atomically only after all CIDs are computed.
|
|
183
|
+
if (generateOptions.skipObjectLayerSave) {
|
|
184
|
+
return { atlasDoc, atlasCid, atlasMetadataCid };
|
|
185
|
+
}
|
|
186
|
+
|
|
102
187
|
objectLayer.atlasSpriteSheetId = atlasDoc._id;
|
|
103
188
|
if (!objectLayer.data.render) objectLayer.data.render = {};
|
|
104
189
|
objectLayer.data.render.cid = atlasCid;
|
|
@@ -107,8 +192,8 @@ const AtlasSpriteSheetService = {
|
|
|
107
192
|
await objectLayer.save();
|
|
108
193
|
|
|
109
194
|
return atlasDoc;
|
|
110
|
-
}
|
|
111
|
-
deleteByObjectLayerId
|
|
195
|
+
};
|
|
196
|
+
static deleteByObjectLayerId = async (req, res, options) => {
|
|
112
197
|
/** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
|
|
113
198
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
114
199
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
@@ -166,14 +251,14 @@ const AtlasSpriteSheetService = {
|
|
|
166
251
|
}
|
|
167
252
|
|
|
168
253
|
return { success: true };
|
|
169
|
-
}
|
|
170
|
-
post
|
|
254
|
+
};
|
|
255
|
+
static post = async (req, res, options) => {
|
|
171
256
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
172
257
|
const AtlasSpriteSheet =
|
|
173
258
|
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
|
|
174
259
|
return await new AtlasSpriteSheet(req.body).save();
|
|
175
|
-
}
|
|
176
|
-
get
|
|
260
|
+
};
|
|
261
|
+
static get = async (req, res, options) => {
|
|
177
262
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
178
263
|
const AtlasSpriteSheet =
|
|
179
264
|
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
|
|
@@ -197,14 +282,57 @@ const AtlasSpriteSheetService = {
|
|
|
197
282
|
|
|
198
283
|
const totalPages = Math.ceil(total / limit);
|
|
199
284
|
return { data, total, page, totalPages };
|
|
200
|
-
}
|
|
201
|
-
|
|
285
|
+
};
|
|
286
|
+
// Returns atlas metadata (layout + frames) for the client.
|
|
287
|
+
// Client fetches this once per itemKey, caches it, then fetches the PNG blob.
|
|
288
|
+
static getMetadata = async (req, res, options) => {
|
|
289
|
+
/** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
|
|
290
|
+
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
291
|
+
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
292
|
+
const AtlasSpriteSheet =
|
|
293
|
+
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
|
|
294
|
+
|
|
295
|
+
if (req.params.itemKey) {
|
|
296
|
+
const doc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': req.params.itemKey })
|
|
297
|
+
.select(AtlasSpriteSheetDto.select.getMetadataOnly())
|
|
298
|
+
.lean();
|
|
299
|
+
if (!doc) throw new Error(`Atlas not found for itemKey: ${req.params.itemKey}`);
|
|
300
|
+
return await withResolvedAtlasFrameDuration(doc, ObjectLayer);
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
|
|
304
|
+
|
|
305
|
+
const [data, total] = await Promise.all([
|
|
306
|
+
AtlasSpriteSheet.find(query)
|
|
307
|
+
.select(AtlasSpriteSheetDto.select.getMetadataOnly())
|
|
308
|
+
.sort(sort)
|
|
309
|
+
.limit(limit)
|
|
310
|
+
.skip(skip)
|
|
311
|
+
.lean(),
|
|
312
|
+
AtlasSpriteSheet.countDocuments(query),
|
|
313
|
+
]);
|
|
314
|
+
|
|
315
|
+
const totalPages = Math.ceil(total / limit);
|
|
316
|
+
return {
|
|
317
|
+
data: data.map((doc) => ({
|
|
318
|
+
...doc,
|
|
319
|
+
metadata: {
|
|
320
|
+
...doc.metadata,
|
|
321
|
+
frame_duration: parseAtlasFrameDuration(doc?.metadata?.frame_duration) || DEFAULT_ATLAS_FRAME_DURATION,
|
|
322
|
+
},
|
|
323
|
+
})),
|
|
324
|
+
total,
|
|
325
|
+
page,
|
|
326
|
+
totalPages,
|
|
327
|
+
};
|
|
328
|
+
};
|
|
329
|
+
static put = async (req, res, options) => {
|
|
202
330
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
203
331
|
const AtlasSpriteSheet =
|
|
204
332
|
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
|
|
205
333
|
return await AtlasSpriteSheet.findByIdAndUpdate(req.params.id, req.body);
|
|
206
|
-
}
|
|
207
|
-
delete
|
|
334
|
+
};
|
|
335
|
+
static delete = async (req, res, options) => {
|
|
208
336
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
209
337
|
const AtlasSpriteSheet =
|
|
210
338
|
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.AtlasSpriteSheet;
|
|
@@ -256,7 +384,7 @@ const AtlasSpriteSheetService = {
|
|
|
256
384
|
}
|
|
257
385
|
return await AtlasSpriteSheet.deleteMany();
|
|
258
386
|
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
387
|
+
};
|
|
388
|
+
}
|
|
261
389
|
|
|
262
390
|
export { AtlasSpriteSheetService };
|
|
@@ -3,8 +3,8 @@ import { CoreService } from './core.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class CoreController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await CoreService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const CoreController = {
|
|
|
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 CoreService.put(req, res, options);
|
|
25
25
|
return res.status(200).json({
|
|
@@ -33,8 +33,8 @@ const CoreController = {
|
|
|
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 CoreService.get(req, res, options);
|
|
40
40
|
return res.status(200).json({
|
|
@@ -48,8 +48,8 @@ const CoreController = {
|
|
|
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 CoreService.delete(req, res, options);
|
|
55
55
|
return res.status(200).json({
|
|
@@ -63,7 +63,7 @@ const CoreController = {
|
|
|
63
63
|
message: error.message,
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
68
|
|
|
69
69
|
export { CoreController };
|
|
@@ -4,27 +4,27 @@ import { shellExec } from '../../server/process.js';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
post
|
|
7
|
+
class CoreService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./core.model.js').CoreModel} */
|
|
10
10
|
const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
|
|
11
11
|
return await new Core(req.body).save();
|
|
12
|
-
}
|
|
13
|
-
get
|
|
12
|
+
};
|
|
13
|
+
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./core.model.js').CoreModel} */
|
|
15
15
|
const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
|
|
16
16
|
return await Core.findById(req.params.id);
|
|
17
|
-
}
|
|
18
|
-
put
|
|
17
|
+
};
|
|
18
|
+
static put = async (req, res, options) => {
|
|
19
19
|
/** @type {import('./core.model.js').CoreModel} */
|
|
20
20
|
const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
|
|
21
21
|
return await Core.findByIdAndUpdate(req.params.id, req.body);
|
|
22
|
-
}
|
|
23
|
-
delete
|
|
22
|
+
};
|
|
23
|
+
static delete = async (req, res, options) => {
|
|
24
24
|
/** @type {import('./core.model.js').CoreModel} */
|
|
25
25
|
const Core = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Core;
|
|
26
26
|
return await Core.findByIdAndDelete(req.params.id);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
29
|
|
|
30
30
|
export { CoreService };
|
|
@@ -2,8 +2,8 @@ import { loggerFactory } from '../../server/logger.js';
|
|
|
2
2
|
import { CryptoService } from './crypto.service.js';
|
|
3
3
|
const logger = loggerFactory(import.meta);
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
post
|
|
5
|
+
class CryptoController {
|
|
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 CryptoController = {
|
|
|
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 CryptoController = {
|
|
|
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 CryptoService.delete(req, res, options);
|
|
37
37
|
return res.status(200).json({
|
|
@@ -45,7 +45,7 @@ const CryptoController = {
|
|
|
45
45
|
message: error.message,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
50
|
|
|
51
51
|
export { CryptoController };
|
|
@@ -3,8 +3,8 @@ import crypto from 'crypto';
|
|
|
3
3
|
import { DataBaseProvider } from '../../db/DataBaseProvider.js';
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class CryptoService {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
/** @type {import('./crypto.model.js').CryptoModel} */
|
|
9
9
|
const Crypto = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Crypto;
|
|
10
10
|
/** @type {import('../user/user.model.js').UserModel} */
|
|
@@ -48,17 +48,17 @@ const CryptoService = {
|
|
|
48
48
|
return publicKey;
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
}
|
|
52
|
-
get
|
|
51
|
+
};
|
|
52
|
+
static get = async (req, res, options) => {
|
|
53
53
|
switch (req.params.id) {
|
|
54
54
|
default:
|
|
55
55
|
}
|
|
56
|
-
}
|
|
57
|
-
delete
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
58
|
switch (req.params.id) {
|
|
59
59
|
default:
|
|
60
60
|
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
63
|
|
|
64
64
|
export { CryptoService };
|