@underpostnet/cyberia 3.2.80
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/.dockerignore +14 -0
- package/.env.example +144 -0
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +70 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +71 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +53 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +53 -0
- package/.github/workflows/engine-cyberia.cd.yml +157 -0
- package/.github/workflows/engine-cyberia.ci.yml +125 -0
- package/.github/workflows/ghpkg.ci.yml +160 -0
- package/.github/workflows/gitlab.ci.yml +20 -0
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +126 -0
- package/.github/workflows/publish.ci.yml +87 -0
- package/.github/workflows/publish.cyberia.ci.yml +79 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +65 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +46 -0
- package/.nycrc +9 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +10 -0
- package/.vscode/settings.json +26 -0
- package/CHANGELOG.md +2516 -0
- package/CLI-HELP.md +1099 -0
- package/Dockerfile +161 -0
- package/Dockerfile.dev +161 -0
- package/Dockerfile.test +165 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/baremetal/commission-workflows.json +211 -0
- package/baremetal/packer-workflows.json +24 -0
- package/bin/build.js +261 -0
- package/bin/build.template.js +33 -0
- package/bin/cyberia.js +5627 -0
- package/bin/deploy.js +1547 -0
- package/bin/index.js +5627 -0
- package/bump.config.js +27 -0
- package/compose.env +144 -0
- package/conf.js +952 -0
- package/deployment.yaml +418 -0
- package/docker-compose.yml +434 -0
- package/examples/static-page/README.md +150 -0
- package/examples/static-page/ssr-components/CustomPage.js +554 -0
- package/examples/static-page/static-config-example.json +57 -0
- package/hardhat/.env.example +31 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/.gitkeep +0 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +2871 -0
- package/hardhat/package.json +43 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +696 -0
- 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/ipfs/configure-ipfs.sh +13 -0
- package/jsconfig.json +9 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +48 -0
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +48 -0
- package/manifests/deployment/adminer/deployment.yaml +32 -0
- package/manifests/deployment/adminer/kustomization.yaml +7 -0
- package/manifests/deployment/adminer/service.yaml +13 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +418 -0
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +189 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +164 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +163 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
- package/manifests/deployment/fastapi/backend-service.yml +19 -0
- package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
- package/manifests/deployment/fastapi/frontend-service.yml +15 -0
- package/manifests/deployment/fastapi/initial_data.sh +8 -0
- package/manifests/deployment/kafka/deployment.yaml +67 -0
- package/manifests/deployment/mongo-express/deployment.yaml +62 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/playwright/deployment.yaml +52 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +20 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +63 -0
- package/manifests/envoy-service-nodeport.yaml +22 -0
- package/manifests/grafana/deployment.yaml +64 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/grafana/storage-class.yaml +9 -0
- package/manifests/ipfs/configmap.yaml +64 -0
- package/manifests/ipfs/headless-service.yaml +35 -0
- package/manifests/ipfs/kustomization.yaml +8 -0
- package/manifests/ipfs/statefulset.yaml +149 -0
- package/manifests/ipfs/storage-class.yaml +9 -0
- package/manifests/kind-config-dev.yaml +20 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +14 -0
- package/manifests/letsencrypt-prod.yaml +14 -0
- package/manifests/lxd/lxd-admin-profile.yaml +26 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +56 -0
- package/manifests/mariadb/storage-class.yaml +10 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +59 -0
- package/manifests/mongodb/statefulset.yaml +113 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +9 -0
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +19 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +61 -0
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/mysql/kustomization.yaml +7 -0
- package/manifests/mysql/pv-pvc.yaml +27 -0
- package/manifests/mysql/statefulset.yaml +55 -0
- package/manifests/postgresql/configmap.yaml +9 -0
- package/manifests/postgresql/kustomization.yaml +10 -0
- package/manifests/postgresql/pv.yaml +15 -0
- package/manifests/postgresql/pvc.yaml +13 -0
- package/manifests/postgresql/service.yaml +10 -0
- package/manifests/postgresql/statefulset.yaml +37 -0
- package/manifests/prometheus/deployment.yaml +82 -0
- package/manifests/pv-pvc-dd.yaml +34 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +10 -0
- package/manifests/valkey/statefulset.yaml +37 -0
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +128 -0
- package/nodemon.json +6 -0
- package/package.json +101 -0
- package/packer/images/Rocky9Amd64/Makefile +62 -0
- package/packer/images/Rocky9Amd64/QUICKSTART.md +113 -0
- package/packer/images/Rocky9Amd64/README.md +122 -0
- package/packer/images/Rocky9Amd64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Amd64/rocky9.pkr.hcl +164 -0
- package/packer/images/Rocky9Arm64/Makefile +69 -0
- package/packer/images/Rocky9Arm64/README.md +122 -0
- package/packer/images/Rocky9Arm64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Arm64/rocky9.pkr.hcl +171 -0
- package/packer/scripts/fuse-nbd +64 -0
- package/packer/scripts/fuse-tar-root +63 -0
- package/proxy.yaml +189 -0
- package/pv-pvc.yaml +164 -0
- package/scripts/device-scan.sh +65 -0
- package/scripts/disk-clean.sh +182 -0
- package/scripts/disk-devices.sh +13 -0
- package/scripts/gen-fqdns.sh +14 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/ip-info.sh +118 -0
- package/scripts/ipxe-setup.sh +200 -0
- package/scripts/k3s-node-setup.sh +124 -0
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/lxd-vm-setup.sh +208 -0
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/maas-setup.sh +135 -0
- package/scripts/maas-upload-boot-resource.sh +183 -0
- package/scripts/nat-iptables.sh +111 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/packer-init-vars-file.sh +40 -0
- package/scripts/packer-setup.sh +289 -0
- package/scripts/ports-ls.sh +33 -0
- package/scripts/quick-tftp.sh +19 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/scripts/rocky-kickstart.sh +986 -0
- package/scripts/rocky-pwa.sh +200 -0
- package/scripts/rocky-setup.sh +106 -0
- package/scripts/rpmfusion-ffmpeg-setup.sh +32 -0
- package/scripts/ssl.sh +170 -0
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +30 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +155 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +39 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +382 -0
- package/src/api/core/core.controller.js +8 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +23 -0
- package/src/api/core/core.service.js +30 -0
- package/src/api/crypto/crypto.controller.js +10 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +23 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/cyberia-action/cyberia-action.controller.js +8 -0
- package/src/api/cyberia-action/cyberia-action.model.js +79 -0
- package/src/api/cyberia-action/cyberia-action.router.js +21 -0
- package/src/api/cyberia-action/cyberia-action.service.js +58 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +27 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +100 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +70 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +8 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +20 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +57 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +6 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +25 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +17 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +6 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +337 -0
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +57 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +583 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +42 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +117 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +75 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +190 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +618 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +6 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +200 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +17 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +6 -0
- package/src/api/cyberia-map/cyberia-map.model.js +33 -0
- package/src/api/cyberia-map/cyberia-map.router.js +19 -0
- package/src/api/cyberia-map/cyberia-map.service.js +76 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +9 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +26 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +97 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +6 -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 +21 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-saga/cyberia-saga.controller.js +6 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +17 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +1076 -0
- package/src/api/cyberia-skill/cyberia-skill.controller.js +6 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +17 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/default/default.controller.js +6 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +21 -0
- package/src/api/default/default.service.js +42 -0
- package/src/api/document/document.controller.js +9 -0
- package/src/api/document/document.model.js +95 -0
- package/src/api/document/document.router.js +32 -0
- package/src/api/document/document.service.js +633 -0
- package/src/api/file/file.controller.js +15 -0
- package/src/api/file/file.model.js +127 -0
- package/src/api/file/file.ref.json +39 -0
- package/src/api/file/file.router.js +36 -0
- package/src/api/file/file.service.js +499 -0
- package/src/api/instance/instance.controller.js +8 -0
- package/src/api/instance/instance.model.js +34 -0
- package/src/api/instance/instance.router.js +27 -0
- package/src/api/instance/instance.service.js +75 -0
- package/src/api/ipfs/ipfs.controller.js +8 -0
- package/src/api/ipfs/ipfs.model.js +77 -0
- package/src/api/ipfs/ipfs.router.js +26 -0
- package/src/api/ipfs/ipfs.service.js +145 -0
- package/src/api/object-layer/object-layer.controller.js +18 -0
- package/src/api/object-layer/object-layer.model.js +200 -0
- package/src/api/object-layer/object-layer.router.js +729 -0
- package/src/api/object-layer/object-layer.service.js +894 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +6 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +93 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +17 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +46 -0
- package/src/api/test/test.controller.js +14 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +23 -0
- package/src/api/test/test.service.js +35 -0
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/postman_collection.json +216 -0
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +35 -0
- package/src/api/user/user.model.js +142 -0
- package/src/api/user/user.router.js +367 -0
- package/src/api/user/user.service.js +582 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +3947 -0
- package/src/cli/cloud-init.js +673 -0
- package/src/cli/cluster.js +1395 -0
- package/src/cli/db.js +1533 -0
- package/src/cli/deploy.js +1542 -0
- package/src/cli/docker-compose.js +802 -0
- package/src/cli/env.js +177 -0
- package/src/cli/fs.js +380 -0
- package/src/cli/image.js +389 -0
- package/src/cli/index.js +1059 -0
- package/src/cli/ipfs.js +182 -0
- package/src/cli/kickstart.js +271 -0
- package/src/cli/kubectl.js +214 -0
- package/src/cli/lxd.js +1232 -0
- package/src/cli/monitor.js +659 -0
- package/src/cli/release.js +595 -0
- package/src/cli/repository.js +1969 -0
- package/src/cli/run.js +3326 -0
- package/src/cli/secrets.js +151 -0
- package/src/cli/ssh.js +975 -0
- package/src/cli/static.js +653 -0
- package/src/cli/system.js +332 -0
- package/src/cli/test.js +176 -0
- package/src/client/Cryptokoyn.index.js +30 -0
- package/src/client/CyberiaPortal.index.js +31 -0
- package/src/client/Default.index.js +77 -0
- package/src/client/Itemledger.index.js +35 -0
- package/src/client/Underpost.index.js +31 -0
- package/src/client/components/core/404.js +20 -0
- package/src/client/components/core/500.js +20 -0
- package/src/client/components/core/Account.js +630 -0
- package/src/client/components/core/AgGrid.js +238 -0
- package/src/client/components/core/Alert.js +76 -0
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/Auth.js +353 -0
- package/src/client/components/core/Badge.js +26 -0
- package/src/client/components/core/Blockchain.js +41 -0
- package/src/client/components/core/Blog.js +9 -0
- package/src/client/components/core/BtnIcon.js +109 -0
- package/src/client/components/core/CalendarCore.js +437 -0
- package/src/client/components/core/Chat.js +62 -0
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/CommonJs.js +1014 -0
- package/src/client/components/core/Content.js +349 -0
- package/src/client/components/core/Css.js +1134 -0
- package/src/client/components/core/CssCore.js +881 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +478 -0
- package/src/client/components/core/DropDown.js +321 -0
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +130 -0
- package/src/client/components/core/FileExplorer.js +1406 -0
- package/src/client/components/core/FullScreen.js +201 -0
- package/src/client/components/core/Input.js +537 -0
- package/src/client/components/core/Keyboard.js +80 -0
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +152 -0
- package/src/client/components/core/LogIn.js +212 -0
- package/src/client/components/core/LogOut.js +72 -0
- package/src/client/components/core/Logger.js +22 -0
- package/src/client/components/core/Modal.js +2956 -0
- package/src/client/components/core/NotificationManager.js +80 -0
- package/src/client/components/core/Pagination.js +252 -0
- package/src/client/components/core/Panel.js +1308 -0
- package/src/client/components/core/PanelForm.js +915 -0
- package/src/client/components/core/Polyhedron.js +947 -0
- package/src/client/components/core/PublicProfile.js +895 -0
- package/src/client/components/core/Recover.js +211 -0
- package/src/client/components/core/Responsive.js +146 -0
- package/src/client/components/core/RichText.js +33 -0
- package/src/client/components/core/Router.js +523 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SearchBox.js +1007 -0
- package/src/client/components/core/SignUp.js +153 -0
- package/src/client/components/core/SocketIo.js +163 -0
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +161 -0
- package/src/client/components/core/ToggleSwitch.js +89 -0
- package/src/client/components/core/ToolTip.js +78 -0
- package/src/client/components/core/Translate.js +694 -0
- package/src/client/components/core/Validator.js +140 -0
- package/src/client/components/core/VanillaJs.js +485 -0
- package/src/client/components/core/Wallet.js +95 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +58 -0
- package/src/client/components/core/Worker.js +313 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +352 -0
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +212 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +12 -0
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +11 -0
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +6 -0
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +1088 -0
- package/src/client/components/cyberia/InstanceSelectionView.js +900 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1976 -0
- package/src/client/components/cyberia/ObjectLayerEngine.js +1540 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +2420 -0
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +1522 -0
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +528 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +772 -0
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +254 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +21 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +518 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +72 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +13 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +6 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +48 -0
- package/src/client/components/default/AppShellDefault.js +765 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/LogInDefault.js +16 -0
- package/src/client/components/default/LogOutDefault.js +12 -0
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +11 -0
- package/src/client/components/default/SocketIoDefault.js +6 -0
- package/src/client/components/default/TranslateDefault.js +7 -0
- package/src/client/components/itemledger/AppShellItemledger.js +353 -0
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +212 -0
- package/src/client/components/itemledger/LogInItemledger.js +17 -0
- package/src/client/components/itemledger/LogOutItemledger.js +12 -0
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +16 -0
- package/src/client/components/itemledger/SignUpItemledger.js +11 -0
- package/src/client/components/itemledger/SocketIoItemledger.js +6 -0
- package/src/client/components/itemledger/TranslateItemledger.js +7 -0
- package/src/client/components/underpost/AppShellUnderpost.js +691 -0
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +281 -0
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
- package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
- package/src/client/components/underpost/LabGalleryUnderpost.js +79 -0
- package/src/client/components/underpost/LogInUnderpost.js +25 -0
- package/src/client/components/underpost/LogOutUnderpost.js +17 -0
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +16 -0
- package/src/client/components/underpost/SignUpUnderpost.js +11 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +6 -0
- package/src/client/components/underpost/TranslateUnderpost.js +10 -0
- package/src/client/public/cryptokoyn/assets/banner/koyn-social.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/cryptokoyn.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-192x192.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-256x256.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-36x36.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-48x48.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-96x96.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-16x16.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-32x32.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-150x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x310.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-70x70.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/safari-pinned-tab.svg +42 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/favicon.ico +0 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +148 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +307 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +309 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +341 -0
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +84 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +294 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +242 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +309 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +228 -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 +740 -0
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/dark.svg +557 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/default/assets/logo/base-icon.png +0 -0
- package/src/client/public/default/assets/logo/underpost.gif +0 -0
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +12 -0
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +69 -0
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/safari-pinned-tab.svg +24 -0
- package/src/client/public/default/site.webmanifest +69 -0
- package/src/client/public/default/sitemap +148 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +9 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +148 -0
- package/src/client/public/itemledger/android-chrome-144x144.png +0 -0
- package/src/client/public/itemledger/android-chrome-192x192.png +0 -0
- package/src/client/public/itemledger/android-chrome-256x256.png +0 -0
- package/src/client/public/itemledger/android-chrome-36x36.png +0 -0
- package/src/client/public/itemledger/android-chrome-384x384.png +0 -0
- package/src/client/public/itemledger/android-chrome-48x48.png +0 -0
- package/src/client/public/itemledger/android-chrome-512x512.png +0 -0
- package/src/client/public/itemledger/android-chrome-72x72.png +0 -0
- package/src/client/public/itemledger/android-chrome-96x96.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/itemledger/assets/logo/base-icon.png +0 -0
- package/src/client/public/itemledger/browserconfig.xml +12 -0
- package/src/client/public/itemledger/favicon-16x16.png +0 -0
- package/src/client/public/itemledger/favicon-32x32.png +0 -0
- package/src/client/public/itemledger/favicon-48x48.png +0 -0
- package/src/client/public/itemledger/favicon.ico +0 -0
- package/src/client/public/itemledger/manifest.webmanifest +69 -0
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/mstile-144x144.png +0 -0
- package/src/client/public/itemledger/mstile-150x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x310.png +0 -0
- package/src/client/public/itemledger/mstile-70x70.png +0 -0
- package/src/client/public/itemledger/sitemap +148 -0
- package/src/client/public/itemledger/yandex-browser-50x50.png +0 -0
- package/src/client/public/itemledger/yandex-browser-manifest.json +9 -0
- package/src/client/public/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +137 -0
- package/src/client/services/core/core.service.js +309 -0
- package/src/client/services/crypto/crypto.service.js +68 -0
- 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 +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-entity-type-default/cyberia-entity-type-default.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 +137 -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/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/default/default.management.js +1015 -0
- package/src/client/services/default/default.service.js +99 -0
- package/src/client/services/document/document.service.js +134 -0
- package/src/client/services/file/file.service.js +94 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +107 -0
- package/src/client/services/ipfs/ipfs.service.js +118 -0
- package/src/client/services/object-layer/object-layer.management.js +414 -0
- package/src/client/services/object-layer/object-layer.service.js +208 -0
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +99 -0
- package/src/client/services/test/test.service.js +68 -0
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +51 -0
- package/src/client/services/user/user.service.js +106 -0
- package/src/client/ssr/RootDocument.js +237 -0
- package/src/client/ssr/body/404.js +77 -0
- package/src/client/ssr/body/500.js +76 -0
- package/src/client/ssr/body/CacheControl.js +117 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +90 -0
- package/src/client/ssr/head/CryptokoynScripts.js +4 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -0
- package/src/client/ssr/head/ItemledgerScripts.js +4 -0
- package/src/client/ssr/head/Microdata.js +11 -0
- package/src/client/ssr/head/Production.js +1 -0
- package/src/client/ssr/head/Pwa.js +146 -0
- package/src/client/ssr/head/PwaItemledger.js +197 -0
- package/src/client/ssr/head/Seo.js +15 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +20 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +16 -0
- package/src/client/ssr/views/Cyberia404.js +328 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +1070 -0
- package/src/client/ssr/views/Maintenance.js +64 -0
- package/src/client/ssr/views/NoNetworkConnection.js +68 -0
- package/src/client/ssr/views/Test.js +199 -0
- package/src/client/sw/core.sw.js +274 -0
- package/src/client-builder/client-build-docs.js +493 -0
- package/src/client-builder/client-build-live.js +100 -0
- package/src/client-builder/client-build.js +1092 -0
- package/src/client-builder/client-dev-server.js +88 -0
- package/src/client-builder/client-formatted.js +170 -0
- package/src/client-builder/client-icons.js +108 -0
- package/src/client-builder/ssr.js +124 -0
- package/src/client.build.js +17 -0
- package/src/client.dev.js +21 -0
- package/src/db/DataBaseProvider.js +213 -0
- package/src/db/mariadb/MariaDB.js +72 -0
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +199 -0
- package/src/grpc/cyberia/grpc-server.js +162 -0
- package/src/index.js +357 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +413 -0
- package/src/projects/cyberia/besu-genesis-generator.js +1630 -0
- package/src/projects/cyberia/catalog-cyberia.js +90 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2137 -0
- package/src/projects/cyberia/hot-reload-trigger.js +163 -0
- package/src/projects/cyberia/instance-data.js +719 -0
- package/src/projects/cyberia/ipfs-client.js +599 -0
- package/src/projects/cyberia/map-preview-generator.js +304 -0
- package/src/projects/cyberia/object-layer.js +978 -0
- package/src/projects/cyberia/semantic-layer-generator-floor.js +319 -0
- package/src/projects/cyberia/semantic-layer-generator-resource.js +259 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +1164 -0
- package/src/projects/cyberia/semantic-layer-generator.js +753 -0
- package/src/projects/cyberia/shape-generator.js +1060 -0
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/proxy.js +19 -0
- package/src/runtime/cyberia-client/Dockerfile +49 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +75 -0
- package/src/runtime/cyberia-server/Dockerfile +43 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +56 -0
- package/src/runtime/engine-cyberia/Dockerfile +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +144 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +434 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +128 -0
- package/src/runtime/express/Dockerfile +45 -0
- package/src/runtime/express/Express.js +285 -0
- package/src/runtime/lampp/Dockerfile +62 -0
- package/src/runtime/lampp/Lampp.js +359 -0
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +642 -0
- package/src/server/auth.js +713 -0
- package/src/server/backup.js +102 -0
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +2316 -0
- package/src/server/cron.js +476 -0
- package/src/server/crypto.js +210 -0
- package/src/server/data-query.js +461 -0
- package/src/server/dns.js +553 -0
- package/src/server/downloader.js +73 -0
- package/src/server/logger.js +229 -0
- package/src/server/middlewares.js +152 -0
- package/src/server/peer.js +75 -0
- package/src/server/process.js +299 -0
- package/src/server/proxy.js +139 -0
- package/src/server/runtime-status.js +252 -0
- package/src/server/runtime.js +183 -0
- package/src/server/start.js +272 -0
- package/src/server/tls.js +254 -0
- package/src/server/valkey.js +201 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +129 -0
- package/src/ws/IoServer.js +68 -0
- package/src/ws/core/channels/core.ws.chat.js +68 -0
- package/src/ws/core/channels/core.ws.mailer.js +116 -0
- package/src/ws/core/channels/core.ws.stream.js +90 -0
- package/src/ws/core/core.ws.connection.js +41 -0
- package/src/ws/core/core.ws.emit.js +37 -0
- package/src/ws/core/core.ws.server.js +44 -0
- package/src/ws/default/channels/default.ws.main.js +57 -0
- package/src/ws/default/default.ws.connection.js +35 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +39 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +463 -0
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +31 -0
- package/typedoc.json +31 -0
|
@@ -0,0 +1,1076 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical server-owned defaults for the Cyberia runtime.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for everything the **authoritative simulation
|
|
5
|
+
* server** (cyberia-server, Go) needs to build and run a world:
|
|
6
|
+
*
|
|
7
|
+
* - per-entity-type live / dead / drop item configuration
|
|
8
|
+
* - simulation, AOI, combat, economy, and skill rules
|
|
9
|
+
* - equipment rules
|
|
10
|
+
* - status-icon **numeric IDs** (visuals live in client defaults)
|
|
11
|
+
* - seed content (dialogues, actions, quests) consumed by the
|
|
12
|
+
* persistence/CLI tooling that bootstraps the world
|
|
13
|
+
* - native-dependency pin list for chain-bridge tooling
|
|
14
|
+
*
|
|
15
|
+
* STRICT BOUNDARY
|
|
16
|
+
* ---------------
|
|
17
|
+
* NEVER imported from any file under `src/client/`. The browser bundler
|
|
18
|
+
* resolves imports recursively, so a single browser-side import would drag
|
|
19
|
+
* the entire simulation defaults into the public JS payload.
|
|
20
|
+
*
|
|
21
|
+
* Shared content **vocabulary** (item/entity type enums, the
|
|
22
|
+
* `DefaultCyberiaItems` registry, `ENTITY_TYPE_TO_ITEM_TYPES`, the quest
|
|
23
|
+
* step objective enum) lives in `SharedDefaultsCyberia.js`. This file
|
|
24
|
+
* re-imports those so the browser editor never needs to reach into
|
|
25
|
+
* server-defaults to learn the schema.
|
|
26
|
+
*
|
|
27
|
+
* Consumers:
|
|
28
|
+
* - cyberia-instance-conf model + grpc-server (gameplay config)
|
|
29
|
+
* - cyberia-world-generator / cyberia-fallback-world (world build)
|
|
30
|
+
* - cyberia-quest / cyberia-action / Mongo seed scripts (content)
|
|
31
|
+
* - bin/cyberia + bin/build + bin/deploy (CLI + chain bridge)
|
|
32
|
+
*
|
|
33
|
+
* @module src/api/cyberia-server-defaults/cyberia-server-defaults.js
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
// The canonical client-defaults module lives under src/client/ so the
|
|
37
|
+
// browser bundler can resolve the URL inside the client tree. Engine-side
|
|
38
|
+
// Node imports work from any path, so we reach into it from here.
|
|
39
|
+
import {
|
|
40
|
+
ITEM_TYPES,
|
|
41
|
+
ENTITY_TYPES,
|
|
42
|
+
SKILL_LOGIC_ID_VALUES,
|
|
43
|
+
isCanonicalSkillLogicId,
|
|
44
|
+
} from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
45
|
+
|
|
46
|
+
export const DOCKER_COMPOSE_ID = 'cyberia';
|
|
47
|
+
|
|
48
|
+
export const DEPLOY_ID = 'dd-cyberia';
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Native-dependency pin list. Consumed by `bin/build.js` and `bin/deploy.js`
|
|
52
|
+
* when materialising the Cyberia subtree so versions stay reproducible
|
|
53
|
+
* across CI / production deploys.
|
|
54
|
+
*/
|
|
55
|
+
export class CyberiaDependencies {
|
|
56
|
+
static 'maxrects-packer' = '^2.7.3';
|
|
57
|
+
static pngjs = '^7.0.0';
|
|
58
|
+
static jimp = '^1.6.0';
|
|
59
|
+
static sharp = '^0.34.5';
|
|
60
|
+
static ethers = '~6.16.0';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export const DOCKER_SCRIPTS = {
|
|
64
|
+
'docker:generate': `node bin docker-compose --generate --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
65
|
+
'docker:up': `node bin docker-compose --up --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
66
|
+
'docker:up:build': `node bin docker-compose --up --build --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
67
|
+
'docker:down': `node bin docker-compose --down --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
68
|
+
'docker:down:volumes': `node bin docker-compose --down --volumes --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
69
|
+
'docker:restart': `node bin docker-compose --restart --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
70
|
+
'docker:pull': `node bin docker-compose --pull --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
71
|
+
'docker:logs': `node bin docker-compose --logs --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
72
|
+
'docker:status': `node bin docker-compose --status --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
73
|
+
'docker:reset': `node bin docker-compose --reset --deploy-id ${DEPLOY_ID} --docker-compose-id ${DOCKER_COMPOSE_ID}`,
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
77
|
+
// Skill / action / quest seed content
|
|
78
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Canonical skill configuration — single source of truth for every trigger
|
|
82
|
+
* item → skill mapping consumed by the runtime simulation.
|
|
83
|
+
*
|
|
84
|
+
* Each entry carries both:
|
|
85
|
+
* - `logicEventIds` (compact array of handler keys, used by the Mongo schema)
|
|
86
|
+
* - `skills` (expanded metadata with name, description, summoned entity)
|
|
87
|
+
*
|
|
88
|
+
* Consumers:
|
|
89
|
+
* - `CYBERIA_INSTANCE_CONF_DEFAULTS.skillConfig` (gRPC fallback defaults)
|
|
90
|
+
* - `bin/cyberia.js seed-skills` (upsert into the cyberia-skill collection —
|
|
91
|
+
* the authoritative CyberiaSkill model keeps the full record, including the
|
|
92
|
+
* `skills` metadata the instance-conf skillConfig schema drops)
|
|
93
|
+
*/
|
|
94
|
+
export const DefaultSkillConfig = [
|
|
95
|
+
{
|
|
96
|
+
triggerItemId: 'atlas_pistol_mk2',
|
|
97
|
+
logicEventIds: ['projectile'],
|
|
98
|
+
skills: [
|
|
99
|
+
{
|
|
100
|
+
logicEventId: 'projectile',
|
|
101
|
+
name: 'Projectile',
|
|
102
|
+
description:
|
|
103
|
+
'Fires a projectile in the direction of the tap. Spawn chance and lifetime scale with Intelligence and Range.',
|
|
104
|
+
summonedEntityItemId: 'atlas_pistol_mk2_bullet',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
triggerItemId: 'coin',
|
|
110
|
+
logicEventIds: ['coin_drop_or_transaction'],
|
|
111
|
+
skills: [
|
|
112
|
+
{
|
|
113
|
+
logicEventId: 'coin_drop_or_transaction',
|
|
114
|
+
name: 'Coin Drop',
|
|
115
|
+
description:
|
|
116
|
+
'Coins are dropped automatically when an entity is killed. Transfer amount scales with kill percent rules.',
|
|
117
|
+
summonedEntityItemId: 'coin',
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
// {
|
|
122
|
+
// triggerItemId: 'anon',
|
|
123
|
+
// logicEventIds: ['doppelganger'],
|
|
124
|
+
// skills: [
|
|
125
|
+
// {
|
|
126
|
+
// logicEventId: 'doppelganger',
|
|
127
|
+
// name: 'Doppelganger',
|
|
128
|
+
// description: 'Summons a passive clone of yourself that wanders nearby. Spawn chance scales with Intelligence.',
|
|
129
|
+
// summonedEntityItemId: '$active_skin',
|
|
130
|
+
// },
|
|
131
|
+
// ],
|
|
132
|
+
// },
|
|
133
|
+
{
|
|
134
|
+
triggerItemId: 'hatchet',
|
|
135
|
+
logicEventIds: ['projectile'],
|
|
136
|
+
skills: [
|
|
137
|
+
{
|
|
138
|
+
logicEventId: 'projectile',
|
|
139
|
+
name: 'Projectile',
|
|
140
|
+
description:
|
|
141
|
+
'Fires a projectile in the direction of the tap. Spawn chance and lifetime scale with Intelligence and Range.',
|
|
142
|
+
summonedEntityItemId: 'hatchet-skill',
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
},
|
|
146
|
+
];
|
|
147
|
+
|
|
148
|
+
// Fail fast on a non-canonical logicEventId: the canonical LogicId registry in
|
|
149
|
+
// SharedDefaultsCyberia.js is the single source of truth, so a typo or a handler
|
|
150
|
+
// the dispatcher does not know must surface at boot, not as a silent no-op skill.
|
|
151
|
+
for (const cfg of DefaultSkillConfig) {
|
|
152
|
+
for (const logicEventId of [...(cfg.logicEventIds || []), ...(cfg.skills || []).map((sk) => sk.logicEventId)]) {
|
|
153
|
+
if (!isCanonicalSkillLogicId(logicEventId)) {
|
|
154
|
+
throw new Error(
|
|
155
|
+
`DefaultSkillConfig: unknown skill logicEventId "${logicEventId}" for trigger "${cfg.triggerItemId}". ` +
|
|
156
|
+
`Allowed (SharedDefaultsCyberia.SKILL_LOGIC_IDS): ${SKILL_LOGIC_ID_VALUES.join(', ')}`,
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
163
|
+
// Lain demo quests (testing only) — single source of truth
|
|
164
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
165
|
+
//
|
|
166
|
+
// Offered by Lain (15,22): a batch of simple no-prerequisite quests so the
|
|
167
|
+
// Quest Journal can exercise pagination with 4+ concurrently active quests.
|
|
168
|
+
//
|
|
169
|
+
// These specs drive THREE derived structures so they can never drift apart:
|
|
170
|
+
// - DefaultCyberiaQuests — the quest definitions
|
|
171
|
+
// - DefaultCyberiaDialogues — one quest-talk dialogue per talk objective
|
|
172
|
+
// - DefaultCyberiaActions — Lain's questDialogueCodes mapping
|
|
173
|
+
//
|
|
174
|
+
// Every `talk` objective MUST have its own quest-talk dialogue mapped on the
|
|
175
|
+
// provider's action: the server validates a talk objective only when the
|
|
176
|
+
// completed dialogue matches that mapping, so a quest without one could be
|
|
177
|
+
// satisfied by reading the NPC's default greeting.
|
|
178
|
+
|
|
179
|
+
const LAIN_DEMO_QUEST_SPECS = [
|
|
180
|
+
{
|
|
181
|
+
suffix: 'coin-cache',
|
|
182
|
+
title: 'Coin Cache',
|
|
183
|
+
description: 'Lain is short on change. Round up some loose coins.',
|
|
184
|
+
steps: [
|
|
185
|
+
{
|
|
186
|
+
id: 'step-collect-coins',
|
|
187
|
+
description: 'Collect 3 coins from field drops.',
|
|
188
|
+
objectives: [{ type: 'collect', itemId: 'coin', quantity: 3 }],
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
rewards: [{ itemId: 'coin', quantity: 10 }],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
suffix: 'timber-run',
|
|
195
|
+
title: 'Timber Run',
|
|
196
|
+
description: 'The camp stockpile is low. Bring back fresh wood.',
|
|
197
|
+
talkLines: ['The reserve thanks you. That timber will hold the frame another cycle.'],
|
|
198
|
+
steps: [
|
|
199
|
+
{
|
|
200
|
+
id: 'step-collect-wood',
|
|
201
|
+
description: 'Gather 2 pieces of wood.',
|
|
202
|
+
objectives: [{ type: 'collect', itemId: 'wood-drop-1', quantity: 2 }],
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
id: 'step-return-lain',
|
|
206
|
+
description: 'Deliver the wood to Lain.',
|
|
207
|
+
objectives: [{ type: 'talk', itemId: 'lain', quantity: 1 }],
|
|
208
|
+
},
|
|
209
|
+
],
|
|
210
|
+
rewards: [{ itemId: 'coin', quantity: 15 }],
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
suffix: 'pest-control',
|
|
214
|
+
title: 'Pest Control',
|
|
215
|
+
description: 'Kishins keep raiding the perimeter. Thin them out.',
|
|
216
|
+
steps: [
|
|
217
|
+
{
|
|
218
|
+
id: 'step-kill-kishins',
|
|
219
|
+
description: 'Defeat 3 Kishins.',
|
|
220
|
+
objectives: [{ type: 'kill', itemId: 'kishins', quantity: 3 }],
|
|
221
|
+
},
|
|
222
|
+
],
|
|
223
|
+
rewards: [{ itemId: 'coin', quantity: 20 }],
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
suffix: 'field-sweep',
|
|
227
|
+
title: 'Field Sweep',
|
|
228
|
+
description: 'A mixed patrol order: clear hostiles, then salvage the field.',
|
|
229
|
+
talkLines: ['Patrol logged. The perimeter reads quiet — for now.'],
|
|
230
|
+
steps: [
|
|
231
|
+
{
|
|
232
|
+
id: 'step-kill-one',
|
|
233
|
+
description: 'Defeat 1 Kishin scout.',
|
|
234
|
+
objectives: [{ type: 'kill', itemId: 'kishins', quantity: 1 }],
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
id: 'step-salvage',
|
|
238
|
+
description: 'Salvage 5 coins from the aftermath.',
|
|
239
|
+
objectives: [{ type: 'collect', itemId: 'coin', quantity: 5 }],
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
id: 'step-debrief-lain',
|
|
243
|
+
description: 'Debrief with Lain.',
|
|
244
|
+
objectives: [{ type: 'talk', itemId: 'lain', quantity: 1 }],
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
rewards: [{ itemId: 'coin', quantity: 25 }],
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
suffix: 'lumber-reserve',
|
|
251
|
+
title: 'Lumber Reserve',
|
|
252
|
+
description: 'Stock the winter reserve before the next cycle.',
|
|
253
|
+
steps: [
|
|
254
|
+
{
|
|
255
|
+
id: 'step-collect-wood',
|
|
256
|
+
description: 'Gather 4 pieces of wood.',
|
|
257
|
+
objectives: [{ type: 'collect', itemId: 'wood-drop-1', quantity: 4 }],
|
|
258
|
+
},
|
|
259
|
+
],
|
|
260
|
+
rewards: [{ itemId: 'coin', quantity: 30 }],
|
|
261
|
+
},
|
|
262
|
+
{
|
|
263
|
+
suffix: 'proof-of-valor',
|
|
264
|
+
title: 'Proof of Valor',
|
|
265
|
+
description: 'Show Lain you can hold the line on your own.',
|
|
266
|
+
talkLines: ['You held the line alone. The wired remembers that much.'],
|
|
267
|
+
steps: [
|
|
268
|
+
{
|
|
269
|
+
id: 'step-kill-kishins',
|
|
270
|
+
description: 'Defeat 5 Kishins.',
|
|
271
|
+
objectives: [{ type: 'kill', itemId: 'kishins', quantity: 5 }],
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
id: 'step-report-lain',
|
|
275
|
+
description: 'Report your feat to Lain.',
|
|
276
|
+
objectives: [{ type: 'talk', itemId: 'lain', quantity: 1 }],
|
|
277
|
+
},
|
|
278
|
+
],
|
|
279
|
+
rewards: [{ itemId: 'hatchet', quantity: 1 }],
|
|
280
|
+
},
|
|
281
|
+
];
|
|
282
|
+
|
|
283
|
+
const lainDemoQuestCode = (suffix) => `lain-demo-${suffix}`;
|
|
284
|
+
const lainDemoTalkDialogCode = (suffix) => `quest-talk-lain-${suffix}`;
|
|
285
|
+
|
|
286
|
+
/** Demo specs carrying a `talk` objective targeting Lain — these need a mapping. */
|
|
287
|
+
const LAIN_DEMO_TALK_SPECS = LAIN_DEMO_QUEST_SPECS.filter((q) =>
|
|
288
|
+
(q.steps || []).some((s) => (s.objectives || []).some((o) => o.type === 'talk' && o.itemId === 'lain')),
|
|
289
|
+
);
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Default dialogue seeds. Mirrors `CyberiaDialogue` model schema:
|
|
293
|
+
* { code, order, speaker, text, mood }
|
|
294
|
+
*
|
|
295
|
+
* Used by the seed/migration script to populate Mongo on first boot.
|
|
296
|
+
*/
|
|
297
|
+
export const DefaultCyberiaDialogues = [
|
|
298
|
+
{
|
|
299
|
+
code: 'default-coin',
|
|
300
|
+
order: 0,
|
|
301
|
+
speaker: 'Coin',
|
|
302
|
+
text: 'A standard unit of exchange in the cyberia network.',
|
|
303
|
+
mood: 'neutral',
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
code: 'default-atlas_pistol_mk2',
|
|
307
|
+
order: 0,
|
|
308
|
+
speaker: 'Atlas Pistol MK2',
|
|
309
|
+
text: 'Military-grade sidearm. Fires energy projectiles.',
|
|
310
|
+
mood: 'neutral',
|
|
311
|
+
},
|
|
312
|
+
{
|
|
313
|
+
code: 'default-atlas_pistol_mk2_bullet',
|
|
314
|
+
order: 0,
|
|
315
|
+
speaker: 'MK2 Bullet',
|
|
316
|
+
text: 'High-velocity energy round. Dissipates on impact.',
|
|
317
|
+
mood: 'neutral',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
code: 'default-hatchet',
|
|
321
|
+
order: 0,
|
|
322
|
+
speaker: 'Hatchet',
|
|
323
|
+
text: 'A crude but reliable melee tool. Good for close quarters.',
|
|
324
|
+
mood: 'neutral',
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
code: 'default-wason',
|
|
328
|
+
order: 0,
|
|
329
|
+
speaker: 'Wason',
|
|
330
|
+
text: 'They say I am just a wandering merchant... but I have seen things.',
|
|
331
|
+
mood: 'neutral',
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
code: 'default-wason',
|
|
335
|
+
order: 1,
|
|
336
|
+
speaker: 'Wason',
|
|
337
|
+
text: 'The network was not always like this. There was a time before the portals.',
|
|
338
|
+
mood: 'sad',
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
code: 'default-scp-2040',
|
|
342
|
+
order: 0,
|
|
343
|
+
speaker: 'SCP-2040',
|
|
344
|
+
text: 'CONTAINMENT PROTOCOL ACTIVE. Do not make direct eye contact.',
|
|
345
|
+
mood: 'angry',
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
code: 'default-scp-2040',
|
|
349
|
+
order: 1,
|
|
350
|
+
speaker: 'SCP-2040',
|
|
351
|
+
text: 'I remember everything. Every iteration. Every reset.',
|
|
352
|
+
mood: 'sad',
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
code: 'default-purple',
|
|
356
|
+
order: 0,
|
|
357
|
+
speaker: 'Purple',
|
|
358
|
+
text: 'The void between nodes is not empty — it is alive.',
|
|
359
|
+
mood: 'neutral',
|
|
360
|
+
},
|
|
361
|
+
{
|
|
362
|
+
code: 'default-punk',
|
|
363
|
+
order: 0,
|
|
364
|
+
speaker: 'Punk',
|
|
365
|
+
text: 'Rules are just code someone else wrote. I write my own.',
|
|
366
|
+
mood: 'happy',
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
code: 'default-lain',
|
|
370
|
+
order: 0,
|
|
371
|
+
speaker: 'Lain',
|
|
372
|
+
text: 'No matter where you go, everyone is connected.',
|
|
373
|
+
mood: 'neutral',
|
|
374
|
+
},
|
|
375
|
+
{
|
|
376
|
+
code: 'default-lain',
|
|
377
|
+
order: 1,
|
|
378
|
+
speaker: 'Lain',
|
|
379
|
+
text: 'If you are not remembered, then you never existed.',
|
|
380
|
+
mood: 'sad',
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
code: 'default-lain',
|
|
384
|
+
order: 2,
|
|
385
|
+
speaker: 'Lain',
|
|
386
|
+
text: 'The wired is not a separate world. It is layered over this one.',
|
|
387
|
+
mood: 'neutral',
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
code: 'default-kaneki',
|
|
391
|
+
order: 0,
|
|
392
|
+
speaker: 'Kaneki',
|
|
393
|
+
text: 'I am not the protagonist of a novel. I am just... me.',
|
|
394
|
+
mood: 'sad',
|
|
395
|
+
},
|
|
396
|
+
{ code: 'default-kaneki', order: 1, speaker: 'Kaneki', text: 'What is 1000 minus 7?', mood: 'angry' },
|
|
397
|
+
{
|
|
398
|
+
code: 'default-junko',
|
|
399
|
+
order: 0,
|
|
400
|
+
speaker: 'Junko',
|
|
401
|
+
text: 'Despair is the seed from which hope blooms!',
|
|
402
|
+
mood: 'happy',
|
|
403
|
+
},
|
|
404
|
+
{
|
|
405
|
+
code: 'default-junko',
|
|
406
|
+
order: 1,
|
|
407
|
+
speaker: 'Junko',
|
|
408
|
+
text: 'How boring... nothing ever surprises me anymore.',
|
|
409
|
+
mood: 'sad',
|
|
410
|
+
},
|
|
411
|
+
{ code: 'default-ghost', order: 0, speaker: 'fragmentation', text: '...', mood: 'neutral' },
|
|
412
|
+
{
|
|
413
|
+
code: 'default-eiri',
|
|
414
|
+
order: 0,
|
|
415
|
+
speaker: 'Eiri',
|
|
416
|
+
text: 'I am the god of the wired. I designed the protocol.',
|
|
417
|
+
mood: 'neutral',
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
code: 'default-eiri',
|
|
421
|
+
order: 1,
|
|
422
|
+
speaker: 'Eiri',
|
|
423
|
+
text: 'Flesh is just hardware. Consciousness is the only software that matters.',
|
|
424
|
+
mood: 'neutral',
|
|
425
|
+
},
|
|
426
|
+
{ code: 'default-anon', order: 0, speaker: '???', text: 'You should not be here. Turn back.', mood: 'angry' },
|
|
427
|
+
{
|
|
428
|
+
code: 'default-anon',
|
|
429
|
+
order: 1,
|
|
430
|
+
speaker: '???',
|
|
431
|
+
text: 'Or stay. It does not matter. Nothing leaves this place.',
|
|
432
|
+
mood: 'neutral',
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
code: 'default-alex',
|
|
436
|
+
order: 0,
|
|
437
|
+
speaker: 'Alex',
|
|
438
|
+
text: 'I have been mapping the portal network. Something does not add up.',
|
|
439
|
+
mood: 'neutral',
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
code: 'default-alex',
|
|
443
|
+
order: 1,
|
|
444
|
+
speaker: 'Alex',
|
|
445
|
+
text: 'There are nodes that exist in the registry but have no physical anchor.',
|
|
446
|
+
mood: 'neutral',
|
|
447
|
+
},
|
|
448
|
+
{
|
|
449
|
+
code: 'default-agent',
|
|
450
|
+
order: 0,
|
|
451
|
+
speaker: 'Agent',
|
|
452
|
+
text: 'Civilian, this area is restricted. State your business.',
|
|
453
|
+
mood: 'neutral',
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
code: 'default-agent',
|
|
457
|
+
order: 1,
|
|
458
|
+
speaker: 'Agent',
|
|
459
|
+
text: 'Hmm. Proceed, but know that you are being watched.',
|
|
460
|
+
mood: 'neutral',
|
|
461
|
+
},
|
|
462
|
+
{
|
|
463
|
+
code: 'default-grass',
|
|
464
|
+
order: 0,
|
|
465
|
+
speaker: 'Grass',
|
|
466
|
+
text: 'A patch of synthetic grass. It sways gently despite no wind.',
|
|
467
|
+
mood: 'neutral',
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
code: 'quest-talk-wason',
|
|
471
|
+
order: 0,
|
|
472
|
+
speaker: 'Wason',
|
|
473
|
+
text: 'Wanderer! Glad you stopped by. I need a favor — nothing dangerous... mostly.',
|
|
474
|
+
mood: 'happy',
|
|
475
|
+
},
|
|
476
|
+
{
|
|
477
|
+
code: 'quest-talk-wason',
|
|
478
|
+
order: 1,
|
|
479
|
+
speaker: 'Wason',
|
|
480
|
+
text: "First, find Alex — she's been surveying the nodes east of here. Then gather a hatchet for me.",
|
|
481
|
+
mood: 'neutral',
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
code: 'quest-talk-wason',
|
|
485
|
+
order: 2,
|
|
486
|
+
speaker: 'Wason',
|
|
487
|
+
text: 'And one more thing: the SCP-2040 anomalies are overrunning my trade routes. Deal with two of them.',
|
|
488
|
+
mood: 'sad',
|
|
489
|
+
},
|
|
490
|
+
{
|
|
491
|
+
code: 'quest-talk-alex',
|
|
492
|
+
order: 0,
|
|
493
|
+
speaker: 'Alex',
|
|
494
|
+
text: "Wason sent you? Good. The portal anomalies are getting worse. I've logged what I can.",
|
|
495
|
+
mood: 'neutral',
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
code: 'quest-talk-alex',
|
|
499
|
+
order: 1,
|
|
500
|
+
speaker: 'Alex',
|
|
501
|
+
text: 'Tell Wason: the source is somewhere in the deeper nodes. The registry does not lie.',
|
|
502
|
+
mood: 'neutral',
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
code: 'talk-lain',
|
|
506
|
+
order: 0,
|
|
507
|
+
speaker: 'Lain',
|
|
508
|
+
text: 'Present day... present time. You are here, so you are real.',
|
|
509
|
+
mood: 'neutral',
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
code: 'talk-lain',
|
|
513
|
+
order: 1,
|
|
514
|
+
speaker: 'Lain',
|
|
515
|
+
text: 'There is nothing I can grant you. Only the wired remembers.',
|
|
516
|
+
mood: 'neutral',
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
code: 'quest-talk-wason-errand',
|
|
520
|
+
order: 0,
|
|
521
|
+
speaker: 'Wason',
|
|
522
|
+
text: 'A small thing, friend — the field is littered with loose coin. Gather a few and bring them here.',
|
|
523
|
+
mood: 'happy',
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
code: 'quest-talk-wason-errand',
|
|
527
|
+
order: 1,
|
|
528
|
+
speaker: 'Wason',
|
|
529
|
+
text: 'You have my thanks. A good hatchet for an honest errand.',
|
|
530
|
+
mood: 'neutral',
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
code: 'quest-talk-agent',
|
|
534
|
+
order: 0,
|
|
535
|
+
speaker: 'Agent',
|
|
536
|
+
text: 'Civilian. There is a bounty if you have the stomach for it. Eliminate the threat, collect the drop, report back.',
|
|
537
|
+
mood: 'neutral',
|
|
538
|
+
},
|
|
539
|
+
// One quest-talk dialogue per Lain demo quest that has a `talk` objective.
|
|
540
|
+
...LAIN_DEMO_TALK_SPECS.flatMap((q) =>
|
|
541
|
+
(q.talkLines || [`Report received: ${q.title}.`]).map((text, order) => ({
|
|
542
|
+
code: lainDemoTalkDialogCode(q.suffix),
|
|
543
|
+
order,
|
|
544
|
+
speaker: 'Lain',
|
|
545
|
+
text,
|
|
546
|
+
mood: 'neutral',
|
|
547
|
+
})),
|
|
548
|
+
),
|
|
549
|
+
];
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Default action catalog — drives NPC interaction overlays and quest grants.
|
|
553
|
+
* Each entry follows the `CyberiaAction` model schema.
|
|
554
|
+
*/
|
|
555
|
+
export const DefaultCyberiaActions = [
|
|
556
|
+
// An action has no `type`: it declares the capabilities available at a cell.
|
|
557
|
+
// `code` is a generic location slug; `label` is the bot's overhead name (the
|
|
558
|
+
// client fetches it by code via REST). The NPC skin is derived from
|
|
559
|
+
// `dialogCode` (default-<skin>). `questDialogueCodes` maps each quest the NPC
|
|
560
|
+
// handles to the dialogue shown for it (offer + talk-objective validation).
|
|
561
|
+
// The quests an NPC OFFERS are those whose source cell matches the action's.
|
|
562
|
+
{
|
|
563
|
+
code: 'loc-fallback-map-0-12-10',
|
|
564
|
+
label: 'Wason',
|
|
565
|
+
sourceMapCode: 'fallback-map-0',
|
|
566
|
+
sourceCellX: 12,
|
|
567
|
+
sourceCellY: 10,
|
|
568
|
+
dialogCode: 'default-wason',
|
|
569
|
+
questDialogueCodes: [
|
|
570
|
+
{ questCode: 'fallback-intro-quest', dialogCode: 'quest-talk-wason' },
|
|
571
|
+
{ questCode: 'wason-errand', dialogCode: 'quest-talk-wason-errand' },
|
|
572
|
+
// bounty's report-back talk happens here too (bounty is offered at the agent cell).
|
|
573
|
+
{ questCode: 'bounty-quest-alpha', dialogCode: 'quest-talk-wason' },
|
|
574
|
+
],
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
code: 'loc-fallback-map-0-18-10',
|
|
578
|
+
label: 'Alex',
|
|
579
|
+
sourceMapCode: 'fallback-map-0',
|
|
580
|
+
sourceCellX: 18,
|
|
581
|
+
sourceCellY: 10,
|
|
582
|
+
dialogCode: 'default-alex',
|
|
583
|
+
questDialogueCodes: [{ questCode: 'fallback-intro-quest', dialogCode: 'quest-talk-alex' }],
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
code: 'loc-fallback-map-0-12-16',
|
|
587
|
+
label: 'Agent',
|
|
588
|
+
sourceMapCode: 'fallback-map-0',
|
|
589
|
+
sourceCellX: 12,
|
|
590
|
+
sourceCellY: 16,
|
|
591
|
+
dialogCode: 'default-agent',
|
|
592
|
+
questDialogueCodes: [{ questCode: 'bounty-quest-alpha', dialogCode: 'quest-talk-agent' }],
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
code: 'loc-fallback-map-0-15-22',
|
|
596
|
+
label: 'Lain',
|
|
597
|
+
sourceMapCode: 'fallback-map-0',
|
|
598
|
+
sourceCellX: 15,
|
|
599
|
+
sourceCellY: 22,
|
|
600
|
+
dialogCode: 'default-lain',
|
|
601
|
+
// Every demo quest with a `talk` objective gets its own quest-talk
|
|
602
|
+
// dialogue here — without the mapping the server would accept the
|
|
603
|
+
// default greeting as the talk, and no quest-talk button would show.
|
|
604
|
+
questDialogueCodes: LAIN_DEMO_TALK_SPECS.map((q) => ({
|
|
605
|
+
questCode: lainDemoQuestCode(q.suffix),
|
|
606
|
+
dialogCode: lainDemoTalkDialogCode(q.suffix),
|
|
607
|
+
})),
|
|
608
|
+
},
|
|
609
|
+
];
|
|
610
|
+
|
|
611
|
+
/**
|
|
612
|
+
* Default quest definitions for the fallback world. Mirrors `CyberiaQuest`
|
|
613
|
+
* schema. Objective types: 'talk' | 'collect' | 'kill'.
|
|
614
|
+
*/
|
|
615
|
+
export const DefaultCyberiaQuests = [
|
|
616
|
+
{
|
|
617
|
+
code: 'fallback-intro-quest',
|
|
618
|
+
title: "The Wanderer's Task",
|
|
619
|
+
description: 'Help Wason restore order to the fractured nodes.',
|
|
620
|
+
// Spatial binding — must match the granting action `wason-quest-intro`.
|
|
621
|
+
sourceMapCode: 'fallback-map-0',
|
|
622
|
+
sourceCellX: 12,
|
|
623
|
+
sourceCellY: 10,
|
|
624
|
+
prerequisiteCodes: [],
|
|
625
|
+
unlocksQuestCodes: ['bounty-quest-alpha'],
|
|
626
|
+
steps: [
|
|
627
|
+
{
|
|
628
|
+
id: 'step-talk-alex',
|
|
629
|
+
description: 'Find Alex and hear her report on the portal anomalies.',
|
|
630
|
+
objectives: [{ type: 'talk', itemId: 'alex', quantity: 1 }],
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
id: 'step-collect-wood',
|
|
634
|
+
description: 'Obtain a wood for Wason.',
|
|
635
|
+
objectives: [{ type: 'collect', itemId: 'wood-drop-1', quantity: 1 }],
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
id: 'step-kill-kishins',
|
|
639
|
+
description: 'Eliminate Kishins anomalies threatening the trade routes.',
|
|
640
|
+
objectives: [{ type: 'kill', itemId: 'kishins', quantity: 2 }],
|
|
641
|
+
},
|
|
642
|
+
],
|
|
643
|
+
rewards: [{ itemId: 'coin', quantity: 50 }],
|
|
644
|
+
},
|
|
645
|
+
{
|
|
646
|
+
// Parallel initial mission — same source cell as Wason (12,10), no
|
|
647
|
+
// prerequisites, so the player can accept it alongside the intro quest.
|
|
648
|
+
code: 'wason-errand',
|
|
649
|
+
title: "Wason's Errand",
|
|
650
|
+
description: 'Gather coins from the field and bring them back to Wason.',
|
|
651
|
+
sourceMapCode: 'fallback-map-0',
|
|
652
|
+
sourceCellX: 12,
|
|
653
|
+
sourceCellY: 10,
|
|
654
|
+
prerequisiteCodes: [],
|
|
655
|
+
unlocksQuestCodes: [],
|
|
656
|
+
steps: [
|
|
657
|
+
{
|
|
658
|
+
id: 'step-collect-coins',
|
|
659
|
+
description: 'Collect 5 coins.',
|
|
660
|
+
objectives: [{ type: 'collect', itemId: 'coin', quantity: 5 }],
|
|
661
|
+
},
|
|
662
|
+
{
|
|
663
|
+
id: 'step-return-wason',
|
|
664
|
+
description: 'Return to Wason.',
|
|
665
|
+
objectives: [{ type: 'talk', itemId: 'wason', quantity: 1 }],
|
|
666
|
+
},
|
|
667
|
+
],
|
|
668
|
+
rewards: [{ itemId: 'hatchet', quantity: 1 }],
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
code: 'bounty-quest-alpha',
|
|
672
|
+
title: 'Alpha Bounty',
|
|
673
|
+
description: 'A field test: eliminate a threat, claim your reward, then report back.',
|
|
674
|
+
// Spatial binding — must match the granting action `agent-mission-brief`.
|
|
675
|
+
sourceMapCode: 'fallback-map-0',
|
|
676
|
+
sourceCellX: 12,
|
|
677
|
+
sourceCellY: 16,
|
|
678
|
+
prerequisiteCodes: ['fallback-intro-quest'],
|
|
679
|
+
unlocksQuestCodes: [],
|
|
680
|
+
steps: [
|
|
681
|
+
{
|
|
682
|
+
id: 'step-kill-first',
|
|
683
|
+
description: 'Eliminate the Kishins threat.',
|
|
684
|
+
objectives: [{ type: 'kill', itemId: 'kishins', quantity: 1 }],
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
id: 'step-collect-reward',
|
|
688
|
+
description: 'Collect the bounty coin drop.',
|
|
689
|
+
objectives: [{ type: 'collect', itemId: 'coin', quantity: 10 }],
|
|
690
|
+
},
|
|
691
|
+
{
|
|
692
|
+
id: 'step-report-wason',
|
|
693
|
+
description: 'Report back to Wason.',
|
|
694
|
+
objectives: [{ type: 'talk', itemId: 'wason', quantity: 1 }],
|
|
695
|
+
},
|
|
696
|
+
],
|
|
697
|
+
rewards: [{ itemId: 'hatchet', quantity: 1 }],
|
|
698
|
+
},
|
|
699
|
+
// ── Demo quests (testing only) ─────────────────────────────────────────────
|
|
700
|
+
// Built from LAIN_DEMO_QUEST_SPECS so the quest definitions, their
|
|
701
|
+
// quest-talk dialogues, and Lain's questDialogueCodes mapping stay in sync.
|
|
702
|
+
...LAIN_DEMO_QUEST_SPECS.map((q) => ({
|
|
703
|
+
code: lainDemoQuestCode(q.suffix),
|
|
704
|
+
title: q.title,
|
|
705
|
+
description: q.description,
|
|
706
|
+
sourceMapCode: 'fallback-map-0',
|
|
707
|
+
sourceCellX: 15,
|
|
708
|
+
sourceCellY: 22,
|
|
709
|
+
prerequisiteCodes: [],
|
|
710
|
+
unlocksQuestCodes: [],
|
|
711
|
+
steps: q.steps,
|
|
712
|
+
rewards: q.rewards,
|
|
713
|
+
})),
|
|
714
|
+
];
|
|
715
|
+
|
|
716
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
717
|
+
// Equipment rules
|
|
718
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
719
|
+
|
|
720
|
+
/**
|
|
721
|
+
* Governs which ObjectLayer item types may be simultaneously active on an
|
|
722
|
+
* entity and enforces the one-per-type constraint. The server validates
|
|
723
|
+
* every item_activation request against these rules, scoped to the item set
|
|
724
|
+
* of the entity's current state: liveItemIds while alive, deadItemIds while
|
|
725
|
+
* in the Fragmented State (see DEFAULT_DEAD_ITEM_ID).
|
|
726
|
+
*/
|
|
727
|
+
export const EQUIPMENT_RULES_DEFAULTS = Object.freeze({
|
|
728
|
+
activeItemTypes: [ITEM_TYPES.skin, ITEM_TYPES.breastplate, ITEM_TYPES.weapon],
|
|
729
|
+
onePerType: true,
|
|
730
|
+
requireSkin: true,
|
|
731
|
+
});
|
|
732
|
+
|
|
733
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
734
|
+
// Entity Status Indicators (server-side numeric table)
|
|
735
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
736
|
+
|
|
737
|
+
/**
|
|
738
|
+
* Numeric Entity Status Indicator (ESI) IDs. The Go server stamps one of
|
|
739
|
+
* these u8 IDs on every entity in the AOI binary wire format; the client
|
|
740
|
+
* resolves the icon stem + border colour from its own presentation
|
|
741
|
+
* defaults table (see `SharedDefaultsCyberia.js#STATUS_ICONS_PRESENTATION`).
|
|
742
|
+
*
|
|
743
|
+
* IDs MUST stay in sync with:
|
|
744
|
+
* cyberia-server/src/entity_status.go (StatusNone … StatusResourceExtracted)
|
|
745
|
+
*/
|
|
746
|
+
export const STATUS_ICONS = Object.freeze([
|
|
747
|
+
{ id: 0, name: 'none', description: 'No icon (skill/coin bots, world objects)' },
|
|
748
|
+
{ id: 1, name: 'passive', description: 'Passive bot — no weapon, non-aggressive' },
|
|
749
|
+
{ id: 2, name: 'hostile', description: 'Hostile bot — has weapon, will aggro' },
|
|
750
|
+
{ id: 3, name: 'frozen', description: 'Player in FrozenInteractionState (modal open)' },
|
|
751
|
+
{ id: 4, name: 'player', description: 'Normal player — alive, not frozen' },
|
|
752
|
+
{ id: 5, name: 'dead', description: 'Entity is dead / respawning' },
|
|
753
|
+
{ id: 6, name: 'resource', description: 'Resource entity — static, exploitable (wood, minerals, etc.)' },
|
|
754
|
+
{ id: 7, name: 'resource-extracted', description: 'Resource entity extracted/depleted (dead state)' },
|
|
755
|
+
{
|
|
756
|
+
id: 8,
|
|
757
|
+
name: 'action-provider',
|
|
758
|
+
description:
|
|
759
|
+
'Capability: bot has a usable cyberia-action (shop/storage/craft/talk) for players who can interact with it. Sent as a capability bit, not a presence state.',
|
|
760
|
+
},
|
|
761
|
+
{
|
|
762
|
+
id: 9,
|
|
763
|
+
name: 'quest-provider',
|
|
764
|
+
description:
|
|
765
|
+
'Capability: bot offers or advances a cyberia-quest for the viewing player (acceptable offer or active talk-target). Sent as a capability bit, not a presence state.',
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
id: 10,
|
|
769
|
+
name: 'portal',
|
|
770
|
+
description:
|
|
771
|
+
'Presence: fixed-target portal / transport entity. The client renders the transport icon plus a "<targetMapCode> <x>,<y>" nameplate.',
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
id: 11,
|
|
775
|
+
name: 'portal-random',
|
|
776
|
+
description:
|
|
777
|
+
'Presence: random-target portal (inter-random / intra-random, targetCell -1,-1). The client renders the transport-random icon plus a "<targetMapCode>" nameplate (no cell, the destination is random).',
|
|
778
|
+
},
|
|
779
|
+
]);
|
|
780
|
+
|
|
781
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
782
|
+
// Per-entity-type defaults (simulation-side only — no presentation here)
|
|
783
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
784
|
+
|
|
785
|
+
/**
|
|
786
|
+
* Resource entity variants. Each declares the live / extracted / drop item
|
|
787
|
+
* triplet the simulation rotates through when a resource is depleted.
|
|
788
|
+
*/
|
|
789
|
+
export const RESOURCE_ENTITY_TYPE_DEFAULTS = Object.freeze([
|
|
790
|
+
Object.freeze({
|
|
791
|
+
entityType: ENTITY_TYPES.resource,
|
|
792
|
+
liveItemIds: ['wood-1'],
|
|
793
|
+
deadItemIds: ['wood-extracted-1'],
|
|
794
|
+
dropItemIds: ['wood-drop-1'],
|
|
795
|
+
defaultObjectLayers: [],
|
|
796
|
+
}),
|
|
797
|
+
Object.freeze({
|
|
798
|
+
entityType: ENTITY_TYPES.resource,
|
|
799
|
+
liveItemIds: ['wood-2'],
|
|
800
|
+
deadItemIds: ['wood-extracted-2'],
|
|
801
|
+
dropItemIds: ['wood-drop-2'],
|
|
802
|
+
defaultObjectLayers: [],
|
|
803
|
+
}),
|
|
804
|
+
]);
|
|
805
|
+
|
|
806
|
+
/** Convenience alias — first variant, used by single-resource fallbacks. */
|
|
807
|
+
export const RESOURCE_ENTITY_TYPE_DEFAULT = RESOURCE_ENTITY_TYPE_DEFAULTS[0];
|
|
808
|
+
|
|
809
|
+
/**
|
|
810
|
+
* Canonical dead-state visual (Fragmentation): applied by cyberia-server when
|
|
811
|
+
* an entity-type default declares no deadItemIds. Dead-state items — this
|
|
812
|
+
* default and any deadItemIds configured via MongoDB — form the Fragmented
|
|
813
|
+
* State's aesthetic loadout: equippable only while the entity is dead, under
|
|
814
|
+
* EQUIPMENT_RULES_DEFAULTS scoped to the dead-item set, and remembered across
|
|
815
|
+
* deaths. Only this default id is excluded from the player inventory wire;
|
|
816
|
+
* the rest appear (lock-badged while alive). No defaultObjectLayers row is
|
|
817
|
+
* needed — the death handler appends missing dead items on demand.
|
|
818
|
+
* Mirrored by `defaultDeadItemID` in cyberia-server/game/dead_items.go.
|
|
819
|
+
*/
|
|
820
|
+
export const DEFAULT_DEAD_ITEM_ID = 'fragmentation';
|
|
821
|
+
|
|
822
|
+
/**
|
|
823
|
+
* Per-entity-type defaults consumed by the Go server (live / dead / drop
|
|
824
|
+
* item IDs and the seed inventory for newly spawned entities).
|
|
825
|
+
*
|
|
826
|
+
* Field reference:
|
|
827
|
+
* entityType — server-side category string.
|
|
828
|
+
* liveItemIds — ObjectLayer item IDs while the entity is alive.
|
|
829
|
+
* deadItemIds — IDs swapped in on death / ghost state.
|
|
830
|
+
* dropItemIds — IDs granted to the killer on resource depletion.
|
|
831
|
+
* defaultObjectLayers — initial inventory rows ({itemId, active, qty}).
|
|
832
|
+
*/
|
|
833
|
+
export const ENTITY_TYPE_DEFAULTS = Object.freeze([
|
|
834
|
+
{
|
|
835
|
+
entityType: ENTITY_TYPES.player,
|
|
836
|
+
liveItemIds: ['anon', 'atlas_pistol_mk2'],
|
|
837
|
+
deadItemIds: [DEFAULT_DEAD_ITEM_ID],
|
|
838
|
+
defaultObjectLayers: [
|
|
839
|
+
{ itemId: 'anon', active: true, quantity: 1 },
|
|
840
|
+
{ itemId: 'atlas_pistol_mk2', active: true, quantity: 1 },
|
|
841
|
+
{ itemId: 'coin', active: false, quantity: 0 },
|
|
842
|
+
{ itemId: 'eiri', active: false, quantity: 1 },
|
|
843
|
+
],
|
|
844
|
+
},
|
|
845
|
+
{
|
|
846
|
+
entityType: ENTITY_TYPES.other_player,
|
|
847
|
+
liveItemIds: ['anon', 'atlas_pistol_mk2'],
|
|
848
|
+
deadItemIds: [DEFAULT_DEAD_ITEM_ID],
|
|
849
|
+
defaultObjectLayers: [
|
|
850
|
+
{ itemId: 'anon', active: true, quantity: 1 },
|
|
851
|
+
{ itemId: 'atlas_pistol_mk2', active: true, quantity: 1 },
|
|
852
|
+
{ itemId: 'coin', active: false, quantity: 0 },
|
|
853
|
+
],
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
entityType: ENTITY_TYPES.bot,
|
|
857
|
+
liveItemIds: ['purple'],
|
|
858
|
+
deadItemIds: [DEFAULT_DEAD_ITEM_ID],
|
|
859
|
+
defaultObjectLayers: [
|
|
860
|
+
{ itemId: 'purple', active: true, quantity: 1 },
|
|
861
|
+
{ itemId: 'coin', active: false, quantity: 0 },
|
|
862
|
+
],
|
|
863
|
+
},
|
|
864
|
+
// Fallback-world mission/action givers. Resolved by their active skin (the
|
|
865
|
+
// liveItemIds key), these bots take the canonical `provider` behavior: they
|
|
866
|
+
// barely move from their spawn and are immortal. Lain only talks in place, so
|
|
867
|
+
// she is fully static. Authors can retarget any of these via EntityEngineCyberia.
|
|
868
|
+
{ entityType: ENTITY_TYPES.bot, liveItemIds: ['wason'], deadItemIds: [DEFAULT_DEAD_ITEM_ID], behavior: 'provider' },
|
|
869
|
+
{ entityType: ENTITY_TYPES.bot, liveItemIds: ['alex'], deadItemIds: [DEFAULT_DEAD_ITEM_ID], behavior: 'provider' },
|
|
870
|
+
{ entityType: ENTITY_TYPES.bot, liveItemIds: ['agent'], deadItemIds: [DEFAULT_DEAD_ITEM_ID], behavior: 'provider' },
|
|
871
|
+
{
|
|
872
|
+
entityType: ENTITY_TYPES.bot,
|
|
873
|
+
liveItemIds: ['lain'],
|
|
874
|
+
deadItemIds: [DEFAULT_DEAD_ITEM_ID],
|
|
875
|
+
behavior: 'provider-static',
|
|
876
|
+
},
|
|
877
|
+
{
|
|
878
|
+
entityType: ENTITY_TYPES.skill,
|
|
879
|
+
liveItemIds: ['atlas_pistol_mk2_bullet'],
|
|
880
|
+
deadItemIds: [],
|
|
881
|
+
defaultObjectLayers: [{ itemId: 'atlas_pistol_mk2_bullet', active: true, quantity: 1 }],
|
|
882
|
+
},
|
|
883
|
+
{
|
|
884
|
+
entityType: ENTITY_TYPES.coin,
|
|
885
|
+
liveItemIds: ['coin'],
|
|
886
|
+
deadItemIds: [],
|
|
887
|
+
defaultObjectLayers: [{ itemId: 'coin', active: true, quantity: 1 }],
|
|
888
|
+
},
|
|
889
|
+
{ entityType: ENTITY_TYPES.floor, liveItemIds: ['grass'], deadItemIds: [], dropItemIds: [], defaultObjectLayers: [] },
|
|
890
|
+
{ entityType: ENTITY_TYPES.obstacle, liveItemIds: [], deadItemIds: [], dropItemIds: [], defaultObjectLayers: [] },
|
|
891
|
+
{ entityType: ENTITY_TYPES.portal, liveItemIds: [], deadItemIds: [], dropItemIds: [], defaultObjectLayers: [] },
|
|
892
|
+
{ entityType: ENTITY_TYPES.foreground, liveItemIds: [], deadItemIds: [], dropItemIds: [], defaultObjectLayers: [] },
|
|
893
|
+
// Static decorator — non-moving, passable, depth-sorted. Visuals come from the
|
|
894
|
+
// map definition / world generator; no live/dead/drop rotation.
|
|
895
|
+
{ entityType: ENTITY_TYPES.static, liveItemIds: [], deadItemIds: [], dropItemIds: [], defaultObjectLayers: [] },
|
|
896
|
+
...RESOURCE_ENTITY_TYPE_DEFAULTS,
|
|
897
|
+
]);
|
|
898
|
+
|
|
899
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
900
|
+
// Player spawn
|
|
901
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
902
|
+
|
|
903
|
+
/**
|
|
904
|
+
* Canonical default player spawn policy. Mirrors PlayerSpawnSchema in
|
|
905
|
+
* cyberia-instance.model.js and the Go PlayerSpawnConfig: when `random` is false
|
|
906
|
+
* and `sourceMapCode` names a loaded map, new players spawn at
|
|
907
|
+
* (sourceCellX, sourceCellY) on it; otherwise (random, or no/unknown map) they
|
|
908
|
+
* spawn at a random walkable cell on a random map.
|
|
909
|
+
*
|
|
910
|
+
* The canonical default is a random spawn so a fresh or procedural world never
|
|
911
|
+
* piles every new player onto a single cell.
|
|
912
|
+
*/
|
|
913
|
+
export const DEFAULT_PLAYER_SPAWN = Object.freeze({
|
|
914
|
+
sourceMapCode: 'fallback-map-0',
|
|
915
|
+
sourceCellX: 3,
|
|
916
|
+
sourceCellY: 3,
|
|
917
|
+
random: false,
|
|
918
|
+
});
|
|
919
|
+
|
|
920
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
921
|
+
// Instance-level simulation configuration
|
|
922
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
923
|
+
|
|
924
|
+
/**
|
|
925
|
+
* Canonical default Cyberia instance configuration consumed by the gRPC
|
|
926
|
+
* `InstanceConfig` payload. ONLY gameplay-affecting values live here.
|
|
927
|
+
*
|
|
928
|
+
* Anything that does not influence the authoritative simulation (cell-pixel
|
|
929
|
+
* size, camera tunings, palette, interpolation window, render flags) is
|
|
930
|
+
* forbidden — see `SharedDefaultsCyberia.js` and the
|
|
931
|
+
* `/api/cyberia-client-hints` REST endpoint for presentation overrides.
|
|
932
|
+
*/
|
|
933
|
+
export const CYBERIA_INSTANCE_CONF_DEFAULTS = {
|
|
934
|
+
// ── Tick model ─────────────────────────────────────────────────────
|
|
935
|
+
tickRate: 60,
|
|
936
|
+
snapshotRate: 20,
|
|
937
|
+
|
|
938
|
+
// ── World / AOI ────────────────────────────────────────────────────
|
|
939
|
+
aoiRadius: 10,
|
|
940
|
+
portalHoldTimeMs: 3000,
|
|
941
|
+
portalSpawnRadius: 3,
|
|
942
|
+
|
|
943
|
+
// ── Entity base stats ──────────────────────────────────────────────
|
|
944
|
+
entityBaseSpeed: 5,
|
|
945
|
+
entityBaseMaxLife: 100,
|
|
946
|
+
entityBaseActionCooldownMs: 500,
|
|
947
|
+
entityBaseMinActionCooldownMs: 100,
|
|
948
|
+
|
|
949
|
+
// ── Bot defaults ───────────────────────────────────────────────────
|
|
950
|
+
botAggroRange: 10,
|
|
951
|
+
|
|
952
|
+
// ── Player defaults ────────────────────────────────────────────────
|
|
953
|
+
defaultPlayerWidth: 2,
|
|
954
|
+
defaultPlayerHeight: 2,
|
|
955
|
+
playerBaseLifeRegenMin: 0.5,
|
|
956
|
+
playerBaseLifeRegenMax: 1.5,
|
|
957
|
+
sumStatsLimit: 500,
|
|
958
|
+
maxActiveLayers: 4,
|
|
959
|
+
initialLifeFraction: 1.0,
|
|
960
|
+
|
|
961
|
+
// ── Combat / death ─────────────────────────────────────────────────
|
|
962
|
+
respawnDurationMs: 3000,
|
|
963
|
+
collisionLifeLoss: 10,
|
|
964
|
+
|
|
965
|
+
// ── Economy — Fountain & Sink model ────────────────────────────────
|
|
966
|
+
economyRules: {
|
|
967
|
+
botSpawnCoins: 50,
|
|
968
|
+
playerSpawnCoins: 50,
|
|
969
|
+
coinKillPercentVsBot: 0.4,
|
|
970
|
+
coinKillPercentVsPlayer: 0.15,
|
|
971
|
+
coinKillMinAmount: 10,
|
|
972
|
+
respawnCostPercent: 0.0,
|
|
973
|
+
portalFee: 0,
|
|
974
|
+
craftingFeePercent: 0.0,
|
|
975
|
+
},
|
|
976
|
+
|
|
977
|
+
// ── Regen ──────────────────────────────────────────────────────────
|
|
978
|
+
lifeRegenChance: 300,
|
|
979
|
+
maxChance: 10000,
|
|
980
|
+
|
|
981
|
+
// ── Per-entity-type defaults ───────────────────────────────────────
|
|
982
|
+
entityDefaults: ENTITY_TYPE_DEFAULTS.map((e) => ({ ...e })),
|
|
983
|
+
|
|
984
|
+
// ── Status icons (numeric IDs only — visuals live in client defaults) ──
|
|
985
|
+
statusIcons: STATUS_ICONS.map((s) => ({ ...s })),
|
|
986
|
+
|
|
987
|
+
// ── Skill system ───────────────────────────────────────────────────
|
|
988
|
+
// Canonical skill definitions live in DefaultSkillConfig above.
|
|
989
|
+
// This reference is the single point of consumption for the gRPC
|
|
990
|
+
// fallback defaults — any change goes through DefaultSkillConfig.
|
|
991
|
+
skillConfig: DefaultSkillConfig,
|
|
992
|
+
|
|
993
|
+
skillRules: {
|
|
994
|
+
projectileSpawnChance: 0.5,
|
|
995
|
+
projectileLifetimeMs: 2000,
|
|
996
|
+
projectileWidth: 1,
|
|
997
|
+
projectileHeight: 1,
|
|
998
|
+
projectileSpeedMultiplier: 3,
|
|
999
|
+
doppelgangerSpawnChance: 0.5,
|
|
1000
|
+
doppelgangerLifetimeMs: 5000,
|
|
1001
|
+
doppelgangerSpawnRadius: 3,
|
|
1002
|
+
doppelgangerInitialLifeFraction: 1.0,
|
|
1003
|
+
},
|
|
1004
|
+
|
|
1005
|
+
// ── Equipment Rules ────────────────────────────────────────────────
|
|
1006
|
+
equipmentRules: { ...EQUIPMENT_RULES_DEFAULTS },
|
|
1007
|
+
};
|
|
1008
|
+
|
|
1009
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
1010
|
+
// Instance-conf default backfill
|
|
1011
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
1012
|
+
|
|
1013
|
+
const _isPlainObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
1014
|
+
|
|
1015
|
+
const _cloneDefault = (v) => JSON.parse(JSON.stringify(v));
|
|
1016
|
+
|
|
1017
|
+
/**
|
|
1018
|
+
* Recursively backfill one value against its canonical default:
|
|
1019
|
+
* - null / undefined → deep clone of the default
|
|
1020
|
+
* - empty array → deep clone of the default (config lists must never
|
|
1021
|
+
* export empty — e.g. skillConfig, entityDefaults)
|
|
1022
|
+
* - non-empty array → kept verbatim (author content)
|
|
1023
|
+
* - plain object → keep author-set keys, recurse to fill missing default keys
|
|
1024
|
+
* - scalar → kept verbatim when present (0, '', false count as present)
|
|
1025
|
+
*/
|
|
1026
|
+
function _deepFillDefaults(value, defaultValue) {
|
|
1027
|
+
if (value === null || value === undefined) return _cloneDefault(defaultValue);
|
|
1028
|
+
if (Array.isArray(defaultValue)) {
|
|
1029
|
+
return Array.isArray(value) && value.length > 0 ? value : _cloneDefault(defaultValue);
|
|
1030
|
+
}
|
|
1031
|
+
if (_isPlainObject(defaultValue) && _isPlainObject(value)) {
|
|
1032
|
+
const out = { ...value };
|
|
1033
|
+
for (const key of Object.keys(defaultValue)) {
|
|
1034
|
+
out[key] = _deepFillDefaults(value[key], defaultValue[key]);
|
|
1035
|
+
}
|
|
1036
|
+
return out;
|
|
1037
|
+
}
|
|
1038
|
+
return value;
|
|
1039
|
+
}
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* Normalise a skillConfig array to the shape CyberiaInstanceConfSchema stores
|
|
1043
|
+
* (`SkillConfigEntrySchema` = { triggerItemId, logicEventIds }). The canonical
|
|
1044
|
+
* DefaultSkillConfig carries extra `skills` metadata the schema drops on write;
|
|
1045
|
+
* stripping it here keeps export ⇄ DB round-trips churn-free.
|
|
1046
|
+
*/
|
|
1047
|
+
function _normaliseSkillConfig(skillConfig) {
|
|
1048
|
+
if (!Array.isArray(skillConfig)) return [];
|
|
1049
|
+
return skillConfig.map((entry) => ({
|
|
1050
|
+
triggerItemId: entry.triggerItemId,
|
|
1051
|
+
logicEventIds: [...(entry.logicEventIds || [])],
|
|
1052
|
+
}));
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
/**
|
|
1056
|
+
* Return a copy of a CyberiaInstanceConf document with every field defined by
|
|
1057
|
+
* CyberiaInstanceConfSchema present. Missing, null/undefined, or empty-array
|
|
1058
|
+
* fields — common when a doc is read with `.lean()` (which skips Mongoose schema
|
|
1059
|
+
* defaults), was created before a schema field existed, or was seeded with the
|
|
1060
|
+
* schema's empty-array default (e.g. `skillConfig`) — are filled from
|
|
1061
|
+
* CYBERIA_INSTANCE_CONF_DEFAULTS, the same canonical values the fallback world
|
|
1062
|
+
* uses. Author-set scalars (including 0, '', false), non-empty arrays, and DB
|
|
1063
|
+
* metadata (_id, instanceCode, timestamps) are preserved untouched.
|
|
1064
|
+
*
|
|
1065
|
+
* @param {object} [conf]
|
|
1066
|
+
* @returns {object}
|
|
1067
|
+
*/
|
|
1068
|
+
export function fillInstanceConfDefaults(conf = {}) {
|
|
1069
|
+
const source = _isPlainObject(conf) ? conf : {};
|
|
1070
|
+
const out = { ...source };
|
|
1071
|
+
for (const key of Object.keys(CYBERIA_INSTANCE_CONF_DEFAULTS)) {
|
|
1072
|
+
out[key] = _deepFillDefaults(source[key], CYBERIA_INSTANCE_CONF_DEFAULTS[key]);
|
|
1073
|
+
}
|
|
1074
|
+
out.skillConfig = _normaliseSkillConfig(out.skillConfig);
|
|
1075
|
+
return out;
|
|
1076
|
+
}
|