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
|
@@ -18,214 +18,80 @@
|
|
|
18
18
|
* @module src/api/cyberia-instance/cyberia-fallback-world
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
+
import { connectPortals } from './cyberia-portal-connector.js';
|
|
22
|
+
|
|
21
23
|
import {
|
|
22
|
-
connectPortals,
|
|
23
24
|
generateObstacles,
|
|
24
25
|
generateForeground,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
generateResources,
|
|
27
|
+
generateFloorEntities,
|
|
28
|
+
generatePortalEntity,
|
|
29
|
+
generatePortalEntities,
|
|
30
|
+
generateBots,
|
|
28
31
|
OccupancyGrid,
|
|
29
|
-
|
|
30
|
-
BOT_WEAPON_CHANCE,
|
|
31
|
-
PORTAL_DIM_RANGE,
|
|
32
|
-
PORTAL_COUNT_RANGE,
|
|
33
|
-
PORTAL_MODE_LIST,
|
|
34
|
-
PORTAL_MODE_COLOR_KEY,
|
|
35
|
-
EXTRA_PORTAL_MODES,
|
|
36
|
-
PORTAL_MODES,
|
|
37
|
-
} from './cyberia-portal-connector.js';
|
|
32
|
+
} from './cyberia-world-generator.js';
|
|
38
33
|
|
|
39
34
|
import {
|
|
40
35
|
CYBERIA_INSTANCE_CONF_DEFAULTS,
|
|
41
36
|
ENTITY_TYPE_DEFAULTS,
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
RESOURCE_ENTITY_TYPE_DEFAULTS,
|
|
38
|
+
DefaultCyberiaItems,
|
|
39
|
+
} from '../cyberia-server-defaults/cyberia-server-defaults.js';
|
|
40
|
+
import {
|
|
41
|
+
CYBERIA_CLIENT_HINTS_DEFAULTS,
|
|
42
|
+
PALETTE,
|
|
43
|
+
} from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
45
44
|
|
|
46
45
|
// ── Defaults ─────────────────────────────────────────────────────────────────
|
|
47
46
|
|
|
48
47
|
const DEFAULT_MAP_COUNT = 4;
|
|
49
48
|
const DEFAULT_GRID_SIZE = 64;
|
|
50
|
-
const DEFAULT_FLOOR_TILE_DIM = 4;
|
|
51
|
-
const DEFAULT_BOT_DIM_RANGE = [2, 3];
|
|
52
|
-
|
|
53
|
-
/** NPC skin pool — all items with type 'skin' from DefaultCyberiaItems. */
|
|
54
|
-
const BOT_SKIN_POOL = DefaultCyberiaItems.filter((e) => e.item.type === 'skin').map((e) => e.item.id);
|
|
55
|
-
|
|
56
|
-
// ── Floor generator ──────────────────────────────────────────────────────────
|
|
57
49
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
initCellX: x,
|
|
81
|
-
initCellY: y,
|
|
82
|
-
dimX: Math.min(tileDim, mapDims.gridX - x),
|
|
83
|
-
dimY: Math.min(tileDim, mapDims.gridY - y),
|
|
84
|
-
color: rgba,
|
|
85
|
-
objectLayerItemIds: floorItemIds,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
50
|
+
// ── Asset-id integrity ──────────────────────────────────────────────────────
|
|
51
|
+
//
|
|
52
|
+
// Every item id that the fallback world can place on a map must also be
|
|
53
|
+
// present in DefaultCyberiaItems, otherwise the `import-default-items` seed
|
|
54
|
+
// will not create an ObjectLayer for it and the runtime client will fall
|
|
55
|
+
// back to a solid-colour rectangle instead of the intended sprite.
|
|
56
|
+
//
|
|
57
|
+
// auditFallbackItemIds() returns the set of unknown ids encountered in the
|
|
58
|
+
// canonical defaults so callers (CLI, test harness, gRPC fallback path)
|
|
59
|
+
// can surface drift immediately. Returns an empty array when in sync.
|
|
60
|
+
|
|
61
|
+
const KNOWN_DEFAULT_ITEM_IDS = new Set(DefaultCyberiaItems.map((e) => e.item.id));
|
|
62
|
+
|
|
63
|
+
function collectReferencedItemIds() {
|
|
64
|
+
const ids = new Set();
|
|
65
|
+
const push = (id) => { if (typeof id === 'string' && id.length > 0) ids.add(id); };
|
|
66
|
+
|
|
67
|
+
for (const e of ENTITY_TYPE_DEFAULTS) {
|
|
68
|
+
(e.liveItemIds || []).forEach(push);
|
|
69
|
+
(e.deadItemIds || []).forEach(push);
|
|
70
|
+
(e.dropItemIds || []).forEach(push);
|
|
71
|
+
(e.defaultObjectLayers || []).forEach((ol) => push(ol.itemId));
|
|
88
72
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Generate a portal entity at a random walkable position with random dimensions.
|
|
96
|
-
*
|
|
97
|
-
* @param {{ gridX: number, gridY: number }} mapDims
|
|
98
|
-
* @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors
|
|
99
|
-
* @param {OccupancyGrid} [grid] If provided, places portal only on walkable cells and marks them blocked.
|
|
100
|
-
* @param {string} [portalSubtype] One of PORTAL_MODE_LIST values. Determines the portal colour.
|
|
101
|
-
* @returns {object|null} Portal entity or null if no valid position found.
|
|
102
|
-
*/
|
|
103
|
-
function generatePortalEntity(mapDims, colors, grid, portalSubtype) {
|
|
104
|
-
// Resolve colour from subtype-specific palette key, falling back to generic PORTAL
|
|
105
|
-
const colorKey = portalSubtype ? PORTAL_MODE_COLOR_KEY[portalSubtype] : 'PORTAL';
|
|
106
|
-
const portalColor = findColor(colors, colorKey) || findColor(colors, 'PORTAL');
|
|
107
|
-
const rgba = portalColor ? colorToRgba(portalColor) : 'rgba(0, 200, 200, 1)';
|
|
108
|
-
const dimX = randInt(PORTAL_DIM_RANGE[0], PORTAL_DIM_RANGE[1]);
|
|
109
|
-
const dimY = randInt(PORTAL_DIM_RANGE[0], PORTAL_DIM_RANGE[1]);
|
|
110
|
-
|
|
111
|
-
if (grid) {
|
|
112
|
-
const pos = grid.findPosition(dimX, dimY);
|
|
113
|
-
if (!pos) return null;
|
|
114
|
-
grid.block(pos.x, pos.y, dimX, dimY);
|
|
115
|
-
return {
|
|
116
|
-
entityType: 'portal',
|
|
117
|
-
portalSubtype: portalSubtype || 'inter-portal',
|
|
118
|
-
initCellX: pos.x,
|
|
119
|
-
initCellY: pos.y,
|
|
120
|
-
dimX,
|
|
121
|
-
dimY,
|
|
122
|
-
color: rgba,
|
|
123
|
-
objectLayerItemIds: [],
|
|
124
|
-
};
|
|
73
|
+
for (const r of RESOURCE_ENTITY_TYPE_DEFAULTS) {
|
|
74
|
+
(r.liveItemIds || []).forEach(push);
|
|
75
|
+
(r.deadItemIds || []).forEach(push);
|
|
76
|
+
(r.dropItemIds || []).forEach(push);
|
|
125
77
|
}
|
|
126
|
-
|
|
127
|
-
const maxX = Math.max(0, mapDims.gridX - dimX);
|
|
128
|
-
const maxY = Math.max(0, mapDims.gridY - dimY);
|
|
129
|
-
return {
|
|
130
|
-
entityType: 'portal',
|
|
131
|
-
portalSubtype: portalSubtype || 'inter-portal',
|
|
132
|
-
initCellX: randInt(0, maxX),
|
|
133
|
-
initCellY: randInt(0, maxY),
|
|
134
|
-
dimX,
|
|
135
|
-
dimY,
|
|
136
|
-
color: rgba,
|
|
137
|
-
objectLayerItemIds: [],
|
|
138
|
-
};
|
|
78
|
+
return ids;
|
|
139
79
|
}
|
|
140
80
|
|
|
141
81
|
/**
|
|
142
|
-
*
|
|
143
|
-
*
|
|
82
|
+
* Audit every item id the fallback world can place against the canonical
|
|
83
|
+
* DefaultCyberiaItems registry. Returns an array of missing ids; an empty
|
|
84
|
+
* array means the registry is in sync.
|
|
144
85
|
*
|
|
145
|
-
* @
|
|
146
|
-
* @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors
|
|
147
|
-
* @param {object} [opts]
|
|
148
|
-
* @param {number} [opts.count] Override count (ignores range).
|
|
149
|
-
* @param {OccupancyGrid} [opts.grid] If provided, places portals only on walkable cells.
|
|
150
|
-
* @returns {object[]}
|
|
151
|
-
*/
|
|
152
|
-
function generatePortalEntities(mapDims, colors, opts = {}) {
|
|
153
|
-
const count = opts.count ?? randInt(PORTAL_COUNT_RANGE[0], PORTAL_COUNT_RANGE[1]);
|
|
154
|
-
const entities = [];
|
|
155
|
-
for (let i = 0; i < count; i++) {
|
|
156
|
-
// First portal is always inter-portal (reserved for the ring topology);
|
|
157
|
-
// extra portals get a random non-ring subtype.
|
|
158
|
-
const subtype =
|
|
159
|
-
i === 0 ? PORTAL_MODES.INTER_PORTAL : EXTRA_PORTAL_MODES[Math.floor(Math.random() * EXTRA_PORTAL_MODES.length)];
|
|
160
|
-
const portal = generatePortalEntity(mapDims, colors, opts.grid, subtype);
|
|
161
|
-
if (portal) entities.push(portal);
|
|
162
|
-
}
|
|
163
|
-
return entities;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
// ── Bot generator ────────────────────────────────────────────────────────────
|
|
167
|
-
|
|
168
|
-
/**
|
|
169
|
-
* Generate bot entities for a map.
|
|
170
|
-
*
|
|
171
|
-
* - Each bot picks a random skin from BOT_SKIN_POOL for visual variety.
|
|
172
|
-
* - Random chance to also carry `atlas_pistol_mk2` weapon.
|
|
173
|
-
* - Random count within BOT_RANGE, random positions, random dimensions.
|
|
174
|
-
* - Uses the BOT palette color as fallback.
|
|
175
|
-
*
|
|
176
|
-
* @param {{ gridX: number, gridY: number }} mapDims
|
|
177
|
-
* @param {Array<{ key: string, r: number, g: number, b: number, a: number }>} colors
|
|
178
|
-
* @param {object} [opts]
|
|
179
|
-
* @param {number} [opts.count] Override count (ignores range).
|
|
180
|
-
* @param {number} [opts.spawnRadius]
|
|
181
|
-
* @param {number} [opts.aggroRange]
|
|
182
|
-
* @param {number} [opts.maxLife]
|
|
183
|
-
* @param {OccupancyGrid} [opts.grid] If provided, places bots only on walkable cells.
|
|
184
|
-
* @returns {object[]}
|
|
86
|
+
* @returns {string[]}
|
|
185
87
|
*/
|
|
186
|
-
function
|
|
187
|
-
const
|
|
188
|
-
const
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const entities = [];
|
|
193
|
-
for (let i = 0; i < count; i++) {
|
|
194
|
-
const dim = randInt(DEFAULT_BOT_DIM_RANGE[0], DEFAULT_BOT_DIM_RANGE[1]);
|
|
195
|
-
|
|
196
|
-
let cellX, cellY;
|
|
197
|
-
if (opts.grid) {
|
|
198
|
-
const pos = opts.grid.findPosition(dim, dim);
|
|
199
|
-
if (!pos) continue;
|
|
200
|
-
opts.grid.block(pos.x, pos.y, dim, dim);
|
|
201
|
-
cellX = pos.x;
|
|
202
|
-
cellY = pos.y;
|
|
203
|
-
} else {
|
|
204
|
-
const maxX = Math.max(0, mapDims.gridX - dim);
|
|
205
|
-
const maxY = Math.max(0, mapDims.gridY - dim);
|
|
206
|
-
cellX = randInt(0, maxX);
|
|
207
|
-
cellY = randInt(0, maxY);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const skin = BOT_SKIN_POOL[Math.floor(Math.random() * BOT_SKIN_POOL.length)];
|
|
211
|
-
const hasWeapon = Math.random() < BOT_WEAPON_CHANCE;
|
|
212
|
-
const itemIds = hasWeapon ? [skin, 'atlas_pistol_mk2'] : [skin];
|
|
213
|
-
|
|
214
|
-
entities.push({
|
|
215
|
-
entityType: 'bot',
|
|
216
|
-
initCellX: cellX,
|
|
217
|
-
initCellY: cellY,
|
|
218
|
-
dimX: dim,
|
|
219
|
-
dimY: dim,
|
|
220
|
-
color: rgba,
|
|
221
|
-
objectLayerItemIds: itemIds,
|
|
222
|
-
spawnRadius,
|
|
223
|
-
aggroRange,
|
|
224
|
-
maxLife,
|
|
225
|
-
lifeRegen: 0,
|
|
226
|
-
});
|
|
88
|
+
function auditFallbackItemIds() {
|
|
89
|
+
const referenced = collectReferencedItemIds();
|
|
90
|
+
const missing = [];
|
|
91
|
+
for (const id of referenced) {
|
|
92
|
+
if (!KNOWN_DEFAULT_ITEM_IDS.has(id)) missing.push(id);
|
|
227
93
|
}
|
|
228
|
-
return
|
|
94
|
+
return missing.sort();
|
|
229
95
|
}
|
|
230
96
|
|
|
231
97
|
// ── Single map generator ─────────────────────────────────────────────────────
|
|
@@ -235,12 +101,13 @@ function generateBots(mapDims, colors, opts = {}) {
|
|
|
235
101
|
* Everything except floor tiles is randomized.
|
|
236
102
|
*
|
|
237
103
|
* @param {string} mapCode
|
|
238
|
-
* @param {Array} colors Palette from
|
|
104
|
+
* @param {Array} colors Palette (PALETTE from SharedDefaultsCyberia).
|
|
239
105
|
* @param {object} [opts]
|
|
240
106
|
* @param {number} [opts.gridSize]
|
|
241
107
|
* @param {number} [opts.obstacleCount]
|
|
242
108
|
* @param {number} [opts.foregroundCount]
|
|
243
109
|
* @param {number} [opts.botCount]
|
|
110
|
+
* @param {number} [opts.resourceCount]
|
|
244
111
|
* @returns {object} CyberiaMap-shaped plain object.
|
|
245
112
|
*/
|
|
246
113
|
function generateFallbackMap(mapCode, colors, opts = {}) {
|
|
@@ -263,10 +130,13 @@ function generateFallbackMap(mapCode, colors, opts = {}) {
|
|
|
263
130
|
// 5. Bots — placed on walkable cells (avoids obstacles and portals)
|
|
264
131
|
const bots = generateBots(mapDims, colors, { count: opts.botCount, grid });
|
|
265
132
|
|
|
266
|
-
// 6.
|
|
133
|
+
// 6. Resources — static exploitable entities placed on walkable cells
|
|
134
|
+
const resources = generateResources(mapDims, colors, { count: opts.resourceCount, grid });
|
|
135
|
+
|
|
136
|
+
// 7. Foreground — decorative, no collision restriction
|
|
267
137
|
const foreground = generateForeground(mapDims, colors, { count: opts.foregroundCount });
|
|
268
138
|
|
|
269
|
-
const entities = [...floors, ...obstacles, ...portalEntities, ...foreground, ...bots];
|
|
139
|
+
const entities = [...floors, ...obstacles, ...portalEntities, ...foreground, ...bots, ...resources];
|
|
270
140
|
|
|
271
141
|
return {
|
|
272
142
|
code: mapCode,
|
|
@@ -296,6 +166,7 @@ function generateFallbackMap(mapCode, colors, opts = {}) {
|
|
|
296
166
|
* @param {number} [opts.obstacleCount] Obstacles per map (random if omitted).
|
|
297
167
|
* @param {number} [opts.foregroundCount] Foreground entities per map (random if omitted).
|
|
298
168
|
* @param {number} [opts.botCount] Bots per map (random if omitted).
|
|
169
|
+
* @param {number} [opts.resourceCount] Resources per map (random if omitted).
|
|
299
170
|
* @param {Array} [opts.colors] Override palette.
|
|
300
171
|
* @returns {{
|
|
301
172
|
* instance: object,
|
|
@@ -313,9 +184,28 @@ function generateFallbackWorld(opts = {}) {
|
|
|
313
184
|
obstacleCount,
|
|
314
185
|
foregroundCount,
|
|
315
186
|
botCount,
|
|
316
|
-
|
|
187
|
+
resourceCount,
|
|
188
|
+
// Palette lives in SharedDefaultsCyberia (presentation-owned). The
|
|
189
|
+
// world generator only uses it to stamp a cosmetic rgba(...) string on
|
|
190
|
+
// entities so the browser editor / preview can render a coloured
|
|
191
|
+
// fallback before atlases load. The C client resolves real colours
|
|
192
|
+
// through domain/presentation_runtime — it does not read this value.
|
|
193
|
+
colors = PALETTE,
|
|
317
194
|
} = opts;
|
|
318
195
|
|
|
196
|
+
// Surface item-id drift loudly on the very first build, so a missing
|
|
197
|
+
// `bin/cyberia run-workflow import-default-items` run shows up at startup
|
|
198
|
+
// instead of as silent grey rectangles later.
|
|
199
|
+
const missing = auditFallbackItemIds();
|
|
200
|
+
if (missing.length > 0) {
|
|
201
|
+
// eslint-disable-next-line no-console
|
|
202
|
+
console.warn(
|
|
203
|
+
'[cyberia-fallback-world] item ids referenced by defaults but absent from DefaultCyberiaItems:',
|
|
204
|
+
missing.join(', '),
|
|
205
|
+
'— run `node bin/cyberia run-workflow import-default-items` after adding them.',
|
|
206
|
+
);
|
|
207
|
+
}
|
|
208
|
+
|
|
319
209
|
// Generate map codes.
|
|
320
210
|
const mapCodes = [];
|
|
321
211
|
for (let i = 0; i < mapCount; i++) {
|
|
@@ -329,6 +219,7 @@ function generateFallbackWorld(opts = {}) {
|
|
|
329
219
|
obstacleCount,
|
|
330
220
|
foregroundCount,
|
|
331
221
|
botCount,
|
|
222
|
+
resourceCount,
|
|
332
223
|
}),
|
|
333
224
|
);
|
|
334
225
|
|
|
@@ -352,17 +243,11 @@ function generateFallbackWorld(opts = {}) {
|
|
|
352
243
|
portals,
|
|
353
244
|
topology,
|
|
354
245
|
config: CYBERIA_INSTANCE_CONF_DEFAULTS,
|
|
246
|
+
presentationHints: CYBERIA_CLIENT_HINTS_DEFAULTS,
|
|
355
247
|
_fallback: true,
|
|
356
248
|
};
|
|
357
249
|
}
|
|
358
250
|
|
|
359
251
|
// ── Public API ───────────────────────────────────────────────────────────────
|
|
360
252
|
|
|
361
|
-
export {
|
|
362
|
-
generateFallbackWorld,
|
|
363
|
-
generateFallbackMap,
|
|
364
|
-
generateFloorEntities,
|
|
365
|
-
generatePortalEntity,
|
|
366
|
-
generatePortalEntities,
|
|
367
|
-
generateBots,
|
|
368
|
-
};
|
|
253
|
+
export { generateFallbackWorld, generateFallbackMap, auditFallbackItemIds };
|
|
@@ -3,8 +3,8 @@ import { CyberiaInstanceService } from './cyberia-instance.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
fallbackWorld
|
|
6
|
+
class CyberiaInstanceController {
|
|
7
|
+
static fallbackWorld = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await CyberiaInstanceService.fallbackWorld(req);
|
|
10
10
|
return res.status(200).json({ status: 'success', data: result });
|
|
@@ -12,8 +12,8 @@ const CyberiaInstanceController = {
|
|
|
12
12
|
logger.error(error, error.stack);
|
|
13
13
|
return res.status(400).json({ status: 'error', message: error.message });
|
|
14
14
|
}
|
|
15
|
-
}
|
|
16
|
-
portalConnect
|
|
15
|
+
};
|
|
16
|
+
static portalConnect = async (req, res, options) => {
|
|
17
17
|
try {
|
|
18
18
|
const result = await CyberiaInstanceService.portalConnect(req, res, options);
|
|
19
19
|
return res.status(200).json({ status: 'success', data: result });
|
|
@@ -21,8 +21,8 @@ const CyberiaInstanceController = {
|
|
|
21
21
|
logger.error(error, error.stack);
|
|
22
22
|
return res.status(400).json({ status: 'error', message: error.message });
|
|
23
23
|
}
|
|
24
|
-
}
|
|
25
|
-
post
|
|
24
|
+
};
|
|
25
|
+
static post = async (req, res, options) => {
|
|
26
26
|
try {
|
|
27
27
|
const result = await CyberiaInstanceService.post(req, res, options);
|
|
28
28
|
return res.status(200).json({
|
|
@@ -36,8 +36,8 @@ const CyberiaInstanceController = {
|
|
|
36
36
|
message: error.message,
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
-
}
|
|
40
|
-
get
|
|
39
|
+
};
|
|
40
|
+
static get = async (req, res, options) => {
|
|
41
41
|
try {
|
|
42
42
|
const { page, limit } = req.query;
|
|
43
43
|
const result = await CyberiaInstanceService.get(
|
|
@@ -56,8 +56,8 @@ const CyberiaInstanceController = {
|
|
|
56
56
|
message: error.message,
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
}
|
|
60
|
-
put
|
|
59
|
+
};
|
|
60
|
+
static put = async (req, res, options) => {
|
|
61
61
|
try {
|
|
62
62
|
const result = await CyberiaInstanceService.put(req, res, options);
|
|
63
63
|
return res.status(200).json({
|
|
@@ -71,8 +71,8 @@ const CyberiaInstanceController = {
|
|
|
71
71
|
message: error.message,
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
|
-
}
|
|
75
|
-
delete
|
|
74
|
+
};
|
|
75
|
+
static delete = async (req, res, options) => {
|
|
76
76
|
try {
|
|
77
77
|
const result = await CyberiaInstanceService.delete(req, res, options);
|
|
78
78
|
return res.status(200).json({
|
|
@@ -86,7 +86,7 @@ const CyberiaInstanceController = {
|
|
|
86
86
|
message: error.message,
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
91
|
|
|
92
92
|
export { CyberiaInstanceController };
|
|
@@ -52,6 +52,9 @@ const CyberiaInstanceSchema = new Schema(
|
|
|
52
52
|
// Vertex set of the graph
|
|
53
53
|
cyberiaMapCodes: { type: [String], default: [] },
|
|
54
54
|
|
|
55
|
+
// Instance-level object layer item IDs.
|
|
56
|
+
itemIds: { type: [String], default: [] },
|
|
57
|
+
|
|
55
58
|
// Directed edge set of the graph
|
|
56
59
|
portals: { type: [PortalEdgeSchema], default: [] },
|
|
57
60
|
|
|
@@ -5,59 +5,64 @@ import express from 'express';
|
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
router
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
class CyberiaInstanceRouter {
|
|
9
|
+
/**
|
|
10
|
+
* @param {import('../types.js').RouterOptions} options
|
|
11
|
+
* @returns {import('express').Router}
|
|
12
|
+
*/
|
|
13
|
+
static router(options) {
|
|
14
|
+
const router = express.Router();
|
|
15
|
+
// ── Custom actions (must come before generic /:id routes) ──────────────
|
|
16
|
+
router.get(`/fallback-world`, async (req, res) => await CyberiaInstanceController.fallbackWorld(req, res, options));
|
|
17
|
+
router.get(
|
|
18
|
+
`/:id/portal-connect`,
|
|
19
|
+
options.authMiddleware,
|
|
20
|
+
userGuard,
|
|
21
|
+
async (req, res) => await CyberiaInstanceController.portalConnect(req, res, options),
|
|
22
|
+
);
|
|
19
23
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
24
|
+
router.post(
|
|
25
|
+
`/:id`,
|
|
26
|
+
options.authMiddleware,
|
|
27
|
+
userGuard,
|
|
28
|
+
async (req, res) => await CyberiaInstanceController.post(req, res, options),
|
|
29
|
+
);
|
|
30
|
+
router.post(
|
|
31
|
+
`/`,
|
|
32
|
+
options.authMiddleware,
|
|
33
|
+
userGuard,
|
|
34
|
+
async (req, res) => await CyberiaInstanceController.post(req, res, options),
|
|
35
|
+
);
|
|
36
|
+
router.get(`/:id`, async (req, res) => await CyberiaInstanceController.get(req, res, options));
|
|
37
|
+
router.get(`/`, async (req, res) => await CyberiaInstanceController.get(req, res, options));
|
|
38
|
+
router.put(
|
|
39
|
+
`/:id`,
|
|
40
|
+
options.authMiddleware,
|
|
41
|
+
userGuard,
|
|
42
|
+
async (req, res) => await CyberiaInstanceController.put(req, res, options),
|
|
43
|
+
);
|
|
44
|
+
router.put(
|
|
45
|
+
`/`,
|
|
46
|
+
options.authMiddleware,
|
|
47
|
+
userGuard,
|
|
48
|
+
async (req, res) => await CyberiaInstanceController.put(req, res, options),
|
|
49
|
+
);
|
|
50
|
+
router.delete(
|
|
51
|
+
`/:id`,
|
|
52
|
+
options.authMiddleware,
|
|
53
|
+
userGuard,
|
|
54
|
+
async (req, res) => await CyberiaInstanceController.delete(req, res, options),
|
|
55
|
+
);
|
|
56
|
+
router.delete(
|
|
57
|
+
`/`,
|
|
58
|
+
options.authMiddleware,
|
|
59
|
+
adminGuard,
|
|
60
|
+
async (req, res) => await CyberiaInstanceController.delete(req, res, options),
|
|
61
|
+
);
|
|
62
|
+
return router;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
60
65
|
|
|
61
|
-
const ApiRouter = CyberiaInstanceRouter;
|
|
66
|
+
const ApiRouter = (options) => CyberiaInstanceRouter.router(options);
|
|
62
67
|
|
|
63
68
|
export { ApiRouter, CyberiaInstanceRouter };
|