@underpostnet/cyberia 3.2.90 → 3.3.73
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 +1 -0
- package/.env.example +16 -0
- package/.github/workflows/coverall.cyberia.ci.yml +107 -0
- package/.github/workflows/cyberia-client.cd.yml +6 -18
- package/.github/workflows/cyberia-server.cd.yml +6 -18
- package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
- package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
- package/.github/workflows/engine-cyberia.cd.yml +6 -78
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +42 -21
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +2 -9
- package/.prettierignore +1 -0
- package/AGENTS.md +47 -0
- package/CHANGELOG.md +581 -2417
- package/CLI-HELP.md +416 -127
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +4 -4
- package/README.md +21 -1
- package/bin/build.js +70 -43
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +372 -135
- package/bin/deploy.js +18 -104
- package/bin/index.js +372 -135
- package/compose.env +16 -0
- package/conf.js +93 -4
- package/deploy/cyberia-client/deploy.sh +47 -0
- package/deploy/cyberia-client/package.sh +18 -0
- package/deploy/cyberia-client/state.sh +14 -0
- package/deploy/cyberia-server/deploy.sh +47 -0
- package/deploy/cyberia-server/package.sh +18 -0
- package/deploy/cyberia-server/state.sh +14 -0
- package/deploy/dd-cyberia/deploy.sh +22 -0
- package/deploy/dd-cyberia/init.sh +55 -0
- package/deploy/dd-cyberia/package.sh +17 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +116 -0
- package/deploy/lib/github-actions-logging.sh +594 -0
- package/deploy/lib/host.sh +185 -0
- package/deploy/lib/state.sh +62 -0
- package/deploy/pwa-microservices-template/deploy.sh +45 -0
- package/deploy/release/deploy.sh +32 -0
- package/deployment.yaml +7 -2
- package/docker-compose.yml +31 -37
- package/examples/static-page/README.md +19 -19
- package/examples/static-page/ssr-components/CustomPage.js +2 -2
- package/hardhat/hardhat.config.js +1 -6
- package/hardhat/package-lock.json +104 -43
- package/hardhat/package.json +3 -3
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +36 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +77 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/grafana/deployment.yaml +26 -7
- package/manifests/grafana/kustomization.yaml +1 -0
- package/manifests/grafana/service.yaml +6 -1
- package/manifests/mariadb/pv.yaml +1 -0
- package/manifests/mongodb/statefulset.yaml +9 -2
- package/manifests/mysql/pv-pvc.yaml +14 -1
- package/manifests/postgresql/pv.yaml +12 -1
- package/manifests/postgresql/pvc.yaml +1 -0
- package/manifests/prometheus/deployment.yaml +18 -22
- package/package.json +83 -10
- package/scripts/audit-selinux.sh +64 -0
- package/scripts/event-monitor.sh +56 -0
- package/scripts/gpu-diag.sh +0 -0
- package/scripts/ip-info.sh +0 -0
- package/scripts/k3s-node-setup.sh +30 -14
- package/scripts/kubeadm-node-setup.sh +40 -31
- package/scripts/lxd-vm-setup.sh +0 -0
- package/scripts/maas-nat-firewalld.sh +0 -0
- package/scripts/maas-setup.sh +8 -8
- package/scripts/nat-iptables.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +0 -0
- package/scripts/rocky-kickstart.sh +25 -9
- package/scripts/selinux-normalize.sh +907 -0
- package/scripts/shutdown-machine.sh +843 -0
- package/scripts/test-monitor.sh +3 -3
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
- package/src/api/core/core.controller.js +1 -1
- package/src/api/core/core.router.js +2 -2
- package/src/api/core/core.service.js +2 -2
- package/src/api/crypto/crypto.controller.js +1 -1
- package/src/api/crypto/crypto.service.js +1 -1
- package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +1 -1
- package/src/api/cyberia-action/cyberia-action.service.js +2 -2
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
- package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +16 -1
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +4 -1
- package/src/api/cyberia-instance/cyberia-instance.router.js +15 -2
- package/src/api/cyberia-instance/cyberia-instance.service.js +45 -2
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
- package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
- package/src/api/cyberia-map/cyberia-map.router.js +1 -1
- package/src/api/cyberia-map/cyberia-map.service.js +2 -2
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
- package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -29
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
- package/src/api/default/default.controller.js +1 -1
- package/src/api/default/default.router.js +1 -1
- package/src/api/default/default.service.js +2 -2
- package/src/api/document/document.controller.js +1 -1
- package/src/api/document/document.router.js +1 -1
- package/src/api/document/document.service.js +2 -2
- package/src/api/file/file.controller.js +1 -1
- package/src/api/file/file.router.js +1 -1
- package/src/api/file/file.service.js +2 -2
- package/src/api/instance/instance.controller.js +1 -1
- package/src/api/instance/instance.router.js +1 -1
- package/src/api/instance/instance.service.js +2 -2
- package/src/api/ipfs/ipfs.controller.js +1 -1
- package/src/api/ipfs/ipfs.router.js +2 -2
- package/src/api/ipfs/ipfs.service.js +2 -2
- package/src/api/object-layer/object-layer.controller.js +1 -1
- package/src/api/object-layer/object-layer.model.js +204 -3
- package/src/api/object-layer/object-layer.router.js +2 -2
- package/src/api/object-layer/object-layer.service.js +4 -17
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
- package/src/api/test/test.controller.js +1 -1
- package/src/api/test/test.service.js +1 -1
- package/src/api/user/guest.service.js +3 -3
- package/src/api/user/user.controller.js +1 -1
- package/src/api/user/user.router.js +2 -2
- package/src/api/user/user.service.js +4 -4
- package/src/api.js +5 -9
- package/src/cli/app.js +391 -0
- package/src/cli/baremetal.js +30 -36
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +242 -135
- package/src/cli/db.js +126 -67
- package/src/cli/deploy.js +158 -60
- package/src/cli/docker-compose.js +5 -5
- package/src/cli/domains.js +184 -0
- package/src/cli/dotenv-store.js +143 -0
- package/src/cli/event.js +2281 -0
- package/src/cli/fs.js +3 -3
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -7
- package/src/cli/index.js +426 -134
- package/src/cli/ipfs.js +34 -30
- package/src/cli/kickstart.js +1 -1
- package/src/cli/kubectl.js +218 -41
- package/src/cli/lxd.js +3 -3
- package/src/cli/monitor.js +1359 -26
- package/src/cli/package.js +90 -0
- package/src/cli/release.js +73 -34
- package/src/cli/repository.js +564 -367
- package/src/cli/run.js +362 -654
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +651 -331
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +26 -13
- package/src/cli/test.js +199 -125
- package/src/cli/vultr.js +623 -0
- package/src/cli/wireguard.js +2930 -0
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +258 -211
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/PanelForm.js +4 -4
- package/src/client/components/core/Repository.js +56 -0
- package/src/client/components/core/Translate.js +7 -0
- package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
- package/src/client/components/core/Wallet.js +0 -11
- package/src/client/components/core/Worker.js +7 -1
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
- package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +35 -1
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppShellDefault.js +1 -1
- package/src/client/components/default/SettingsDefault.js +2 -2
- package/src/client/components/itemledger/SettingsItemledger.js +2 -2
- package/src/client/components/underpost/AppShellUnderpost.js +3 -2
- package/src/client/components/underpost/SettingsUnderpost.js +2 -2
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
- package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- 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.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.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.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.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/white.jpg +0 -0
- package/src/client/public/default/browserconfig.xml +1 -1
- 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 +5 -5
- 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/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +1 -1
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
- package/src/client/services/object-layer/object-layer.management.js +4 -4
- package/src/client/ssr/RootDocument.js +1 -1
- package/src/client/ssr/body/404.js +1 -1
- package/src/client/ssr/body/500.js +1 -1
- package/src/client/ssr/body/CacheControl.js +1 -1
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
- package/src/client/ssr/head/CryptokoynScripts.js +1 -1
- package/src/client/ssr/head/Css.js +1 -1
- package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
- package/src/client/ssr/head/DefaultScripts.js +1 -1
- package/src/client/ssr/head/ItemledgerScripts.js +1 -1
- package/src/client/ssr/head/Microdata.js +1 -1
- package/src/client/ssr/head/Production.js +1 -1
- package/src/client/ssr/head/Pwa.js +1 -1
- package/src/client/ssr/head/PwaItemledger.js +1 -1
- package/src/client/ssr/head/Seo.js +1 -1
- package/src/client/ssr/head/UnderpostScripts.js +1 -1
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
- package/src/client/ssr/views/Cyberia404.js +7 -5
- package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/views/Maintenance.js +1 -1
- package/src/client/ssr/views/NoNetworkConnection.js +1 -1
- package/src/client/ssr/views/Test.js +1 -1
- package/src/client/sw/core.sw.js +20 -14
- package/src/client-builder/client-build-docs.js +61 -46
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +58 -44
- package/src/client-builder/client-dev-server.js +3 -3
- package/src/client-builder/client-icons.js +2 -2
- package/src/client-builder/ssr.js +3 -3
- package/src/client.build.js +3 -6
- package/src/client.dev.js +3 -6
- package/src/db/DataBaseProvider.js +186 -3
- package/src/db/mariadb/MariaDB.js +3 -2
- package/src/db/mongo/MongoBootstrap.js +273 -101
- package/src/db/mongo/MongooseDB.js +11 -8
- package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
- package/src/grpc/cyberia/grpc-server.js +1 -1
- package/src/index.js +103 -23
- package/src/mailer/EmailRender.js +2 -2
- package/src/mailer/MailerInterceptor.js +87 -0
- package/src/mailer/MailerProvider.js +50 -6
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
- package/src/projects/cyberia/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +54 -6
- package/src/projects/cyberia/gemini-client.js +1 -1
- package/src/projects/cyberia/generate-saga.js +15 -24
- package/src/projects/cyberia/hot-reload-trigger.js +1 -1
- package/src/projects/cyberia/instance-data.js +22 -3
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +1 -1
- package/src/projects/cyberia/object-layer.js +12 -22
- package/src/projects/cyberia/semantic-layer-generator.js +1 -1
- package/src/projects/underpost/catalog-underpost.js +13 -2
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +9 -4
- package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
- package/src/runtime/cyberia-server/Dockerfile +9 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
- package/src/runtime/engine-cyberia/compose.env +16 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
- package/src/runtime/express/Express.js +32 -27
- package/src/runtime/lampp/Lampp.js +22 -70
- package/src/runtime/nginx/Nginx.js +1 -1
- package/src/runtime/wp/Wp.js +16 -48
- package/src/server/{catalog.js → build/catalog.js} +15 -5
- package/src/server/build/coverage.js +117 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +465 -0
- package/src/server/build/testing.js +528 -0
- package/src/server/{dns.js → network/dns.js} +241 -14
- package/src/server/network/forward-proxy.js +541 -0
- package/src/server/{middlewares.js → network/middlewares.js} +59 -4
- package/src/server/network/node-capability.js +98 -0
- package/src/server/{peer.js → network/peer.js} +3 -3
- package/src/server/{proxy.js → network/proxy.js} +7 -13
- package/src/server/network/router.js +356 -0
- package/src/server/{tls.js → network/tls.js} +2 -2
- package/src/server/network/underpost-compression.js +186 -0
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +26 -16
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +19 -3
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/ops/cron.js +949 -0
- package/src/server/ops/event-notification.js +284 -0
- package/src/server/{logger.js → ops/logger.js} +108 -23
- package/src/server/ops/monitoring.js +1724 -0
- package/src/server/ops/systemd.js +259 -0
- package/src/server/{conf.js → runtime/conf.js} +521 -520
- package/src/server/runtime/config-scope.js +215 -0
- package/src/server/runtime/environment.js +149 -0
- package/src/server/{process.js → runtime/process.js} +153 -13
- package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
- package/src/server/{runtime.js → runtime/runtime.js} +12 -8
- package/src/server/{start.js → runtime/start.js} +128 -39
- package/src/server/{auth.js → security/auth.js} +7 -8
- package/src/server/security/container-storage.js +382 -0
- package/src/server/{crypto.js → security/crypto.js} +1 -1
- package/src/server/security/selinux.js +185 -0
- package/src/server/{backup.js → storage/backup.js} +17 -8
- package/src/server/{data-query.js → storage/data-query.js} +1 -1
- package/src/server/{downloader.js → storage/downloader.js} +2 -2
- package/src/server/storage/repository.js +68 -0
- package/src/server.js +4 -7
- package/src/ws/IoInterface.js +1 -1
- package/src/ws/IoServer.js +1 -1
- package/src/ws/core/core.ws.connection.js +1 -1
- package/src/ws/core/core.ws.emit.js +1 -1
- package/src/ws/core/core.ws.server.js +1 -1
- package/src/ws/default/default.ws.connection.js +1 -1
- package/src/ws/default/default.ws.emit.js +1 -1
- package/src/ws/default/default.ws.server.js +1 -1
- package/test/e2e/event-e2e-public-ingress-down.js +45 -0
- package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
- package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
- package/test/{api.test.js → integration/app/api.test.js} +33 -14
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +2 -1
- package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
- package/test/integration/infra/1-security/config-scope.test.js +305 -0
- package/test/integration/infra/1-security/container-storage.test.js +356 -0
- package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
- package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
- package/test/integration/infra/1-security/selinux.test.js +69 -0
- package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
- package/test/integration/infra/1-security/systemd-service.test.js +70 -0
- package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
- package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
- package/test/integration/infra/2-network/node-capability.test.js +182 -0
- package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
- package/test/integration/infra/2-network/wireguard-edge.test.js +1731 -0
- package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
- package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
- package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
- package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
- package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
- package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
- package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +47 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +56 -4
- package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
- package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
- package/test/integration/infra/5-observability/event-notification.test.js +197 -0
- package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
- package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
- package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
- package/test/support/shell-harness.js +73 -0
- package/test/unit/build-template.test.js +97 -0
- package/test/unit/build-workflow-offline.test.js +132 -0
- package/test/unit/catalog.test.js +71 -0
- package/test/unit/client-build-docs.test.js +334 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +979 -0
- package/test/unit/coverage-artifact.test.js +130 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +447 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/logger-redaction.test.js +112 -0
- package/test/unit/package.test.js +403 -0
- package/test/unit/prepare-host.test.js +299 -0
- package/test/unit/process-environment.test.js +18 -0
- package/test/unit/propagation-message.test.js +78 -0
- package/test/unit/redeploy-plan.test.js +24 -0
- package/test/unit/release-bump.test.js +474 -0
- package/test/unit/ssh-output-redaction.test.js +28 -0
- package/test/unit/start-options.test.js +46 -0
- package/test/unit/test-tiers.test.js +193 -0
- package/vitest.config.js +58 -0
- package/.nycrc +0 -9
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/link-local-underpost-cli.sh +0 -6
- package/src/api/user/user.build.js +0 -16
- package/src/cli/env.js +0 -177
- package/src/client/components/core/Blockchain.js +0 -41
- package/src/client/components/core/Blog.js +0 -9
- package/src/client/components/core/KeyboardAvoidance.js +0 -145
- package/src/client/public/default/assets/background/dark.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/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +0 -148
- package/src/server/cron.js +0 -476
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
import crypto from 'crypto';
|
|
18
18
|
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
19
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
19
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
20
20
|
import {
|
|
21
21
|
CYBERIA_INSTANCE_CONF_DEFAULTS as FALLBACK_CONFIG_DEFAULTS,
|
|
22
22
|
DEFAULT_DEAD_ITEM_ID,
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
DefaultCyberiaItems,
|
|
30
30
|
} from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
31
31
|
import { generateFallbackWorld } from '../../api/cyberia-instance/cyberia-fallback-world.js';
|
|
32
|
+
import { getFallbackDefaultItems } from '../../api/cyberia-instance/cyberia-fallback-default-items.js';
|
|
32
33
|
|
|
33
34
|
const logger = loggerFactory(import.meta);
|
|
34
35
|
|
|
@@ -421,6 +422,7 @@ function toInstanceConfig(gc) {
|
|
|
421
422
|
botAggroRange: gc.botAggroRange ?? fb.botAggroRange,
|
|
422
423
|
defaultPlayerWidth: gc.defaultPlayerWidth ?? fb.defaultPlayerWidth,
|
|
423
424
|
defaultPlayerHeight: gc.defaultPlayerHeight ?? fb.defaultPlayerHeight,
|
|
425
|
+
playerBaseSpeed: gc.playerBaseSpeed ?? fb.playerBaseSpeed,
|
|
424
426
|
playerBaseLifeRegenMin: gc.playerBaseLifeRegenMin ?? fb.playerBaseLifeRegenMin,
|
|
425
427
|
playerBaseLifeRegenMax: gc.playerBaseLifeRegenMax ?? fb.playerBaseLifeRegenMax,
|
|
426
428
|
sumStatsLimit: gc.sumStatsLimit ?? fb.sumStatsLimit,
|
|
@@ -553,7 +555,7 @@ async function fetchFullInstance(models, requestedInstanceCode) {
|
|
|
553
555
|
// ── Fallback: instance not found → return a multi-map procedural world ──
|
|
554
556
|
if (!inst) {
|
|
555
557
|
logger.info(`Instance "${instanceCode}" not found — returning fallback world.`);
|
|
556
|
-
const world = generateFallbackWorld();
|
|
558
|
+
const world = generateFallbackWorld({ itemIds: getFallbackDefaultItems() });
|
|
557
559
|
const fallbackConf = buildFallbackConfig();
|
|
558
560
|
|
|
559
561
|
// Collect all objectLayerItemIds from the generated maps so the
|
|
@@ -599,6 +601,23 @@ async function fetchFullInstance(models, requestedInstanceCode) {
|
|
|
599
601
|
|
|
600
602
|
const fallbackConfig = buildFallbackInstanceConfig(fallbackConf, world.instance.itemIds);
|
|
601
603
|
|
|
604
|
+
// Opaque version over everything mutable in this payload, mirroring the
|
|
605
|
+
// persisted path below. A constant here would make hot reload a silent
|
|
606
|
+
// no-op: WorldBuilder.ReloadWorld skips the rebuild — and therefore
|
|
607
|
+
// ApplyInstanceConfig — whenever the version is unchanged. The world
|
|
608
|
+
// geometry itself is deterministic (code defaults + seed), so the inputs
|
|
609
|
+
// that can actually differ are the staged default items and the
|
|
610
|
+
// ObjectLayer docs, which are the only things read from the DB here.
|
|
611
|
+
const fallbackVersionParts = ['fallback'];
|
|
612
|
+
for (const entry of world.instance.itemIds || []) {
|
|
613
|
+
fallbackVersionParts.push(`${entry.id}:${entry.defaultPlayerInventory ? 1 : 0}`);
|
|
614
|
+
}
|
|
615
|
+
for (const doc of fallbackOlDocs) fallbackVersionParts.push(String(doc.sha256 || doc._id));
|
|
616
|
+
const fallbackVersion = `fallback-${crypto
|
|
617
|
+
.createHash('sha256')
|
|
618
|
+
.update(fallbackVersionParts.join('|'))
|
|
619
|
+
.digest('hex')}`;
|
|
620
|
+
|
|
602
621
|
return {
|
|
603
622
|
instance: toInstanceMsg({ ...world.instance, _id: '', seed: instanceCode }),
|
|
604
623
|
maps: world.maps.map((m) => ({
|
|
@@ -613,7 +632,7 @@ async function fetchFullInstance(models, requestedInstanceCode) {
|
|
|
613
632
|
})),
|
|
614
633
|
objectLayers: fallbackOlDocs.map(toObjectLayerMsg),
|
|
615
634
|
config: fallbackConfig,
|
|
616
|
-
version:
|
|
635
|
+
version: fallbackVersion,
|
|
617
636
|
// Mission content for the procedural fallback comes straight from
|
|
618
637
|
// the canonical defaults — no DB, fully self-contained.
|
|
619
638
|
actions: DefaultCyberiaActions.map(toActionMsg),
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* @namespace IpfsClient
|
|
12
12
|
*/
|
|
13
13
|
import stringify from 'fast-json-stable-stringify';
|
|
14
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
14
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
15
15
|
import Underpost from '../../index.js';
|
|
16
16
|
const logger = loggerFactory(import.meta);
|
|
17
17
|
const DEFAULT_IPFS_HTTP_TIMEOUT_MS = Number(process.env.IPFS_HTTP_TIMEOUT_MS || 10000);
|
|
@@ -48,21 +48,21 @@ const fetchWithTimeout = async (url, options = {}, { kind = 'kubo', label = url
|
|
|
48
48
|
*/
|
|
49
49
|
const getIpfsApiUrl = () =>
|
|
50
50
|
process.env.IPFS_API_URL ||
|
|
51
|
-
`http://${process.env.NODE_ENV === 'development' && !Underpost.
|
|
51
|
+
`http://${process.env.NODE_ENV === 'development' && !Underpost.state.isInsideContainer() ? 'localhost' : 'ipfs-cluster'}:5001`;
|
|
52
52
|
/**
|
|
53
53
|
* Base URL of the IPFS Cluster REST API (port 9094).
|
|
54
54
|
* @returns {string}
|
|
55
55
|
*/
|
|
56
56
|
const getClusterApiUrl = () =>
|
|
57
57
|
process.env.IPFS_CLUSTER_API_URL ||
|
|
58
|
-
`http://${process.env.NODE_ENV === 'development' && !Underpost.
|
|
58
|
+
`http://${process.env.NODE_ENV === 'development' && !Underpost.state.isInsideContainer() ? 'localhost' : 'ipfs-cluster'}:9094`;
|
|
59
59
|
/**
|
|
60
60
|
* Base URL of the IPFS HTTP Gateway (port 8080).
|
|
61
61
|
* @returns {string}
|
|
62
62
|
*/
|
|
63
63
|
const getGatewayUrl = () =>
|
|
64
64
|
process.env.IPFS_GATEWAY_URL ||
|
|
65
|
-
`http://${process.env.NODE_ENV === 'development' && !Underpost.
|
|
65
|
+
`http://${process.env.NODE_ENV === 'development' && !Underpost.state.isInsideContainer() ? 'localhost' : 'ipfs-cluster'}:8080`;
|
|
66
66
|
// ─────────────────────────────────────────────────────────
|
|
67
67
|
// Core: add content
|
|
68
68
|
// ─────────────────────────────────────────────────────────
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
import crypto from 'crypto';
|
|
22
22
|
import fs from 'fs-extra';
|
|
23
23
|
import sharp from 'sharp';
|
|
24
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
24
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
25
25
|
import {
|
|
26
26
|
ENTITY_TYPE_TO_ITEM_TYPES,
|
|
27
27
|
getDefaultCyberiaItemById,
|
|
@@ -10,16 +10,14 @@ import path from 'path';
|
|
|
10
10
|
import { PNG } from 'pngjs';
|
|
11
11
|
import sharp from 'sharp';
|
|
12
12
|
import { Jimp, intToRGBA, rgbaToInt } from 'jimp';
|
|
13
|
-
import
|
|
14
|
-
import stringify from 'fast-json-stable-stringify';
|
|
15
|
-
|
|
13
|
+
import { computeObjectLayerSha256 } from '../../api/object-layer/object-layer.model.js';
|
|
16
14
|
import { range } from '../../client/components/core/CommonJs.js';
|
|
17
15
|
import {
|
|
18
16
|
generateRandomStats,
|
|
19
17
|
getKeyframeDirectionsByCode,
|
|
20
18
|
OBJECT_LAYER_DIRECTION_NAME_TO_CODE,
|
|
21
19
|
} from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
22
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
20
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
23
21
|
|
|
24
22
|
const logger = loggerFactory(import.meta);
|
|
25
23
|
|
|
@@ -450,7 +448,7 @@ export class ObjectLayerEngine {
|
|
|
450
448
|
* @memberof CyberiaObjectLayer
|
|
451
449
|
*/
|
|
452
450
|
static computeSha256(data) {
|
|
453
|
-
return
|
|
451
|
+
return computeObjectLayerSha256(data);
|
|
454
452
|
}
|
|
455
453
|
|
|
456
454
|
/**
|
|
@@ -642,23 +640,15 @@ export class ObjectLayerEngine {
|
|
|
642
640
|
}
|
|
643
641
|
|
|
644
642
|
// 4. Atomic create/upsert - ObjectLayer is fully populated with all CIDs
|
|
645
|
-
|
|
646
|
-
const
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
);
|
|
652
|
-
objectLayer = await ObjectLayer.findByIdAndUpdate(existingByItemId._id, objectLayerData, {
|
|
653
|
-
returnDocument: 'after',
|
|
654
|
-
}).populate('objectLayerRenderFramesId');
|
|
655
|
-
if (oldRenderFramesId && !oldRenderFramesId.equals(objectLayerRenderFramesDoc._id)) {
|
|
656
|
-
await ObjectLayerRenderFrames.findByIdAndDelete(oldRenderFramesId);
|
|
657
|
-
}
|
|
658
|
-
} else {
|
|
659
|
-
objectLayer = await (await ObjectLayer.create(objectLayerData)).populate('objectLayerRenderFramesId');
|
|
660
|
-
logger.info(`ObjectLayer created successfully with id: ${objectLayer._id}`);
|
|
643
|
+
const existingByItemId = await ObjectLayer.findByItemId(objectLayerData.data.item.id);
|
|
644
|
+
const oldRenderFramesId = existingByItemId?.objectLayerRenderFramesId;
|
|
645
|
+
|
|
646
|
+
const objectLayer = await (await ObjectLayer.upsertByItemId(objectLayerData)).populate('objectLayerRenderFramesId');
|
|
647
|
+
|
|
648
|
+
if (oldRenderFramesId && !oldRenderFramesId.equals(objectLayerRenderFramesDoc._id)) {
|
|
649
|
+
await ObjectLayerRenderFrames.findByIdAndDelete(oldRenderFramesId);
|
|
661
650
|
}
|
|
651
|
+
logger.info(`ObjectLayer for item "${objectLayerData.data.item.id}" persisted with id: ${objectLayer._id}`);
|
|
662
652
|
|
|
663
653
|
return { objectLayer, objectLayerRenderFramesDoc };
|
|
664
654
|
}
|
|
@@ -848,7 +838,7 @@ export class ObjectLayerEngine {
|
|
|
848
838
|
* @memberof CyberiaObjectLayer
|
|
849
839
|
*/
|
|
850
840
|
static async resolveCanonicalCid({ itemId, ObjectLayer, ipfsClient = null, options }) {
|
|
851
|
-
const objectLayer = await ObjectLayer.
|
|
841
|
+
const objectLayer = await ObjectLayer.findByItemId(itemId);
|
|
852
842
|
if (!objectLayer) {
|
|
853
843
|
throw new Error(`ObjectLayer "${itemId}" not found in database`);
|
|
854
844
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
import crypto from 'crypto';
|
|
20
20
|
|
|
21
21
|
import { createRng, seedToInt, createNoise2D, generateShape, listShapes } from './shape-generator.js';
|
|
22
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
22
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
23
23
|
|
|
24
24
|
import { registerFloorSemantics } from './semantic-layer-generator-floor.js';
|
|
25
25
|
import { registerSkinSemantics } from './semantic-layer-generator-skin.js';
|
|
@@ -18,13 +18,24 @@ const TEMPLATE_RESTORE_PATHS = [
|
|
|
18
18
|
`./.github/workflows/gitlab.ci.yml`,
|
|
19
19
|
`./.github/workflows/publish.ci.yml`,
|
|
20
20
|
`./.github/workflows/release.cd.yml`,
|
|
21
|
-
`./
|
|
21
|
+
`./deploy/lib`,
|
|
22
|
+
'./deploy/release',
|
|
23
|
+
'./deploy/pwa-microservices-template',
|
|
24
|
+
'./src/client/services/user/guest.service.js',
|
|
22
25
|
'./src/api/user/guest.service.js',
|
|
23
26
|
'./src/ws/IoInterface.js',
|
|
24
27
|
'./src/ws/IoServer.js',
|
|
25
28
|
'./manifests/deployment/dd-default-development',
|
|
26
29
|
];
|
|
27
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Template checkout entries a rebuild keeps. Everything else is reconstructed from
|
|
33
|
+
* the engine tree, so a file the engine no longer produces cannot survive a build.
|
|
34
|
+
* @constant {string[]}
|
|
35
|
+
* @memberof UnderpostCatalog
|
|
36
|
+
*/
|
|
37
|
+
const TEMPLATE_PRESERVED_ENTRIES = ['.git', 'node_modules'];
|
|
38
|
+
|
|
28
39
|
/**
|
|
29
40
|
* npm keywords for the standalone Underpost platform / template package.
|
|
30
41
|
* @constant {string[]}
|
|
@@ -57,4 +68,4 @@ const TEMPLATE_KEYWORDS = [
|
|
|
57
68
|
const TEMPLATE_DESCRIPTION =
|
|
58
69
|
'Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orchestration. Extensible via downstream CLIs.';
|
|
59
70
|
|
|
60
|
-
export { TEMPLATE_RESTORE_PATHS, TEMPLATE_KEYWORDS, TEMPLATE_DESCRIPTION };
|
|
71
|
+
export { TEMPLATE_RESTORE_PATHS, TEMPLATE_PRESERVED_ENTRIES, TEMPLATE_KEYWORDS, TEMPLATE_DESCRIPTION };
|
package/src/proxy.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
7
|
-
import { buildProxy } from './server/proxy.js';
|
|
8
|
-
import { ProcessController } from './server/process.js';
|
|
9
|
-
import { Config } from './server/conf.js';
|
|
3
|
+
import { loggerFactory } from './server/ops/logger.js';
|
|
4
|
+
import { buildProxy } from './server/network/proxy.js';
|
|
5
|
+
import { ProcessController } from './server/runtime/process.js';
|
|
6
|
+
import { Config } from './server/runtime/conf.js';
|
|
10
7
|
|
|
11
8
|
await Config.build(process.argv[2], process.argv[3], process.argv[4]);
|
|
12
9
|
|
|
@@ -14,7 +14,6 @@ RUN make -f Web.mk clean all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
|
14
14
|
|
|
15
15
|
# --- Runtime Image ---
|
|
16
16
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
17
|
-
ARG UNDERPOST_VERSION=3.2.90
|
|
18
17
|
ARG NODE_VERSION=24.15.0
|
|
19
18
|
|
|
20
19
|
RUN set -eux; \
|
|
@@ -28,9 +27,15 @@ RUN set -eux; \
|
|
|
28
27
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
29
28
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
30
29
|
node --version; npm --version; \
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
dnf clean all; rm -rf /var/cache/dnf
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
34
|
+
RUN set -eux; \
|
|
35
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
36
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
37
|
+
npm cache clean --force; \
|
|
38
|
+
underpost --version
|
|
34
39
|
|
|
35
40
|
# Path + server layout is the contract with conf.instances.json mmo-client cmd,
|
|
36
41
|
# which execs `python3 /home/dd/engine/cyberia-client/docker-driver.py <port>
|
|
@@ -43,7 +43,6 @@ RUN make -f Web.mk all BUILD_MODE=${BUILD_MODE} OUTPUT_DIR=bin/
|
|
|
43
43
|
# --- Runtime Image ---
|
|
44
44
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
45
45
|
|
|
46
|
-
ARG UNDERPOST_VERSION=3.2.90
|
|
47
46
|
ARG NODE_VERSION=24.15.0
|
|
48
47
|
RUN set -eux; \
|
|
49
48
|
dnf -y update; \
|
|
@@ -60,9 +59,16 @@ RUN set -eux; \
|
|
|
60
59
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
61
60
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
62
61
|
node --version; npm --version; \
|
|
63
|
-
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
64
62
|
dnf clean all
|
|
65
63
|
|
|
64
|
+
|
|
65
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
66
|
+
RUN set -eux; \
|
|
67
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
68
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
69
|
+
npm cache clean --force; \
|
|
70
|
+
underpost --version
|
|
71
|
+
|
|
66
72
|
WORKDIR /home/dd/engine/cyberia-client
|
|
67
73
|
|
|
68
74
|
COPY --from=builder /cyberia-client/docker-driver.py ./docker-driver.py
|
|
@@ -11,7 +11,6 @@ RUN CGO_ENABLED=0 go build -trimpath -ldflags="-s -w" -o server ./cmd/cyberia-se
|
|
|
11
11
|
|
|
12
12
|
# --- Runtime Image ---
|
|
13
13
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
14
|
-
ARG UNDERPOST_VERSION=3.2.90
|
|
15
14
|
ARG NODE_VERSION=24.15.0
|
|
16
15
|
|
|
17
16
|
RUN set -eux; \
|
|
@@ -25,9 +24,15 @@ RUN set -eux; \
|
|
|
25
24
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
26
25
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
27
26
|
node --version; npm --version; \
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
27
|
+
dnf clean all; rm -rf /var/cache/dnf
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
31
|
+
RUN set -eux; \
|
|
32
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
33
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
34
|
+
npm cache clean --force; \
|
|
35
|
+
underpost --version
|
|
31
36
|
|
|
32
37
|
# Path is the contract with conf.instances.json mmo-server cmd, which execs
|
|
33
38
|
# /home/dd/engine/cyberia-server/server in both development and production.
|
|
@@ -25,7 +25,6 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
|
|
25
25
|
# --- Runtime Image ---
|
|
26
26
|
FROM rockylinux/rockylinux:9 AS runtime
|
|
27
27
|
|
|
28
|
-
ARG UNDERPOST_VERSION=3.2.90
|
|
29
28
|
ARG NODE_VERSION=24.15.0
|
|
30
29
|
RUN set -eux; \
|
|
31
30
|
dnf -y update; \
|
|
@@ -42,9 +41,16 @@ RUN set -eux; \
|
|
|
42
41
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
43
42
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
44
43
|
node --version; npm --version; \
|
|
45
|
-
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
46
44
|
dnf clean all
|
|
47
45
|
|
|
46
|
+
|
|
47
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
48
|
+
RUN set -eux; \
|
|
49
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
50
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
51
|
+
npm cache clean --force; \
|
|
52
|
+
underpost --version
|
|
53
|
+
|
|
48
54
|
WORKDIR /home/dd/engine/cyberia-server
|
|
49
55
|
|
|
50
56
|
COPY --from=builder /build/server ./server
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# Stage 1 — builder: clone the private deploy, build it, then scrub secrets.
|
|
7
7
|
# ---------------------------------------------------------------------------
|
|
8
8
|
FROM rockylinux/rockylinux:9 AS builder
|
|
9
|
-
ARG UNDERPOST_VERSION=3.
|
|
9
|
+
ARG UNDERPOST_VERSION=3.3.73
|
|
10
10
|
# Pin Node to an exact patch: dnf's nodejs:24 module lags (24.14.1) while
|
|
11
11
|
# underpost's dependencies require >=24.15.0, so install the official binary.
|
|
12
12
|
ARG NODE_VERSION=24.15.0
|
|
@@ -14,7 +14,7 @@ ENV NODE_ENV=production
|
|
|
14
14
|
|
|
15
15
|
RUN set -eux; \
|
|
16
16
|
# `sudo` is required because underpost's build steps shell out to
|
|
17
|
-
# `sudo cp`/`sudo rm` (src/server/start.js); the build runs as root so sudo
|
|
17
|
+
# `sudo cp`/`sudo rm` (src/server/runtime/start.js); the build runs as root so sudo
|
|
18
18
|
# is just a passthrough, but the binary must exist.
|
|
19
19
|
dnf install -y git openssl tar xz sudo; \
|
|
20
20
|
arch="$(uname -m)"; \
|
|
@@ -26,10 +26,22 @@ RUN set -eux; \
|
|
|
26
26
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
27
27
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
28
28
|
node --version; npm --version; \
|
|
29
|
-
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
30
29
|
dnf clean all; rm -rf /var/cache/dnf; \
|
|
31
30
|
npm cache clean --force
|
|
32
31
|
|
|
32
|
+
|
|
33
|
+
# The builder's own `underpost clone` calls below run on this same CLI, and the runtime stage
|
|
34
|
+
# inherits it through `COPY --from=builder /usr/local/`.
|
|
35
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
36
|
+
RUN set -eux; \
|
|
37
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
38
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
39
|
+
npm cache clean --force; \
|
|
40
|
+
underpost --version; \
|
|
41
|
+
# The staged package must be the pinned release: a drift here would ship a CLI the
|
|
42
|
+
# deployment manifests were not built against.
|
|
43
|
+
underpost --version | grep -Fq "${UNDERPOST_VERSION}"
|
|
44
|
+
|
|
33
45
|
WORKDIR /home/dd
|
|
34
46
|
|
|
35
47
|
# Comma-separated instance codes to provision (backup dir + optional saga).
|
|
@@ -38,7 +50,7 @@ WORKDIR /home/dd
|
|
|
38
50
|
# `--build-arg INSTANCE_CODES=...`. Declared as an ARG (not a marker-wrapped
|
|
39
51
|
# shell string) so the value is clean — a `/** … */` literal in the shell would
|
|
40
52
|
# glob-expand in the `for` loop below.
|
|
41
|
-
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST"
|
|
53
|
+
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST,TEST"
|
|
42
54
|
|
|
43
55
|
RUN --mount=type=secret,id=github_username \
|
|
44
56
|
# --mount=type=secret,id=github_token \
|
|
@@ -83,7 +95,7 @@ RUN --mount=type=secret,id=github_username \
|
|
|
83
95
|
cd /home/dd/engine; \
|
|
84
96
|
# --- install deps + env, then replay build-safe itc provisioning ----------
|
|
85
97
|
npm install; \
|
|
86
|
-
node bin env dd-cyberia
|
|
98
|
+
node bin app load --env production --args deploy-id=dd-cyberia; \
|
|
87
99
|
( cd /home/dd/engine/hardhat && npm install --include=dev ); \
|
|
88
100
|
# --- build the client bundle (assets are now in place) --------------------
|
|
89
101
|
cd /home/dd/engine; \
|
|
@@ -136,11 +148,15 @@ COPY --from=builder /usr/local/ /usr/local/
|
|
|
136
148
|
RUN dnf install -y libstdc++ git sudo && dnf clean all && rm -rf /var/cache/dnf && \
|
|
137
149
|
useradd --create-home --home-dir /home/dd --shell /usr/sbin/nologin dd && \
|
|
138
150
|
# The runtime runs as `dd`, but `underpost start --build` shells out to `sudo cp`/`sudo rm`
|
|
139
|
-
# (src/server/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
151
|
+
# (src/server/runtime/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
140
152
|
printf 'dd ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/dd && chmod 0440 /etc/sudoers.d/dd && \
|
|
141
|
-
# underpost persists its global env
|
|
142
|
-
#
|
|
143
|
-
|
|
153
|
+
# underpost persists its global env and container state under
|
|
154
|
+
# `$(npm root -g)/underpost` (getUnderpostRootPath). That path is a STORE directory, not
|
|
155
|
+
# the CLI package tree: the staged package installs under its own package name, and
|
|
156
|
+
# `underpost start --build` re-links the bin at the pulled checkout without moving the
|
|
157
|
+
# store (src/server/runtime/start.js#linkRuntimeCli). Create it here — the non-root
|
|
158
|
+
# runtime user cannot mkdir inside /usr/local itself (EACCES on the first state write).
|
|
159
|
+
mkdir -p "$(npm root -g)/underpost" && chown -R dd:dd "$(npm root -g)/underpost"
|
|
144
160
|
|
|
145
161
|
# Copy ONLY the scrubbed runtime tree — no .git, no token, no caches.
|
|
146
162
|
COPY --from=builder --chown=dd:dd /home/dd/engine /home/dd/engine
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# Stage 1 — builder: clone the private deploy, build it, then scrub secrets.
|
|
7
7
|
# ---------------------------------------------------------------------------
|
|
8
8
|
FROM rockylinux/rockylinux:9 AS builder
|
|
9
|
-
ARG UNDERPOST_VERSION=3.
|
|
9
|
+
ARG UNDERPOST_VERSION=3.3.73
|
|
10
10
|
# Pin Node to an exact patch: dnf's nodejs:24 module lags (24.14.1) while
|
|
11
11
|
# underpost's dependencies require >=24.15.0, so install the official binary.
|
|
12
12
|
ARG NODE_VERSION=24.15.0
|
|
@@ -14,7 +14,7 @@ ENV NODE_ENV=development
|
|
|
14
14
|
|
|
15
15
|
RUN set -eux; \
|
|
16
16
|
# `sudo` is required because underpost's build steps shell out to
|
|
17
|
-
# `sudo cp`/`sudo rm` (src/server/start.js); the build runs as root so sudo
|
|
17
|
+
# `sudo cp`/`sudo rm` (src/server/runtime/start.js); the build runs as root so sudo
|
|
18
18
|
# is just a passthrough, but the binary must exist.
|
|
19
19
|
dnf install -y git openssl tar xz sudo; \
|
|
20
20
|
arch="$(uname -m)"; \
|
|
@@ -26,10 +26,22 @@ RUN set -eux; \
|
|
|
26
26
|
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${node_arch}.tar.xz" \
|
|
27
27
|
| tar -xJ -C /usr/local --strip-components=1; \
|
|
28
28
|
node --version; npm --version; \
|
|
29
|
-
npm install -g underpost@${UNDERPOST_VERSION}; \
|
|
30
29
|
dnf clean all; rm -rf /var/cache/dnf; \
|
|
31
30
|
npm cache clean --force
|
|
32
31
|
|
|
32
|
+
|
|
33
|
+
# The builder's own `underpost clone` calls below run on this same CLI, and the runtime stage
|
|
34
|
+
# inherits it through `COPY --from=builder /usr/local/`.
|
|
35
|
+
COPY underpost-cli.tgz /tmp/underpost-cli.tgz
|
|
36
|
+
RUN set -eux; \
|
|
37
|
+
npm install -g /tmp/underpost-cli.tgz --omit=dev; \
|
|
38
|
+
rm -f /tmp/underpost-cli.tgz; \
|
|
39
|
+
npm cache clean --force; \
|
|
40
|
+
underpost --version; \
|
|
41
|
+
# The staged package must be the pinned release: a drift here would ship a CLI the
|
|
42
|
+
# deployment manifests were not built against.
|
|
43
|
+
underpost --version | grep -Fq "${UNDERPOST_VERSION}"
|
|
44
|
+
|
|
33
45
|
WORKDIR /home/dd
|
|
34
46
|
|
|
35
47
|
# Comma-separated instance codes to provision (backup dir + optional saga).
|
|
@@ -38,7 +50,7 @@ WORKDIR /home/dd
|
|
|
38
50
|
# `--build-arg INSTANCE_CODES=...`. Declared as an ARG (not a marker-wrapped
|
|
39
51
|
# shell string) so the value is clean — a `/** … */` literal in the shell would
|
|
40
52
|
# glob-expand in the `for` loop below.
|
|
41
|
-
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST"
|
|
53
|
+
ARG INSTANCE_CODES="amethyst-strata-expansion,FOREST,TEST"
|
|
42
54
|
|
|
43
55
|
RUN --mount=type=secret,id=github_username \
|
|
44
56
|
# --mount=type=secret,id=github_token \
|
|
@@ -83,7 +95,7 @@ RUN --mount=type=secret,id=github_username \
|
|
|
83
95
|
cd /home/dd/engine; \
|
|
84
96
|
# --- install deps + env, then replay build-safe itc provisioning ----------
|
|
85
97
|
npm install; \
|
|
86
|
-
node bin env dd-cyberia
|
|
98
|
+
node bin app load --env development --args deploy-id=dd-cyberia; \
|
|
87
99
|
( cd /home/dd/engine/hardhat && npm install --include=dev ); \
|
|
88
100
|
# --- build the client bundle (assets are now in place) --------------------
|
|
89
101
|
cd /home/dd/engine; \
|
|
@@ -136,11 +148,15 @@ COPY --from=builder /usr/local/ /usr/local/
|
|
|
136
148
|
RUN dnf install -y libstdc++ git sudo && dnf clean all && rm -rf /var/cache/dnf && \
|
|
137
149
|
useradd --create-home --home-dir /home/dd --shell /usr/sbin/nologin dd && \
|
|
138
150
|
# The runtime runs as `dd`, but `underpost start --build` shells out to `sudo cp`/`sudo rm`
|
|
139
|
-
# (src/server/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
151
|
+
# (src/server/runtime/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
140
152
|
printf 'dd ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/dd && chmod 0440 /etc/sudoers.d/dd && \
|
|
141
|
-
# underpost persists its global env
|
|
142
|
-
#
|
|
143
|
-
|
|
153
|
+
# underpost persists its global env and container state under
|
|
154
|
+
# `$(npm root -g)/underpost` (getUnderpostRootPath). That path is a STORE directory, not
|
|
155
|
+
# the CLI package tree: the staged package installs under its own package name, and
|
|
156
|
+
# `underpost start --build` re-links the bin at the pulled checkout without moving the
|
|
157
|
+
# store (src/server/runtime/start.js#linkRuntimeCli). Create it here — the non-root
|
|
158
|
+
# runtime user cannot mkdir inside /usr/local itself (EACCES on the first state write).
|
|
159
|
+
mkdir -p "$(npm root -g)/underpost" && chown -R dd:dd "$(npm root -g)/underpost"
|
|
144
160
|
|
|
145
161
|
# Copy ONLY the scrubbed runtime tree — no .git, no token, no caches.
|
|
146
162
|
COPY --from=builder --chown=dd:dd /home/dd/engine /home/dd/engine
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
# Stage 1 — builder: clone the private deploy, build it, then scrub secrets.
|
|
7
7
|
# ---------------------------------------------------------------------------
|
|
8
8
|
FROM rockylinux/rockylinux:9 AS builder
|
|
9
|
-
ARG UNDERPOST_VERSION=3.
|
|
9
|
+
ARG UNDERPOST_VERSION=3.3.73
|
|
10
10
|
# Pin Node to an exact patch: dnf's nodejs:24 module lags (24.14.1) while
|
|
11
11
|
# underpost's dependencies require >=24.15.0, so install the official binary.
|
|
12
12
|
ARG NODE_VERSION=24.15.0
|
|
@@ -14,7 +14,7 @@ ENV NODE_ENV=development
|
|
|
14
14
|
|
|
15
15
|
RUN set -eux; \
|
|
16
16
|
# `sudo` is required because underpost's build steps shell out to
|
|
17
|
-
# `sudo cp`/`sudo rm` (src/server/start.js); the build runs as root so sudo
|
|
17
|
+
# `sudo cp`/`sudo rm` (src/server/runtime/start.js); the build runs as root so sudo
|
|
18
18
|
# is just a passthrough, but the binary must exist.
|
|
19
19
|
dnf install -y git openssl tar xz sudo; \
|
|
20
20
|
arch="$(uname -m)"; \
|
|
@@ -71,7 +71,7 @@ RUN --mount=type=secret,id=github_token \
|
|
|
71
71
|
\
|
|
72
72
|
# --- install deps + env, then replay build-safe itc provisioning ----------
|
|
73
73
|
npm install; \
|
|
74
|
-
node bin env dd-cyberia
|
|
74
|
+
node bin app load --env development --args deploy-id=dd-cyberia; \
|
|
75
75
|
node bin fs --pull --recursive --deploy-id dd-cyberia --storage-file-path './engine-private/conf/dd-cyberia/storage.engine-cyberia.json'; \
|
|
76
76
|
( cd /home/dd/engine/hardhat && npm install --include=dev ); \
|
|
77
77
|
( cd /home/dd/engine && underpost clone underpostnet/cyberia-server ); \
|
|
@@ -140,7 +140,7 @@ COPY --from=builder /usr/local/ /usr/local/
|
|
|
140
140
|
RUN dnf install -y libstdc++ git sudo && dnf clean all && rm -rf /var/cache/dnf && \
|
|
141
141
|
useradd --create-home --home-dir /home/dd --shell /usr/sbin/nologin dd && \
|
|
142
142
|
# The runtime runs as `dd`, but `underpost start --build` shells out to `sudo cp`/`sudo rm`
|
|
143
|
-
# (src/server/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
143
|
+
# (src/server/runtime/start.js). Grant passwordless sudo so those succeed without a TTY/password.
|
|
144
144
|
printf 'dd ALL=(ALL) NOPASSWD:ALL\n' > /etc/sudoers.d/dd && chmod 0440 /etc/sudoers.d/dd && \
|
|
145
145
|
# underpost persists its global env at $(npm root -g)/underpost/.env; the
|
|
146
146
|
# non-root runtime user must be able to write it (fixes EACCES on start).
|
|
@@ -70,6 +70,22 @@ CYBERIA_DEFAULT_INSTANCE=amethyst-strata-expansion
|
|
|
70
70
|
CYBERIA_SERVER_APP_ENV=development
|
|
71
71
|
CYBERIA_SERVER_LOG_LEVEL=
|
|
72
72
|
|
|
73
|
+
# --- cyberia-server WebSocket admission and rate limits ----------------------
|
|
74
|
+
# Unset keeps the built-in default. An explicit 0 turns that one limit off.
|
|
75
|
+
# The startup log prints the effective profile ("ws limits: ...").
|
|
76
|
+
#
|
|
77
|
+
# Set CYBERIA_DISABLE_CONNECTION_LIMITS=1 to turn every limit off. The load test
|
|
78
|
+
# (test/cyberia-load.test.js) drives every simulated client from one address, so
|
|
79
|
+
# it needs this. NEVER enable it on a public deploy.
|
|
80
|
+
CYBERIA_DISABLE_CONNECTION_LIMITS=
|
|
81
|
+
CYBERIA_MAX_CONNECTIONS=
|
|
82
|
+
CYBERIA_MAX_CONNECTIONS_PER_IP=
|
|
83
|
+
CYBERIA_CONNECT_RATE_PER_IP=
|
|
84
|
+
CYBERIA_CONNECT_BURST_PER_IP=
|
|
85
|
+
CYBERIA_MESSAGE_RATE=
|
|
86
|
+
CYBERIA_MESSAGE_BURST=
|
|
87
|
+
CYBERIA_MAX_STRIKES=
|
|
88
|
+
|
|
73
89
|
# --- engine-cyberia runtime env (loaded into the container via env_file) -----
|
|
74
90
|
# The dd-cyberia engine (engine-private/conf/dd-cyberia/conf.server.json) needs
|
|
75
91
|
# these to boot: DB auth + per-site DB names, the base PORT (the cyberia host is
|