cyberia 3.2.5 → 3.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/engine-cyberia.cd.yml +8 -2
- package/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +2 -2
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +563 -1
- package/CLI-HELP.md +130 -34
- package/Dockerfile +0 -4
- package/README.md +194 -607
- package/bin/build.js +42 -12
- package/bin/build.template.js +187 -0
- package/bin/cyberia.js +1367 -281
- package/bin/deploy.js +582 -3
- package/bin/index.js +1367 -281
- package/bump.config.js +26 -0
- package/conf.js +195 -111
- package/deployment.yaml +6 -222
- package/hardhat/package-lock.json +118 -149
- package/hardhat/package.json +5 -4
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +6 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +138 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +45 -24
- package/proxy.yaml +10 -118
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +83 -48
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +15 -15
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.router.js +18 -12
- package/src/api/crypto/crypto.service.js +11 -11
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +31 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
- package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
- package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
- package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +18 -49
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.router.js +35 -30
- package/src/api/cyberia-map/cyberia-map.service.js +17 -17
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +31 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +31 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +15 -15
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +45 -43
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.router.js +29 -24
- package/src/api/instance/instance.service.js +16 -16
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.router.js +21 -16
- package/src/api/ipfs/ipfs.service.js +22 -36
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.router.js +512 -507
- package/src/api/object-layer/object-layer.service.js +29 -26
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.router.js +17 -12
- package/src/api/test/test.service.js +8 -8
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +103 -55
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +732 -217
- package/src/cli/db.js +106 -62
- package/src/cli/deploy.js +260 -149
- package/src/cli/fs.js +90 -9
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +106 -16
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +336 -86
- package/src/cli/repository.js +136 -53
- package/src/cli/run.js +599 -76
- package/src/cli/secrets.js +11 -2
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/cli/test.js +9 -3
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +30 -36
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +40 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +544 -219
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +81 -177
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +211 -276
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +83 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
- package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
- package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
- package/src/client/ssr/{pages → views}/Test.js +2 -2
- package/src/client/sw/core.sw.js +274 -0
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/grpc/cyberia/grpc-server.js +185 -105
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +101 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
- package/src/runtime/cyberia-server/Dockerfile +62 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +46 -47
- package/src/server/client-build.js +371 -132
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +91 -87
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +192 -45
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +34 -8
- package/src/server/valkey.js +143 -235
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/bin/file.js +0 -196
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -223
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import { CryptoController } from './crypto.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
+
|
|
4
5
|
const logger = loggerFactory(import.meta);
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
router
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
class CryptoRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(`/:id`, async (req, res) => await CryptoController.post(req, res, options));
|
|
15
|
+
router.post(`/`, options.authMiddleware, async (req, res) => await CryptoController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`, async (req, res) => await CryptoController.get(req, res, options));
|
|
17
|
+
router.get(`/`, async (req, res) => await CryptoController.get(req, res, options));
|
|
18
|
+
router.delete(`/:id`, async (req, res) => await CryptoController.delete(req, res, options));
|
|
19
|
+
router.delete(`/`, async (req, res) => await CryptoController.delete(req, res, options));
|
|
20
|
+
return router;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
17
23
|
|
|
18
|
-
const ApiRouter = CryptoRouter;
|
|
24
|
+
const ApiRouter = (options) => CryptoRouter.router(options);
|
|
19
25
|
|
|
20
26
|
export { ApiRouter, CryptoRouter };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import crypto from 'crypto';
|
|
3
|
-
import {
|
|
3
|
+
import { DataBaseProviderService } 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
|
-
const Crypto =
|
|
9
|
+
const Crypto = DataBaseProviderService.getModel("Crypto", options);
|
|
10
10
|
/** @type {import('../user/user.model.js').UserModel} */
|
|
11
|
-
const User =
|
|
11
|
+
const User = DataBaseProviderService.getModel("User", options);
|
|
12
12
|
|
|
13
13
|
switch (req.params.id) {
|
|
14
14
|
case 'verify': {
|
|
@@ -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 };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaActionService } from './cyberia-action.service.js';
|
|
3
|
+
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
|
|
6
|
+
class CyberiaActionController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
|
+
try {
|
|
9
|
+
const result = await CyberiaActionService.post(req, res, options);
|
|
10
|
+
return res.status(200).json({
|
|
11
|
+
status: 'success',
|
|
12
|
+
data: result,
|
|
13
|
+
});
|
|
14
|
+
} catch (error) {
|
|
15
|
+
logger.error(error, error.stack);
|
|
16
|
+
return res.status(400).json({
|
|
17
|
+
status: 'error',
|
|
18
|
+
message: error.message,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
|
+
try {
|
|
24
|
+
const { page, limit } = req.query;
|
|
25
|
+
const result = await CyberiaActionService.get(
|
|
26
|
+
{ ...req, query: { ...req.query, page: parseInt(page), limit: parseInt(limit) } },
|
|
27
|
+
res,
|
|
28
|
+
options,
|
|
29
|
+
);
|
|
30
|
+
return res.status(200).json({
|
|
31
|
+
status: 'success',
|
|
32
|
+
data: result,
|
|
33
|
+
});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
logger.error(error, error.stack);
|
|
36
|
+
return res.status(400).json({
|
|
37
|
+
status: 'error',
|
|
38
|
+
message: error.message,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await CyberiaActionService.put(req, res, options);
|
|
45
|
+
return res.status(200).json({
|
|
46
|
+
status: 'success',
|
|
47
|
+
data: result,
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
logger.error(error, error.stack);
|
|
51
|
+
return res.status(400).json({
|
|
52
|
+
status: 'error',
|
|
53
|
+
message: error.message,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await CyberiaActionService.delete(req, res, options);
|
|
60
|
+
return res.status(200).json({
|
|
61
|
+
status: 'success',
|
|
62
|
+
data: result,
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
logger.error(error, error.stack);
|
|
66
|
+
return res.status(400).json({
|
|
67
|
+
status: 'error',
|
|
68
|
+
message: error.message,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { CyberiaActionController };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Schema, model } from 'mongoose';
|
|
2
|
+
import { CYBERIA_ACTION_TYPES } from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
3
|
+
|
|
4
|
+
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
5
|
+
|
|
6
|
+
const CyberiaActionSchema = new Schema(
|
|
7
|
+
{
|
|
8
|
+
// Spatial origin: the NPC/entity cell that provides this action.
|
|
9
|
+
// Matched against map entity initCellX/initCellY during instance init
|
|
10
|
+
// and assignable from ObjectLayerEngineModal.
|
|
11
|
+
sourceMapCode: { type: String, trim: true },
|
|
12
|
+
sourceCellX: { type: Number },
|
|
13
|
+
sourceCellY: { type: Number },
|
|
14
|
+
|
|
15
|
+
// ── Identity ──────────────────────────────────────────────────────────
|
|
16
|
+
code: { type: String, required: true, trim: true },
|
|
17
|
+
type: {
|
|
18
|
+
type: String,
|
|
19
|
+
required: true,
|
|
20
|
+
trim: true,
|
|
21
|
+
enum: CYBERIA_ACTION_TYPES,
|
|
22
|
+
},
|
|
23
|
+
label: { type: String, trim: true, default: '' },
|
|
24
|
+
|
|
25
|
+
// The item ID of the NPC/entity that provides this action.
|
|
26
|
+
// Used to match 'talk' quest objectives: a step with { type: 'talk', itemId: X }
|
|
27
|
+
// is satisfied when the player triggers an action where provideItemId === X.
|
|
28
|
+
// Typically the entity's active skin ObjectLayer item ID (e.g. 'wason', 'alex').
|
|
29
|
+
provideItemId: { type: String, trim: true, default: '' },
|
|
30
|
+
|
|
31
|
+
// Quest code granted to the player on their first interaction with this action.
|
|
32
|
+
// Used by 'quest-talk' NPCs to start a quest chain on first contact.
|
|
33
|
+
// Empty string = no quest granted.
|
|
34
|
+
grantQuestCode: { type: String, trim: true, default: '' },
|
|
35
|
+
|
|
36
|
+
// ── Dialogue ──────────────────────────────────────────────────────────
|
|
37
|
+
// General greeting/intro dialogue shown when the action button is tapped.
|
|
38
|
+
dialogCode: { type: String, trim: true, default: '' },
|
|
39
|
+
|
|
40
|
+
// Ordered list of CyberiaDialogue codes the player must view to satisfy
|
|
41
|
+
// a 'talk' quest objective linked to this action via provideItemId.
|
|
42
|
+
// For simple actions this may match dialogCode; for multi-stage NPCs it can diverge.
|
|
43
|
+
questDialogueCodes: [{ type: String, trim: true }],
|
|
44
|
+
|
|
45
|
+
// ── Shop payload (type="shop") ─────────────────────────────────────────
|
|
46
|
+
shopItems: [
|
|
47
|
+
{
|
|
48
|
+
itemId: { type: String, required: true, trim: true },
|
|
49
|
+
priceItemId: { type: String, default: 'coin', trim: true },
|
|
50
|
+
priceQty: { type: Number, default: 1, min: 0 },
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
|
|
54
|
+
// ── Craft payload (type="craft") ───────────────────────────────────────
|
|
55
|
+
craftRecipes: [
|
|
56
|
+
{
|
|
57
|
+
outputItems: [
|
|
58
|
+
{
|
|
59
|
+
itemId: { type: String, required: true, trim: true },
|
|
60
|
+
qty: { type: Number, default: 1, min: 1 },
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
ingredients: [
|
|
64
|
+
{
|
|
65
|
+
itemId: { type: String, required: true, trim: true },
|
|
66
|
+
qty: { type: Number, default: 1, min: 1 },
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
|
|
72
|
+
// ── Storage payload (type="storage") ──────────────────────────────────
|
|
73
|
+
storageSlots: { type: Number, default: 0, min: 0 },
|
|
74
|
+
},
|
|
75
|
+
{ timestamps: true },
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
CyberiaActionSchema.index({ code: 1 }, { unique: true });
|
|
79
|
+
CyberiaActionSchema.index({ provideItemId: 1 });
|
|
80
|
+
CyberiaActionSchema.index({ grantQuestCode: 1 }, { sparse: true });
|
|
81
|
+
CyberiaActionSchema.index({ sourceMapCode: 1, sourceCellX: 1, sourceCellY: 1 });
|
|
82
|
+
|
|
83
|
+
const CyberiaActionModel = model('CyberiaAction', CyberiaActionSchema);
|
|
84
|
+
|
|
85
|
+
const ProviderSchema = CyberiaActionSchema;
|
|
86
|
+
|
|
87
|
+
export { CyberiaActionSchema, CyberiaActionModel, ProviderSchema };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaActionController } from './cyberia-action.controller.js';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
|
|
5
|
+
const logger = loggerFactory(import.meta);
|
|
6
|
+
|
|
7
|
+
class CyberiaActionRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(`/:id`, async (req, res) => await CyberiaActionController.post(req, res, options));
|
|
15
|
+
router.post(`/`, async (req, res) => await CyberiaActionController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`,
|
|
17
|
+
// options.authMiddleware,
|
|
18
|
+
async (req, res) => await CyberiaActionController.get(req, res, options),
|
|
19
|
+
);
|
|
20
|
+
router.get(`/`, async (req, res) => await CyberiaActionController.get(req, res, options));
|
|
21
|
+
router.put(`/:id`, async (req, res) => await CyberiaActionController.put(req, res, options));
|
|
22
|
+
router.put(`/`, async (req, res) => await CyberiaActionController.put(req, res, options));
|
|
23
|
+
router.delete(`/:id`, async (req, res) => await CyberiaActionController.delete(req, res, options));
|
|
24
|
+
router.delete(`/`, async (req, res) => await CyberiaActionController.delete(req, res, options));
|
|
25
|
+
return router;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const ApiRouter = (options) => CyberiaActionRouter.router(options);
|
|
30
|
+
|
|
31
|
+
export { ApiRouter, CyberiaActionRouter };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
3
|
+
import { DataQuery } from '../../server/data-query.js';
|
|
4
|
+
|
|
5
|
+
const logger = loggerFactory(import.meta);
|
|
6
|
+
|
|
7
|
+
class CyberiaActionService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
10
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
11
|
+
return await new CyberiaAction(req.body).save();
|
|
12
|
+
};
|
|
13
|
+
static get = async (req, res, options) => {
|
|
14
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
15
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
16
|
+
if (req.params.id) return await CyberiaAction.findById(req.params.id);
|
|
17
|
+
|
|
18
|
+
// Parse query parameters using DataQuery helper
|
|
19
|
+
const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
|
|
20
|
+
|
|
21
|
+
const [data, total] = await Promise.all([
|
|
22
|
+
CyberiaAction.find(query).sort(sort).limit(limit).skip(skip),
|
|
23
|
+
CyberiaAction.countDocuments(query),
|
|
24
|
+
]);
|
|
25
|
+
|
|
26
|
+
const totalPages = Math.ceil(total / limit);
|
|
27
|
+
return { data, total, page, totalPages };
|
|
28
|
+
};
|
|
29
|
+
static put = async (req, res, options) => {
|
|
30
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
31
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
32
|
+
return await CyberiaAction.findByIdAndUpdate(req.params.id, req.body);
|
|
33
|
+
};
|
|
34
|
+
static delete = async (req, res, options) => {
|
|
35
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
36
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
37
|
+
if (req.params.id) return await CyberiaAction.findByIdAndDelete(req.params.id);
|
|
38
|
+
else return await CyberiaAction.deleteMany();
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export { CyberiaActionService };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaClientHintsService } from './cyberia-client-hints.service.js';
|
|
3
|
+
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
|
|
6
|
+
class CyberiaClientHintsController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
|
+
try {
|
|
9
|
+
const result = await CyberiaClientHintsService.post(req, res, options);
|
|
10
|
+
return res.status(200).json({
|
|
11
|
+
status: 'success',
|
|
12
|
+
data: result,
|
|
13
|
+
});
|
|
14
|
+
} catch (error) {
|
|
15
|
+
logger.error(error, error.stack);
|
|
16
|
+
return res.status(400).json({
|
|
17
|
+
status: 'error',
|
|
18
|
+
message: error.message,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
|
+
try {
|
|
24
|
+
const { page, limit } = req.query;
|
|
25
|
+
const result = await CyberiaClientHintsService.get(
|
|
26
|
+
{ ...req, query: { ...req.query, page: parseInt(page), limit: parseInt(limit) } },
|
|
27
|
+
res,
|
|
28
|
+
options,
|
|
29
|
+
);
|
|
30
|
+
return res.status(200).json({
|
|
31
|
+
status: 'success',
|
|
32
|
+
data: result,
|
|
33
|
+
});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
logger.error(error, error.stack);
|
|
36
|
+
return res.status(400).json({
|
|
37
|
+
status: 'error',
|
|
38
|
+
message: error.message,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await CyberiaClientHintsService.put(req, res, options);
|
|
45
|
+
return res.status(200).json({
|
|
46
|
+
status: 'success',
|
|
47
|
+
data: result,
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
logger.error(error, error.stack);
|
|
51
|
+
return res.status(400).json({
|
|
52
|
+
status: 'error',
|
|
53
|
+
message: error.message,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await CyberiaClientHintsService.delete(req, res, options);
|
|
60
|
+
return res.status(200).json({
|
|
61
|
+
status: 'success',
|
|
62
|
+
data: result,
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
logger.error(error, error.stack);
|
|
66
|
+
return res.status(400).json({
|
|
67
|
+
status: 'error',
|
|
68
|
+
message: error.message,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { CyberiaClientHintsController };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mongoose model for `CyberiaClientHints`.
|
|
3
|
+
*
|
|
4
|
+
* Dedicated collection for per-instance presentation overrides.
|
|
5
|
+
*
|
|
6
|
+
* Ownership:
|
|
7
|
+
* - Read by: cyberia-client (via /api/cyberia-client-hints/:code), CMS UIs.
|
|
8
|
+
* - Written by: CMS / editor flows. The Cyberia simulation server
|
|
9
|
+
* never reads or writes this collection.
|
|
10
|
+
* - Cacheable: yes — the service layer keeps an in-memory TTL cache.
|
|
11
|
+
*
|
|
12
|
+
* Schema scope: purely visual fields. Anything that influences simulation
|
|
13
|
+
* belongs in `CyberiaInstanceConf`.
|
|
14
|
+
*
|
|
15
|
+
* @module src/api/cyberia-client-hints/cyberia-client-hints.model.js
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { Schema, model } from 'mongoose';
|
|
19
|
+
|
|
20
|
+
const ColorRgbaSchema = new Schema(
|
|
21
|
+
{
|
|
22
|
+
r: { type: Number, default: 0 },
|
|
23
|
+
g: { type: Number, default: 0 },
|
|
24
|
+
b: { type: Number, default: 0 },
|
|
25
|
+
a: { type: Number, default: 255 },
|
|
26
|
+
},
|
|
27
|
+
{ _id: false },
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const PaletteEntrySchema = new Schema(
|
|
31
|
+
{
|
|
32
|
+
key: { type: String, required: true },
|
|
33
|
+
r: { type: Number, default: 0 },
|
|
34
|
+
g: { type: Number, default: 0 },
|
|
35
|
+
b: { type: Number, default: 0 },
|
|
36
|
+
a: { type: Number, default: 255 },
|
|
37
|
+
},
|
|
38
|
+
{ _id: false },
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
const StatusIconHintSchema = new Schema(
|
|
42
|
+
{
|
|
43
|
+
id: { type: Number, required: true },
|
|
44
|
+
iconId: { type: String, default: '' },
|
|
45
|
+
bounce: { type: Boolean, default: false },
|
|
46
|
+
borderColor: { type: ColorRgbaSchema, default: () => ({ r: 100, g: 100, b: 100, a: 200 }) },
|
|
47
|
+
},
|
|
48
|
+
{ _id: false },
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const EntityColorKeySchema = new Schema(
|
|
52
|
+
{
|
|
53
|
+
entityType: { type: String, required: true },
|
|
54
|
+
colorKey: { type: String, required: true },
|
|
55
|
+
},
|
|
56
|
+
{ _id: false },
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
const CyberiaClientHintsSchema = new Schema(
|
|
60
|
+
{
|
|
61
|
+
// Instance code this hint set is scoped to. Matches CyberiaInstance.code
|
|
62
|
+
// and CyberiaInstanceConf.instanceCode. Indexed and unique to make the
|
|
63
|
+
// service-layer cache a 1-to-1 keyed lookup.
|
|
64
|
+
code: { type: String, required: true, unique: true, index: true },
|
|
65
|
+
|
|
66
|
+
// Optional palette overrides. Keys not present here fall back to the
|
|
67
|
+
// client's compile-time defaults.
|
|
68
|
+
palette: { type: [PaletteEntrySchema], default: [] },
|
|
69
|
+
|
|
70
|
+
// Optional per-entity-type color-key overrides.
|
|
71
|
+
entityColorKeys: { type: [EntityColorKeySchema], default: [] },
|
|
72
|
+
|
|
73
|
+
// Optional status-icon visual overrides (id → iconId + borderColor).
|
|
74
|
+
statusIcons: { type: [StatusIconHintSchema], default: [] },
|
|
75
|
+
|
|
76
|
+
// Camera, viewport, and cell-sizing tunings — null/undefined means
|
|
77
|
+
// "use the SharedDefaultsCyberia.RENDER_DEFAULTS value".
|
|
78
|
+
cellSize: { type: Number, default: null },
|
|
79
|
+
defaultObjWidth: { type: Number, default: null },
|
|
80
|
+
defaultObjHeight: { type: Number, default: null },
|
|
81
|
+
cameraSmoothing: { type: Number, default: null },
|
|
82
|
+
cameraZoom: { type: Number, default: null },
|
|
83
|
+
defaultWidthScreenFactor: { type: Number, default: null },
|
|
84
|
+
defaultHeightScreenFactor: { type: Number, default: null },
|
|
85
|
+
interpolationMs: { type: Number, default: null },
|
|
86
|
+
devUi: { type: Boolean, default: null },
|
|
87
|
+
},
|
|
88
|
+
{ timestamps: true },
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const CyberiaClientHintsModel = model('CyberiaClientHints', CyberiaClientHintsSchema);
|
|
92
|
+
|
|
93
|
+
const ProviderSchema = CyberiaClientHintsSchema;
|
|
94
|
+
|
|
95
|
+
export {
|
|
96
|
+
CyberiaClientHintsSchema,
|
|
97
|
+
CyberiaClientHintsModel,
|
|
98
|
+
ProviderSchema,
|
|
99
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module src/api/cyberia-client-hints
|
|
3
|
+
*
|
|
4
|
+
* Client presentation hints — read-only REST endpoint.
|
|
5
|
+
*
|
|
6
|
+
* Purpose
|
|
7
|
+
* -------
|
|
8
|
+
* The cyberia-server (Go authoritative simulation) and the WS init payload
|
|
9
|
+
* carry *only* simulation contracts. Client-render policy (palette, camera
|
|
10
|
+
* defaults, status-icon visuals, interpolation window, dev-overlay flag)
|
|
11
|
+
* lives off the simulation path entirely.
|
|
12
|
+
*
|
|
13
|
+
* This endpoint exposes optional per-instance overrides of those values.
|
|
14
|
+
* The client is required to function with no calls to this endpoint at
|
|
15
|
+
* all (it ships built-in defaults that match the canonical engine
|
|
16
|
+
* defaults 1-to-1 — see cyberia-client/src/domain/presentation_defaults.h).
|
|
17
|
+
*
|
|
18
|
+
* Endpoint
|
|
19
|
+
* --------
|
|
20
|
+
* GET /api/cyberia-client-hints/:instanceCode
|
|
21
|
+
* -> 200 { palette, entityColorKeys, statusIcons, cameraSmoothing,
|
|
22
|
+
* cameraZoom, defaultWidthScreenFactor,
|
|
23
|
+
* defaultHeightScreenFactor, interpolationMs, devUi }
|
|
24
|
+
* -> 404 if no instance with that code exists in the database — the
|
|
25
|
+
* client falls back to its built-in defaults on 404 (this is
|
|
26
|
+
* the normal path for stateless servers / fresh deployments).
|
|
27
|
+
*
|
|
28
|
+
* GET /api/cyberia-client-hints/
|
|
29
|
+
* -> 200 canonical defaults — same shape as above, no DB read.
|
|
30
|
+
*
|
|
31
|
+
* What it intentionally does NOT do
|
|
32
|
+
* ---------------------------------
|
|
33
|
+
* - It does not touch gameplay state (no entity, map, economy, skill,
|
|
34
|
+
* equipment, or stat fields).
|
|
35
|
+
* - It is not consumed by cyberia-server; the Go process never calls
|
|
36
|
+
* this endpoint.
|
|
37
|
+
* - It is not authenticated. Presentation hints are not secret.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
import express from 'express';
|
|
41
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
42
|
+
import { CYBERIA_CLIENT_HINTS_DEFAULTS } from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
43
|
+
import { resolveClientHints } from './cyberia-client-hints.service.js';
|
|
44
|
+
|
|
45
|
+
const logger = loggerFactory(import.meta);
|
|
46
|
+
|
|
47
|
+
class CyberiaClientHintsRouter {
|
|
48
|
+
/**
|
|
49
|
+
* @param {import('../types.js').RouterOptions} options
|
|
50
|
+
* @returns {import('express').Router}
|
|
51
|
+
*/
|
|
52
|
+
static router(options) {
|
|
53
|
+
const router = express.Router();
|
|
54
|
+
|
|
55
|
+
// GET /:code -> resolved hints.
|
|
56
|
+
// Resolution order is documented in cyberia-client-hints.service.js:
|
|
57
|
+
// 1. In-memory TTL cache.
|
|
58
|
+
// 2. CyberiaClientHints collection (preferred).
|
|
59
|
+
// 3. Legacy presentation fields on CyberiaInstanceConf (back-compat).
|
|
60
|
+
// 4. Canonical client defaults (never cached so a later DB insert wins).
|
|
61
|
+
router.get('/:code', async (req, res) => {
|
|
62
|
+
try {
|
|
63
|
+
if (req && req.headers && req.headers.origin) {
|
|
64
|
+
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
65
|
+
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
66
|
+
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
67
|
+
const { data, source } = await resolveClientHints(req.params.code, {
|
|
68
|
+
host: options.host || 'default',
|
|
69
|
+
path: options.path || '/',
|
|
70
|
+
});
|
|
71
|
+
// Surface the resolution source as a non-authoritative header so
|
|
72
|
+
// operators can see whether the runtime fetched from the new
|
|
73
|
+
// collection, the compatibility read on instance-conf, the cache, or defaults.
|
|
74
|
+
res.setHeader('X-Cyberia-Hints-Source', source);
|
|
75
|
+
return res.status(200).json({ status: 'success', data });
|
|
76
|
+
} catch (err) {
|
|
77
|
+
logger.error('cyberia-client-hints GET failed:', err);
|
|
78
|
+
return res.status(500).json({ status: 'error', message: err.message });
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// GET / -> canonical defaults. No DB read. Documentation/diagnostic.
|
|
83
|
+
router.get('/', async (_req, res) => {
|
|
84
|
+
if (_req && _req.headers && _req.headers.origin) {
|
|
85
|
+
res.set('Access-Control-Allow-Origin', _req.headers.origin);
|
|
86
|
+
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
87
|
+
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
88
|
+
res.setHeader('X-Cyberia-Hints-Source', 'defaults');
|
|
89
|
+
return res.status(200).json({ status: 'success', data: CYBERIA_CLIENT_HINTS_DEFAULTS });
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
return router;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const ApiRouter = (options) => CyberiaClientHintsRouter.router(options);
|
|
97
|
+
|
|
98
|
+
export { ApiRouter, CyberiaClientHintsRouter };
|