@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
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository identity: who owns the source this build came from, and the
|
|
3
|
+
* canonical URLs derived from it.
|
|
4
|
+
*
|
|
5
|
+
* Every environment publishes from a different fork, so an owner baked into a
|
|
6
|
+
* component renders a link to someone else's repository. The owner is resolved
|
|
7
|
+
* once here, travels to the client in `renderPayload.repository`, and is the
|
|
8
|
+
* only thing any GitHub, Pages or Coveralls URL is composed from.
|
|
9
|
+
*
|
|
10
|
+
* @module src/server/storage/repository.js
|
|
11
|
+
* @namespace ServerRepository
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { environmentValueFactory } from '../runtime/environment.js';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @constant REPOSITORY_DEFAULTS
|
|
18
|
+
* @description Fallbacks for a tree published without repository environment.
|
|
19
|
+
* The only place in the codebase allowed to name an owner or a repository.
|
|
20
|
+
* @memberof ServerRepository
|
|
21
|
+
*/
|
|
22
|
+
const REPOSITORY_DEFAULTS = {
|
|
23
|
+
owner: 'underpostnet',
|
|
24
|
+
name: 'engine',
|
|
25
|
+
template: 'pwa-microservices-template',
|
|
26
|
+
// Prebuilt package repositories are the template repository plus this suffix.
|
|
27
|
+
packageSuffix: '-ghpkg',
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @method repositoryIdentityFactory
|
|
32
|
+
* @description Resolves the repository identity this build publishes under.
|
|
33
|
+
* @param {object} [overrides] - Explicit values that win over the environment.
|
|
34
|
+
* @returns {{owner: string, name: string, template: string, packageSuffix: string}} Identity.
|
|
35
|
+
* @memberof ServerRepository
|
|
36
|
+
*/
|
|
37
|
+
const repositoryIdentityFactory = (overrides = {}) => ({
|
|
38
|
+
...REPOSITORY_DEFAULTS,
|
|
39
|
+
...(environmentValueFactory('GITHUB_USERNAME') ? { owner: environmentValueFactory('GITHUB_USERNAME') } : {}),
|
|
40
|
+
...Object.fromEntries(Object.entries(overrides).filter(([, value]) => value)),
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @method githubUrlFactory
|
|
45
|
+
* @description Composes a github.com URL under the resolved owner.
|
|
46
|
+
* @param {object} [params]
|
|
47
|
+
* @param {object} [params.identity] - Identity to compose against.
|
|
48
|
+
* @param {string[]} [params.segments] - Path segments after the owner.
|
|
49
|
+
* @returns {string} Absolute URL, trailing slash included.
|
|
50
|
+
* @memberof ServerRepository
|
|
51
|
+
*/
|
|
52
|
+
const githubUrlFactory = ({ identity = repositoryIdentityFactory(), segments = [] } = {}) =>
|
|
53
|
+
`https://github.com/${[identity.owner, ...segments].filter(Boolean).join('/')}/`;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @method githubCommitUrlFactory
|
|
57
|
+
* @description Markdown link to one commit, for generated changelogs.
|
|
58
|
+
* @param {object} params
|
|
59
|
+
* @param {string} params.shortHash - Abbreviated hash used as the link text.
|
|
60
|
+
* @param {string} params.hash - Full hash the link resolves to.
|
|
61
|
+
* @param {object} [params.identity] - Identity to compose against.
|
|
62
|
+
* @returns {string} Markdown link.
|
|
63
|
+
* @memberof ServerRepository
|
|
64
|
+
*/
|
|
65
|
+
const githubCommitUrlFactory = ({ shortHash, hash, identity = repositoryIdentityFactory() }) =>
|
|
66
|
+
`[${shortHash}](https://github.com/${identity.owner}/${identity.name}/commit/${hash})`;
|
|
67
|
+
|
|
68
|
+
export { REPOSITORY_DEFAULTS, githubCommitUrlFactory, githubUrlFactory, repositoryIdentityFactory };
|
package/src/server.js
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
// https://nodejs.org/api
|
|
4
|
-
// https://expressjs.com/en/4x/api.html
|
|
5
|
-
|
|
6
3
|
import dotenv from 'dotenv';
|
|
7
|
-
import { loggerFactory } from './server/logger.js';
|
|
4
|
+
import { loggerFactory } from './server/ops/logger.js';
|
|
8
5
|
import { buildClient } from './client-builder/client-build.js';
|
|
9
|
-
import { buildRuntime } from './server/runtime.js';
|
|
10
|
-
import { ProcessController } from './server/process.js';
|
|
11
|
-
import { Config } from './server/conf.js';
|
|
6
|
+
import { buildRuntime } from './server/runtime/runtime.js';
|
|
7
|
+
import { ProcessController } from './server/runtime/process.js';
|
|
8
|
+
import { Config } from './server/runtime/conf.js';
|
|
12
9
|
|
|
13
10
|
dotenv.config();
|
|
14
11
|
|
package/src/ws/IoInterface.js
CHANGED
package/src/ws/IoServer.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module ws/core/core.ws.connection
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
6
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
7
7
|
import { CoreWsChatChannel } from './channels/core.ws.chat.js';
|
|
8
8
|
import { CoreWsMailerChannel } from './channels/core.ws.mailer.js';
|
|
9
9
|
import { CoreWsStreamChannel } from './channels/core.ws.stream.js';
|
|
@@ -10,7 +10,7 @@ import { CoreWsConnectionHandler } from './core.ws.connection.js';
|
|
|
10
10
|
import { CoreWsChatChannel } from './channels/core.ws.chat.js';
|
|
11
11
|
import { CoreWsMailerChannel } from './channels/core.ws.mailer.js';
|
|
12
12
|
import { CoreWsStreamChannel } from './channels/core.ws.stream.js';
|
|
13
|
-
import { resolveHostKeyContext } from '../../server/conf.js';
|
|
13
|
+
import { resolveHostKeyContext } from '../../server/runtime/conf.js';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @class CoreWsServer
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module ws/default/default.ws.connection
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
6
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
7
7
|
import { DefaultWsMainChannel } from './channels/default.ws.main.js';
|
|
8
8
|
|
|
9
9
|
const logger = loggerFactory(import.meta);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { IoServer } from '../IoServer.js';
|
|
9
9
|
import { DefaultWsConnectionHandler } from './default.ws.connection.js';
|
|
10
10
|
import { DefaultWsMainChannel } from './channels/default.ws.main.js';
|
|
11
|
-
import { resolveHostKeyContext } from '../../server/conf.js';
|
|
11
|
+
import { resolveHostKeyContext } from '../../server/runtime/conf.js';
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* @class DefaultWsServer
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import Underpost from '../../src/index.js';
|
|
2
|
+
|
|
3
|
+
/** The ports HAProxy publishes on the hub; blocking these takes every host down. */
|
|
4
|
+
const EDGE_PORTS = '80,443';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* End-to-end rehearsal for `public-ingress-down`.
|
|
8
|
+
*
|
|
9
|
+
* The outage is induced where the public edge actually terminates — the hub —
|
|
10
|
+
* by blocking inbound traffic on the published ports. That is the one fault
|
|
11
|
+
* that takes every host down at once, which is the condition this event
|
|
12
|
+
* remediates; stopping a workload would produce the partial state the handler
|
|
13
|
+
* deliberately refuses to act on.
|
|
14
|
+
*
|
|
15
|
+
* The block is scoped to those ports rather than to every port, because
|
|
16
|
+
* remediation reaches the hub over SSH: a total ingress block would drop the
|
|
17
|
+
* connection that repairs it and leave the edge unrecoverable from anywhere but
|
|
18
|
+
* the provider console. `--unblock-all-ingress`, which the handler runs, clears
|
|
19
|
+
* this block along with any other.
|
|
20
|
+
*
|
|
21
|
+
* @module test/event-e2e-public-ingress-down.js
|
|
22
|
+
*/
|
|
23
|
+
export default {
|
|
24
|
+
description: 'Blocks public ingress on each hub, then verifies the edge is restored and every host answers again.',
|
|
25
|
+
|
|
26
|
+
async subjects({ options }) {
|
|
27
|
+
return Underpost.event.subjectSelection('hub', options).map((hubHost) => {
|
|
28
|
+
const target = Underpost.event.hubTarget(hubHost);
|
|
29
|
+
return {
|
|
30
|
+
label: `ingress via ${target.nodeName || hubHost}`,
|
|
31
|
+
probes: Underpost.event.publicIngressUrls().map((entry) => ({ module: 'http_2xx', target: entry.url })),
|
|
32
|
+
dispatchOptions: { nodes: target.nodeName || hubHost },
|
|
33
|
+
remote: { user: target.user, host: target.host },
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
async break(context, subject) {
|
|
39
|
+
return await Underpost.event.runCommand(`node bin ip --block-ingress-port ${EDGE_PORTS}`, subject.remote);
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
async restore(context, subject) {
|
|
43
|
+
return await Underpost.event.runCommand(`node bin ip --unblock-ingress-port ${EDGE_PORTS}`, subject.remote);
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import Underpost from '../../src/index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* End-to-end rehearsal for `wireguard-server-down`.
|
|
5
|
+
*
|
|
6
|
+
* Every registered hub is rehearsed, or those `--nodes` selects. A hub is
|
|
7
|
+
* taken down the only way an operator can reach it while its tunnel is dead —
|
|
8
|
+
* through the external SSH endpoint registered for it — which is also the path
|
|
9
|
+
* the remediation must use. Stopping the interface any other way would not
|
|
10
|
+
* exercise that dependency.
|
|
11
|
+
*
|
|
12
|
+
* @module test/event-e2e-wireguard-server-down.js
|
|
13
|
+
*/
|
|
14
|
+
export default {
|
|
15
|
+
description: 'Stops WireGuard on each hub over its registered management SSH, then verifies the repair.',
|
|
16
|
+
|
|
17
|
+
async subjects({ options }) {
|
|
18
|
+
return Underpost.event.subjectSelection('hub', options).map((hubHost) => {
|
|
19
|
+
const target = Underpost.event.hubTarget(hubHost);
|
|
20
|
+
if (!target.address)
|
|
21
|
+
throw new Error(`[event] the tunnel address of hub ${hubHost} is underivable; nothing can be probed`);
|
|
22
|
+
return {
|
|
23
|
+
label: `hub ${target.nodeName || hubHost}`,
|
|
24
|
+
probes: [{ module: 'icmp', target: target.address }],
|
|
25
|
+
dispatchOptions: { nodes: target.nodeName || hubHost },
|
|
26
|
+
remote: { user: target.user, host: target.host },
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
|
|
31
|
+
async break(context, subject) {
|
|
32
|
+
return await Underpost.event.runCommand('node bin wireguard --wireguard-stop', subject.remote);
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
async restore(context, subject) {
|
|
36
|
+
return await Underpost.event.runCommand('node bin wireguard --wireguard-start', subject.remote);
|
|
37
|
+
},
|
|
38
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import Underpost from '../../src/index.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* End-to-end rehearsal for `wireguard-spoke-down`.
|
|
5
|
+
*
|
|
6
|
+
* Every peer of this node's hub is rehearsed, or those `--nodes` /
|
|
7
|
+
* `--spoke` selects, one at a time. Each is taken down through the same
|
|
8
|
+
* identity chain the remediation resolves — locally for the selected control
|
|
9
|
+
* node, over LAN SSH for a worker — so a spoke that can be broken but not
|
|
10
|
+
* repaired fails the rehearsal rather than an outage.
|
|
11
|
+
*
|
|
12
|
+
* @module test/event-e2e-wireguard-spoke-down.js
|
|
13
|
+
*/
|
|
14
|
+
export default {
|
|
15
|
+
description: 'Stops WireGuard on each registered spoke, then verifies the repair of that spoke alone.',
|
|
16
|
+
|
|
17
|
+
async subjects({ options }) {
|
|
18
|
+
const hubAddress = Underpost.event.hubAddress();
|
|
19
|
+
return Underpost.event.subjectSelection('spoke', options).map((spokeId) => {
|
|
20
|
+
const spoke = Underpost.event.spokes().find((entry) => entry.id === spokeId);
|
|
21
|
+
const target = Underpost.event.spokeTarget(spokeId);
|
|
22
|
+
return {
|
|
23
|
+
label: `spoke ${spokeId}`,
|
|
24
|
+
// The local spoke is proved through the hub tunnel: its own 10.0.0.x stays
|
|
25
|
+
// reachable on the machine itself even when the tunnel carries nothing.
|
|
26
|
+
probes: [{ module: 'icmp', target: spoke.local ? hubAddress : spoke.address }],
|
|
27
|
+
dispatchOptions: { spoke: spokeId },
|
|
28
|
+
remote: { user: target.user, host: target.host },
|
|
29
|
+
};
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
|
|
33
|
+
async break(context, subject) {
|
|
34
|
+
return await Underpost.event.runCommand('node bin wireguard --wireguard-stop', subject.remote);
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
async restore(context, subject) {
|
|
38
|
+
return await Underpost.event.runCommand('node bin wireguard --wireguard-start', subject.remote);
|
|
39
|
+
},
|
|
40
|
+
};
|
|
@@ -1,29 +1,48 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
import axios from 'axios';
|
|
4
|
-
import
|
|
4
|
+
import express from 'express';
|
|
5
5
|
|
|
6
6
|
import { expect } from 'chai';
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
dotenv.config();
|
|
10
|
-
|
|
11
|
-
const PORT = parseInt(process.env.PORT) + 1;
|
|
7
|
+
import { TestRouter } from '../../../src/api/test/test.router.js';
|
|
8
|
+
import { loggerFactory } from '../../../src/server/ops/logger.js';
|
|
12
9
|
|
|
13
10
|
const logger = loggerFactory(import.meta);
|
|
14
11
|
|
|
15
12
|
await logger.setUpInfo();
|
|
16
13
|
|
|
17
|
-
const BASE_URL =
|
|
18
|
-
process.env.NODE_ENV === 'development'
|
|
19
|
-
? `http://localhost:${PORT}/${process.env.BASE_API}`
|
|
20
|
-
: `https://www.nexodev.org/api`;
|
|
21
|
-
|
|
22
14
|
describe(`GET 'Test' API Request `, async () => {
|
|
15
|
+
const app = express();
|
|
16
|
+
app.use('/api/test', TestRouter.router({ authMiddleware: (_req, _res, next) => next() }));
|
|
17
|
+
|
|
18
|
+
let server;
|
|
19
|
+
let baseUrl;
|
|
20
|
+
|
|
21
|
+
beforeAll(
|
|
22
|
+
() =>
|
|
23
|
+
new Promise((resolve, reject) => {
|
|
24
|
+
server = app.listen(0, '127.0.0.1', () => {
|
|
25
|
+
baseUrl = `http://127.0.0.1:${server.address().port}/api`;
|
|
26
|
+
resolve();
|
|
27
|
+
});
|
|
28
|
+
server.on('error', reject);
|
|
29
|
+
}),
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
afterAll(
|
|
33
|
+
() =>
|
|
34
|
+
new Promise((resolve, reject) =>
|
|
35
|
+
server.close((error) => {
|
|
36
|
+
if (error) reject(error);
|
|
37
|
+
else resolve();
|
|
38
|
+
}),
|
|
39
|
+
),
|
|
40
|
+
);
|
|
41
|
+
|
|
23
42
|
{
|
|
24
43
|
const youtubeId = '2aib-pmgUdQ';
|
|
25
|
-
const url = `${BASE_URL}/test/youtube-id/?url=https://www.youtube.com/watch?v=${youtubeId}`;
|
|
26
44
|
it(`youtube id from raw youtube url`, async () => {
|
|
45
|
+
const url = `${baseUrl}/test/youtube-id/?url=https://www.youtube.com/watch?v=${youtubeId}`;
|
|
27
46
|
logger.info('request info', { url });
|
|
28
47
|
const res = await axios.get(url);
|
|
29
48
|
logger.info('response', res.data);
|
|
@@ -32,8 +51,8 @@ describe(`GET 'Test' API Request `, async () => {
|
|
|
32
51
|
}
|
|
33
52
|
{
|
|
34
53
|
const email = 'test@gmail.com';
|
|
35
|
-
const url = `${BASE_URL}/test/verify-email/?email=${email}`;
|
|
36
54
|
it(`valid format email`, async () => {
|
|
55
|
+
const url = `${baseUrl}/test/verify-email/?email=${email}`;
|
|
37
56
|
logger.info('request info', { url });
|
|
38
57
|
const res = await axios.get(url);
|
|
39
58
|
logger.info('response', res.data);
|
|
@@ -42,8 +61,8 @@ describe(`GET 'Test' API Request `, async () => {
|
|
|
42
61
|
}
|
|
43
62
|
{
|
|
44
63
|
const password = 'Password123!';
|
|
45
|
-
const url = `${BASE_URL}/test/is-strong-password/?password=${password}`;
|
|
46
64
|
it(`valid password`, async () => {
|
|
65
|
+
const url = `${baseUrl}/test/is-strong-password/?password=${password}`;
|
|
47
66
|
logger.info('request info', { url });
|
|
48
67
|
const res = await axios.get(url);
|
|
49
68
|
logger.info('response', res.data);
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import { expect } from 'chai';
|
|
4
|
+
import { execFileSync } from 'node:child_process';
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
|
|
7
|
+
// The reroute notice is diagnostic output, so it must not reach stdout: a caller reading a value
|
|
8
|
+
// out of `--plain` would otherwise parse the banner as the value. Spawning the real CLI is the
|
|
9
|
+
// only way to observe the two streams apart, and it belongs to this tier because the cyberia CLI
|
|
10
|
+
// boots on the native packages the product manifest pins — repositories that only run
|
|
11
|
+
// `unit,infra,app` never install them.
|
|
12
|
+
describe('rerouted plain reads stay machine-readable', () => {
|
|
13
|
+
const CYBERIA_CLI = 'bin/cyberia.js';
|
|
14
|
+
const repoRoot = new URL('../../../../', import.meta.url);
|
|
15
|
+
|
|
16
|
+
it.skipIf(!fs.existsSync(new URL(CYBERIA_CLI, repoRoot)))(
|
|
17
|
+
'prints nothing for a key the store lacks',
|
|
18
|
+
() => {
|
|
19
|
+
const stdout = execFileSync(
|
|
20
|
+
process.execPath,
|
|
21
|
+
[CYBERIA_CLI, 'host', 'get', '--plain', 'UNDERPOST_TEST_MISSING_KEY'],
|
|
22
|
+
{ cwd: repoRoot, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] },
|
|
23
|
+
);
|
|
24
|
+
expect(stdout.trim()).to.equal('');
|
|
25
|
+
// A cold CLI start imports the whole command surface; the budget is for the import, not the
|
|
26
|
+
// read, and is stated here rather than left to the runner default a loaded machine exceeds.
|
|
27
|
+
},
|
|
28
|
+
60000,
|
|
29
|
+
);
|
|
30
|
+
});
|
|
@@ -4,7 +4,7 @@ import { expect } from 'chai';
|
|
|
4
4
|
import {
|
|
5
5
|
fillInstanceConfDefaults,
|
|
6
6
|
CYBERIA_INSTANCE_CONF_DEFAULTS,
|
|
7
|
-
} from '
|
|
7
|
+
} from '../../../../src/api/cyberia-server-defaults/cyberia-server-defaults.js';
|
|
8
8
|
|
|
9
9
|
// The CyberiaInstanceConfSchema fields that must always be present after a
|
|
10
10
|
// backfill. Mirrors cyberia-instance-conf.model.js (minus instanceCode, which
|
|
@@ -22,6 +22,7 @@ const SCHEMA_FIELDS = [
|
|
|
22
22
|
'botAggroRange',
|
|
23
23
|
'defaultPlayerWidth',
|
|
24
24
|
'defaultPlayerHeight',
|
|
25
|
+
'playerBaseSpeed',
|
|
25
26
|
'playerBaseLifeRegenMin',
|
|
26
27
|
'playerBaseLifeRegenMax',
|
|
27
28
|
'sumStatsLimit',
|