@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
|
@@ -11,4 +11,9 @@ spec:
|
|
|
11
11
|
selector:
|
|
12
12
|
app: grafana
|
|
13
13
|
sessionAffinity: None
|
|
14
|
-
|
|
14
|
+
# ClusterIP: this Service is what Prometheus' provisioned datasource and the
|
|
15
|
+
# edge route resolve. Browser access is a separate decision, published by
|
|
16
|
+
# `monitor --grafana-host` (edge route) or `--node-port` (LAN), so a cluster
|
|
17
|
+
# with no LoadBalancer controller does not sit on a Service that never gets an
|
|
18
|
+
# address.
|
|
19
|
+
type: ClusterIP
|
|
@@ -55,6 +55,12 @@ spec:
|
|
|
55
55
|
- '--keyFile'
|
|
56
56
|
- '/opt/mongodb/mongodb-keyfile'
|
|
57
57
|
- '--bind_ip_all'
|
|
58
|
+
# Pinned, not inferred. mongod sizes its cache from the cgroup limit and lands on
|
|
59
|
+
# the 256MB floor, which leaves no headroom for a `mongodump` running in this same
|
|
60
|
+
# container — the dump gets OOM-killed (exit 137), the container restarts, and the
|
|
61
|
+
# replica set re-elects mid-backup.
|
|
62
|
+
- '--wiredTigerCacheSizeGB'
|
|
63
|
+
- '0.25'
|
|
58
64
|
|
|
59
65
|
ports:
|
|
60
66
|
- containerPort: 27017
|
|
@@ -91,10 +97,11 @@ spec:
|
|
|
91
97
|
resources:
|
|
92
98
|
requests:
|
|
93
99
|
cpu: '100m'
|
|
94
|
-
memory: '
|
|
100
|
+
memory: '512Mi'
|
|
95
101
|
limits:
|
|
96
102
|
cpu: '500m'
|
|
97
|
-
|
|
103
|
+
# 256MB WiredTiger cache + connections + an in-container mongodump/mongorestore.
|
|
104
|
+
memory: '1536Mi'
|
|
98
105
|
volumes:
|
|
99
106
|
- name: raw-secret-keyfile-volume
|
|
100
107
|
secret:
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
# pv-pvc.yaml
|
|
2
|
+
# The host path lives under /data, the node storage root this platform owns and labels
|
|
3
|
+
# `container_file_t`; a path outside it (the previous '/mnt/data') carries the policy default and
|
|
4
|
+
# is unreadable to the unprivileged container. `claimRef` pins the volume to exactly one claim —
|
|
5
|
+
# without it this PV and postgres-pv-volume were interchangeable `manual`-class volumes over the
|
|
6
|
+
# same directory, so either database could bind either one and both could land on one data tree.
|
|
2
7
|
apiVersion: v1
|
|
3
8
|
kind: PersistentVolume
|
|
4
9
|
metadata:
|
|
@@ -7,12 +12,19 @@ metadata:
|
|
|
7
12
|
type: local
|
|
8
13
|
spec:
|
|
9
14
|
storageClassName: manual
|
|
15
|
+
persistentVolumeReclaimPolicy: Retain
|
|
10
16
|
capacity:
|
|
11
17
|
storage: 20Gi
|
|
12
18
|
accessModes:
|
|
13
19
|
- ReadWriteOnce
|
|
20
|
+
claimRef:
|
|
21
|
+
apiVersion: v1
|
|
22
|
+
kind: PersistentVolumeClaim
|
|
23
|
+
namespace: default
|
|
24
|
+
name: mysql-pv-claim
|
|
14
25
|
hostPath:
|
|
15
|
-
path: '/
|
|
26
|
+
path: '/data/mysql'
|
|
27
|
+
type: DirectoryOrCreate
|
|
16
28
|
---
|
|
17
29
|
apiVersion: v1
|
|
18
30
|
kind: PersistentVolumeClaim
|
|
@@ -20,6 +32,7 @@ metadata:
|
|
|
20
32
|
name: mysql-pv-claim
|
|
21
33
|
spec:
|
|
22
34
|
storageClassName: manual
|
|
35
|
+
volumeName: mysql-pv
|
|
23
36
|
accessModes:
|
|
24
37
|
- ReadWriteOnce
|
|
25
38
|
resources:
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# The host path lives under /data, the node storage root this platform owns and labels
|
|
2
|
+
# `container_file_t`. `claimRef` pins the volume to exactly one claim: this PV and mysql-pv were
|
|
3
|
+
# previously interchangeable `manual`-class volumes over the same '/mnt/data' directory, so either
|
|
4
|
+
# database could bind either one and both could end up writing one data tree.
|
|
1
5
|
kind: PersistentVolume
|
|
2
6
|
apiVersion: v1
|
|
3
7
|
metadata:
|
|
@@ -7,9 +11,16 @@ metadata:
|
|
|
7
11
|
app: postgres
|
|
8
12
|
spec:
|
|
9
13
|
storageClassName: manual
|
|
14
|
+
persistentVolumeReclaimPolicy: Retain
|
|
10
15
|
capacity:
|
|
11
16
|
storage: 5Gi
|
|
12
17
|
accessModes:
|
|
13
18
|
- ReadWriteMany
|
|
19
|
+
claimRef:
|
|
20
|
+
apiVersion: v1
|
|
21
|
+
kind: PersistentVolumeClaim
|
|
22
|
+
namespace: default
|
|
23
|
+
name: postgres-pv-claim
|
|
14
24
|
hostPath:
|
|
15
|
-
path: '/
|
|
25
|
+
path: '/data/postgresql'
|
|
26
|
+
type: DirectoryOrCreate
|
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
apiVersion: v1
|
|
3
|
-
kind: ConfigMap
|
|
4
|
-
metadata:
|
|
5
|
-
name: prometheus-config
|
|
6
|
-
labels:
|
|
7
|
-
app: prometheus
|
|
8
|
-
data:
|
|
9
|
-
prometheus.yml: |
|
|
10
|
-
global:
|
|
11
|
-
scrape_interval: 30s
|
|
12
|
-
evaluation_interval: 30s
|
|
13
|
-
|
|
14
|
-
scrape_configs:
|
|
15
|
-
- job_name: 'scraper'
|
|
16
|
-
metrics_path: /metrics
|
|
17
|
-
scheme: https
|
|
18
|
-
static_configs:
|
|
19
|
-
- targets: []
|
|
20
|
-
# tls_config:
|
|
21
|
-
# insecure_skip_verify: true
|
|
22
|
-
|
|
23
1
|
---
|
|
24
2
|
apiVersion: apps/v1
|
|
25
3
|
kind: Deployment
|
|
@@ -37,6 +15,7 @@ spec:
|
|
|
37
15
|
labels:
|
|
38
16
|
app: prometheus
|
|
39
17
|
spec:
|
|
18
|
+
serviceAccountName: prometheus
|
|
40
19
|
containers:
|
|
41
20
|
- name: prometheus
|
|
42
21
|
image: prom/prometheus:latest
|
|
@@ -51,8 +30,22 @@ spec:
|
|
|
51
30
|
volumeMounts:
|
|
52
31
|
- name: prometheus-config
|
|
53
32
|
mountPath: /etc/prometheus/
|
|
33
|
+
- name: prometheus-rules
|
|
34
|
+
mountPath: /etc/prometheus/rules/
|
|
54
35
|
- name: prometheus-data
|
|
55
36
|
mountPath: /prometheus
|
|
37
|
+
readinessProbe:
|
|
38
|
+
httpGet:
|
|
39
|
+
path: /-/ready
|
|
40
|
+
port: 9090
|
|
41
|
+
initialDelaySeconds: 10
|
|
42
|
+
periodSeconds: 15
|
|
43
|
+
livenessProbe:
|
|
44
|
+
httpGet:
|
|
45
|
+
path: /-/healthy
|
|
46
|
+
port: 9090
|
|
47
|
+
initialDelaySeconds: 30
|
|
48
|
+
periodSeconds: 20
|
|
56
49
|
resources:
|
|
57
50
|
requests:
|
|
58
51
|
memory: '200Mi'
|
|
@@ -61,6 +54,9 @@ spec:
|
|
|
61
54
|
- name: prometheus-config
|
|
62
55
|
configMap:
|
|
63
56
|
name: prometheus-config
|
|
57
|
+
- name: prometheus-rules
|
|
58
|
+
configMap:
|
|
59
|
+
name: prometheus-rules
|
|
64
60
|
- name: prometheus-data
|
|
65
61
|
emptyDir: {}
|
|
66
62
|
|
package/package.json
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"type": "module",
|
|
3
3
|
"main": "src/index.js",
|
|
4
4
|
"name": "@underpostnet/cyberia",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.3.73",
|
|
6
6
|
"description": "Cyberia CLI — toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"start": "node --max-old-space-size=8192 src/server",
|
|
9
9
|
"build": "node bin client",
|
|
10
|
-
"test": "
|
|
11
|
-
"test:
|
|
10
|
+
"test": "node bin test",
|
|
11
|
+
"test:coverage": "COVERAGE_ENFORCE=1 node bin test unit,infra,app,cyberia",
|
|
12
12
|
"dev": "NODE_ENV=development nodemon src/server",
|
|
13
13
|
"dev:container": "NODE_ENV=development node src/server",
|
|
14
14
|
"prod:container": "NODE_ENV=production node src/server",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"dev:proxy": "NODE_ENV=development node src/proxy proxy",
|
|
18
18
|
"docs": "typedoc --options typedoc.json",
|
|
19
19
|
"install:global": "npm install -g prettier",
|
|
20
|
-
"install:test": "npm install -g
|
|
20
|
+
"install:test": "npm install -g coveralls-next",
|
|
21
21
|
"install": "npm run install:global && npm run install:test",
|
|
22
22
|
"prettier": "prettier --write .",
|
|
23
23
|
"fix": "npm audit fix --force && npm audit",
|
|
@@ -26,7 +26,6 @@
|
|
|
26
26
|
"security:secrets:ci": "gitleaks detect --source . --config .gitleaks.toml --redact=1",
|
|
27
27
|
"security:deps": "npm audit",
|
|
28
28
|
"security": "npm run security:secrets:ci && npm run security:deps",
|
|
29
|
-
"clean": "node bin env clean && node bin run clean",
|
|
30
29
|
"docker:generate": "node bin docker-compose --generate --deploy-id dd-cyberia --docker-compose-id cyberia",
|
|
31
30
|
"docker:up": "node bin docker-compose --up --deploy-id dd-cyberia --docker-compose-id cyberia",
|
|
32
31
|
"docker:up:build": "node bin docker-compose --up --build --deploy-id dd-cyberia --docker-compose-id cyberia",
|
|
@@ -41,7 +40,8 @@
|
|
|
41
40
|
"docker:reset": "node bin docker-compose --reset --deploy-id dd-cyberia --docker-compose-id cyberia"
|
|
42
41
|
},
|
|
43
42
|
"bin": {
|
|
44
|
-
"cyberia": "bin/index.js"
|
|
43
|
+
"cyberia": "bin/index.js",
|
|
44
|
+
"underpost": "bin/index.js"
|
|
45
45
|
},
|
|
46
46
|
"repository": {
|
|
47
47
|
"type": "git",
|
|
@@ -72,12 +72,12 @@
|
|
|
72
72
|
},
|
|
73
73
|
"homepage": "https://github.com/underpostnet/engine-cyberia#readme",
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"underpost": "^3.
|
|
75
|
+
"underpost": "^3.3.73",
|
|
76
76
|
"adm-zip": "^0.6.0",
|
|
77
77
|
"maxrects-packer": "^2.7.3",
|
|
78
78
|
"pngjs": "^7.0.0",
|
|
79
79
|
"jimp": "^1.6.0",
|
|
80
|
-
"sharp": "^0.
|
|
80
|
+
"sharp": "^0.35.3",
|
|
81
81
|
"ethers": "~6.16.0"
|
|
82
82
|
},
|
|
83
83
|
"publishConfig": {
|
|
@@ -90,12 +90,85 @@
|
|
|
90
90
|
"minimatch": "^10.2.2",
|
|
91
91
|
"glob": "^11.0.0",
|
|
92
92
|
"diff": ">=8.0.3",
|
|
93
|
-
"js-yaml": "
|
|
93
|
+
"js-yaml": "$js-yaml",
|
|
94
94
|
"debug": ">=4.3.6",
|
|
95
95
|
"serialize-javascript": ">=7.0.5",
|
|
96
96
|
"router": {
|
|
97
97
|
"path-to-regexp": ">=8.4.0"
|
|
98
98
|
},
|
|
99
99
|
"ws": "^8.20.2"
|
|
100
|
+
},
|
|
101
|
+
"devDependencies": {
|
|
102
|
+
"@fortawesome/fontawesome-free": "^7.3.1",
|
|
103
|
+
"@fullcalendar/rrule": "^7.0.2",
|
|
104
|
+
"@grpc/grpc-js": "^1.14.4",
|
|
105
|
+
"@grpc/proto-loader": "^0.8.1",
|
|
106
|
+
"@neodrag/vanilla": "^2.3.1",
|
|
107
|
+
"@vitest/coverage-v8": "4.1.11",
|
|
108
|
+
"ag-grid-community": "^36.1.0",
|
|
109
|
+
"allure-vitest": "3.11.0",
|
|
110
|
+
"axios": "^1.20.0",
|
|
111
|
+
"bumpp": "^12.2.2",
|
|
112
|
+
"chai": "^6.2.2",
|
|
113
|
+
"clipboardy": "^5.3.2",
|
|
114
|
+
"cloudinary": "^2.11.0",
|
|
115
|
+
"colors": "^1.4.0",
|
|
116
|
+
"commander": "^15.0.0",
|
|
117
|
+
"compression": "^1.7.4",
|
|
118
|
+
"cookie-parser": "^1.4.7",
|
|
119
|
+
"cors": "^2.8.6",
|
|
120
|
+
"d3": "^7.9.0",
|
|
121
|
+
"dexie": "^4.4.5",
|
|
122
|
+
"dotenv": "^17.4.2",
|
|
123
|
+
"easymde": "^2.21.0",
|
|
124
|
+
"esbuild": "^0.28.2",
|
|
125
|
+
"escape-string-regexp": "^5.0.0",
|
|
126
|
+
"express": "^5.2.1",
|
|
127
|
+
"express-fileupload": "^1.4.3",
|
|
128
|
+
"express-rate-limit": "^8.6.2",
|
|
129
|
+
"express-slow-down": "^3.1.1",
|
|
130
|
+
"fast-json-stable-stringify": "^2.1.0",
|
|
131
|
+
"favicons": "^7.3.1",
|
|
132
|
+
"fs-extra": "^11.4.0",
|
|
133
|
+
"fullcalendar": "^7.0.2",
|
|
134
|
+
"helmet": "^8.3.0",
|
|
135
|
+
"html-minifier-terser": "^7.2.0",
|
|
136
|
+
"http-proxy-middleware": "^4.2.0",
|
|
137
|
+
"ignore-walk": "^9.0.0",
|
|
138
|
+
"iovalkey": "^0.4.0",
|
|
139
|
+
"json-colorizer": "^3.0.1",
|
|
140
|
+
"js-yaml": "^5.4.1",
|
|
141
|
+
"jsonwebtoken": "^9.0.3",
|
|
142
|
+
"mariadb": "^3.5.3",
|
|
143
|
+
"mongoose": "^9.9.4",
|
|
144
|
+
"morgan": "^1.12.0",
|
|
145
|
+
"marked": "^18.0.11",
|
|
146
|
+
"nodemailer": "^9.0.6",
|
|
147
|
+
"nodemon": "^3.0.1",
|
|
148
|
+
"peer": "^1.0.2",
|
|
149
|
+
"peerjs": "^1.5.5",
|
|
150
|
+
"prom-client": "^15.1.2",
|
|
151
|
+
"read": "^6.0.0",
|
|
152
|
+
"rrule": "^2.8.1",
|
|
153
|
+
"shelljs": "^0.10.0",
|
|
154
|
+
"sitemap": "^9.0.1",
|
|
155
|
+
"socket.io": "^4.8.3",
|
|
156
|
+
"sortablejs": "^1.15.0",
|
|
157
|
+
"split-file": "^2.3.0",
|
|
158
|
+
"swagger-autogen": "^2.23.7",
|
|
159
|
+
"swagger-ui-express": "^5.0.0",
|
|
160
|
+
"typedoc": "^0.28.20",
|
|
161
|
+
"typescript": "6.0.3",
|
|
162
|
+
"validator": "^13.15.35",
|
|
163
|
+
"vanilla-jsoneditor": "^3.13.0",
|
|
164
|
+
"vitest": "4.1.11",
|
|
165
|
+
"winston": "^3.19.0",
|
|
166
|
+
"workbox-background-sync": "^7.4.1",
|
|
167
|
+
"workbox-cacheable-response": "^7.4.1",
|
|
168
|
+
"workbox-core": "^7.4.1",
|
|
169
|
+
"workbox-expiration": "^7.4.1",
|
|
170
|
+
"workbox-precaching": "^7.4.1",
|
|
171
|
+
"workbox-routing": "^7.4.1",
|
|
172
|
+
"workbox-strategies": "^7.4.1"
|
|
100
173
|
}
|
|
101
|
-
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SINCE="recent"
|
|
5
|
+
FAIL_ON_AVC="1"
|
|
6
|
+
|
|
7
|
+
while [ "$#" -gt 0 ]; do
|
|
8
|
+
case "$1" in
|
|
9
|
+
--since)
|
|
10
|
+
[ "$#" -ge 2 ] || { echo "--since requires an ausearch time value" >&2; exit 2; }
|
|
11
|
+
SINCE="$2"
|
|
12
|
+
shift 2
|
|
13
|
+
;;
|
|
14
|
+
--no-fail)
|
|
15
|
+
FAIL_ON_AVC="0"
|
|
16
|
+
shift
|
|
17
|
+
;;
|
|
18
|
+
-h|--help)
|
|
19
|
+
echo "Usage: $0 [--since recent|today|boot|TIME] [--no-fail]"
|
|
20
|
+
exit 0
|
|
21
|
+
;;
|
|
22
|
+
*)
|
|
23
|
+
echo "Unknown option: $1" >&2
|
|
24
|
+
exit 2
|
|
25
|
+
;;
|
|
26
|
+
esac
|
|
27
|
+
done
|
|
28
|
+
|
|
29
|
+
command -v getenforce >/dev/null 2>&1 || {
|
|
30
|
+
echo "SELinux userspace is unavailable. Install policycoreutils." >&2
|
|
31
|
+
exit 2
|
|
32
|
+
}
|
|
33
|
+
command -v ausearch >/dev/null 2>&1 || {
|
|
34
|
+
echo "ausearch is unavailable. Install audit and start auditd." >&2
|
|
35
|
+
exit 2
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
MODE="$(getenforce)"
|
|
39
|
+
echo "SELinux mode: $MODE"
|
|
40
|
+
[ "$MODE" = "Enforcing" ] || echo "WARNING: expected Enforcing mode" >&2
|
|
41
|
+
command -v sestatus >/dev/null 2>&1 && sestatus
|
|
42
|
+
|
|
43
|
+
AUDIT=(ausearch)
|
|
44
|
+
[ "$(id -u)" -eq 0 ] || AUDIT=(sudo ausearch)
|
|
45
|
+
RAW_FILE="$(mktemp /tmp/underpost-selinux-avc.XXXXXX)"
|
|
46
|
+
trap 'rm -f "$RAW_FILE"' EXIT
|
|
47
|
+
|
|
48
|
+
"${AUDIT[@]}" -m AVC,USER_AVC,SELINUX_ERR -ts "$SINCE" --raw > "$RAW_FILE" 2>/dev/null || true
|
|
49
|
+
if ! grep -q '^type=' "$RAW_FILE"; then
|
|
50
|
+
echo "No SELinux AVC denials found since: $SINCE"
|
|
51
|
+
[ "$MODE" = "Enforcing" ]
|
|
52
|
+
exit
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
echo "SELinux AVC denials found since: $SINCE" >&2
|
|
56
|
+
"${AUDIT[@]}" -m AVC,USER_AVC,SELINUX_ERR -ts "$SINCE" -i || true
|
|
57
|
+
if command -v sealert >/dev/null 2>&1; then
|
|
58
|
+
echo "sealert analysis:"
|
|
59
|
+
sealert -a "$RAW_FILE" || true
|
|
60
|
+
else
|
|
61
|
+
echo "Install setroubleshoot-server for sealert analysis." >&2
|
|
62
|
+
fi
|
|
63
|
+
|
|
64
|
+
[ "$FAIL_ON_AVC" = "0" ] || exit 1
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
NAMESPACE="${NAMESPACE:-default}"
|
|
5
|
+
TARGET_URL="${TARGET_URL:-https://underpost.net/}"
|
|
6
|
+
ENVOY_NAMESPACE="${ENVOY_NAMESPACE:-envoy-gateway-system}"
|
|
7
|
+
|
|
8
|
+
COLOR_CYAN='\033[0;36m'
|
|
9
|
+
COLOR_GREEN='\033[0;32m'
|
|
10
|
+
COLOR_YELLOW='\033[1;33m'
|
|
11
|
+
COLOR_RED='\033[0;31m'
|
|
12
|
+
COLOR_NC='\033[0m'
|
|
13
|
+
|
|
14
|
+
echo -e "${COLOR_CYAN}=== 1. Active Probes Status (Prometheus Instant Query) ===${COLOR_NC}"
|
|
15
|
+
kubectl exec -n "$NAMESPACE" deployment/prometheus -c prometheus -- \
|
|
16
|
+
promtool query instant http://localhost:9090 'probe_success' || true
|
|
17
|
+
|
|
18
|
+
echo -e "\n${COLOR_CYAN}=== 2. Currently Firing Alerts ===${COLOR_NC}"
|
|
19
|
+
kubectl exec -n "$NAMESPACE" deployment/prometheus -c prometheus -- \
|
|
20
|
+
promtool query instant http://localhost:9090 'ALERTS{alertstate="firing"}' || true
|
|
21
|
+
|
|
22
|
+
echo -e "\n${COLOR_CYAN}=== 3. Blackbox Exporter Live Test (${TARGET_URL}) ===${COLOR_NC}"
|
|
23
|
+
ENCODED_URL=$(python3 -c "import urllib.parse; print(urllib.parse.quote('$TARGET_URL', safe=''))" 2>/dev/null || echo "https%3A%2F%2Funderpost.net%2F")
|
|
24
|
+
kubectl get --raw "/api/v1/namespaces/$NAMESPACE/services/blackbox-exporter:9115/proxy/probe?module=http_2xx&target=${ENCODED_URL}" | grep -E "probe_success|probe_http_status_code" || true
|
|
25
|
+
|
|
26
|
+
echo -e "\n${COLOR_CYAN}=== 4. Prometheus Logs (Rule Evaluation & Scraping) ===${COLOR_NC}"
|
|
27
|
+
kubectl logs -n "$NAMESPACE" -l app=prometheus --tail=50 --all-containers=true
|
|
28
|
+
|
|
29
|
+
echo -e "\n${COLOR_CYAN}=== 5. Alertmanager Logs (Notifications & Dispatch) ===${COLOR_NC}"
|
|
30
|
+
kubectl logs -n "$NAMESPACE" -l app=alertmanager --tail=50 --all-containers=true
|
|
31
|
+
|
|
32
|
+
echo -e "\n${COLOR_CYAN}=== 6. Blackbox Exporter Logs (ICMP/HTTP Probes Execution) ===${COLOR_NC}"
|
|
33
|
+
kubectl logs -n "$NAMESPACE" -l app=blackbox-exporter --tail=50 --all-containers=true
|
|
34
|
+
|
|
35
|
+
echo -e "\n${COLOR_CYAN}=== 7. WireGuard Interface Status ===${COLOR_NC}"
|
|
36
|
+
if command -v wg &> /dev/null; then
|
|
37
|
+
echo -e "${COLOR_YELLOW}[Host WireGuard Status]${COLOR_NC}"
|
|
38
|
+
wg show || true
|
|
39
|
+
|
|
40
|
+
echo -e "\n${COLOR_YELLOW}[WireGuard Systemd Services]${COLOR_NC}"
|
|
41
|
+
systemctl list-units --type=service 'wg-quick*' --no-pager || true
|
|
42
|
+
else
|
|
43
|
+
echo -e "${COLOR_YELLOW}'wg' CLI tool is not installed on the host.${COLOR_NC}"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
echo -e "\n${COLOR_CYAN}=== 8. Ingress & Gateway Diagnostics ===${COLOR_NC}"
|
|
47
|
+
if kubectl get ns "$ENVOY_NAMESPACE" &>/dev/null; then
|
|
48
|
+
echo -e "${COLOR_YELLOW}[Targeting namespace: ${ENVOY_NAMESPACE}]${COLOR_NC}"
|
|
49
|
+
kubectl get pods -n "$ENVOY_NAMESPACE" || true
|
|
50
|
+
else
|
|
51
|
+
echo -e "${COLOR_YELLOW}[Namespace '${ENVOY_NAMESPACE}' not found. Searching cluster-wide for Ingress/Envoy resources...]${COLOR_NC}"
|
|
52
|
+
kubectl get pods -A -l "app.kubernetes.io/name in (envoy-gateway, envoy, ingress-nginx, ingress)" 2>/dev/null || \
|
|
53
|
+
kubectl get pods -A | grep -E "envoy|ingress|gateway" || true
|
|
54
|
+
fi
|
|
55
|
+
|
|
56
|
+
echo -e "\n${COLOR_GREEN}Done checking cluster monitoring state.${COLOR_NC}"
|
package/scripts/gpu-diag.sh
CHANGED
|
File without changes
|
package/scripts/ip-info.sh
CHANGED
|
File without changes
|
|
@@ -49,22 +49,38 @@ if [ -z "$(ls -A "$ENGINE_ROOT")" ]; then
|
|
|
49
49
|
fi
|
|
50
50
|
|
|
51
51
|
# ---------------------------------------------------------------------------
|
|
52
|
-
#
|
|
52
|
+
# System-wide Node.js is required by service units under SELinux.
|
|
53
|
+
#
|
|
54
|
+
# RHEL/Rocky only. An underpost node is an SELinux-Enforcing RHEL host: the storage labeling,
|
|
55
|
+
# the systemd units and the CRI bring-up below are all written against that policy, so a
|
|
56
|
+
# package manager that is merely present is not evidence the rest of this script applies.
|
|
57
|
+
# Commissioning a Debian/Ubuntu machine that is not an underpost node is `underpost baremetal`.
|
|
53
58
|
# ---------------------------------------------------------------------------
|
|
54
|
-
|
|
59
|
+
if ! command -v dnf >/dev/null 2>&1; then
|
|
60
|
+
echo "ERROR: underpost nodes are RHEL/Rocky only; dnf was not found" >&2
|
|
61
|
+
exit 1
|
|
62
|
+
fi
|
|
55
63
|
|
|
56
|
-
|
|
64
|
+
sudo dnf install -y policycoreutils policycoreutils-python-utils selinux-policy-targeted audit rsync
|
|
57
65
|
|
|
58
|
-
|
|
59
|
-
#
|
|
60
|
-
|
|
66
|
+
# `command -v node` is not the question this step asks: an nvm runtime under $HOME answers it and
|
|
67
|
+
# is exactly what a unit cannot execute. Only a Node 24 at a system path counts.
|
|
68
|
+
system_node_path() {
|
|
69
|
+
local candidate
|
|
70
|
+
for candidate in /usr/bin/node /usr/local/bin/node /bin/node; do
|
|
71
|
+
if [ -x "$candidate" ] && "$candidate" --version 2>/dev/null | grep -q '^v24'; then
|
|
72
|
+
printf '%s' "$candidate"
|
|
73
|
+
return 0
|
|
74
|
+
fi
|
|
75
|
+
done
|
|
76
|
+
return 1
|
|
77
|
+
}
|
|
61
78
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
ln -sf "$(command -v npx)" /usr/local/bin/npx
|
|
79
|
+
if ! system_node_path >/dev/null; then
|
|
80
|
+
echo "Installing system-wide Node.js 24..."
|
|
81
|
+
curl -fsSL https://rpm.nodesource.com/setup_24.x | sudo bash -
|
|
82
|
+
sudo dnf install -y nodejs
|
|
83
|
+
fi
|
|
68
84
|
|
|
69
85
|
echo "
|
|
70
86
|
██╗░░░██╗███╗░░██╗██████╗░███████╗██████╗░██████╗░░█████╗░░██████╗████████╗
|
|
@@ -81,7 +97,7 @@ cd "$ENGINE_ROOT"
|
|
|
81
97
|
|
|
82
98
|
# Install JS deps and generate secrets using the local engine entrypoint only.
|
|
83
99
|
npm install
|
|
84
|
-
|
|
100
|
+
# Cluster Secret administration is a control-plane capability, not part of node bring-up.
|
|
85
101
|
|
|
86
102
|
if [ "$ROLE" = "control" ]; then
|
|
87
103
|
echo "Installing underpost CLI..."
|
|
@@ -116,7 +132,7 @@ if [ "$ROLE" = "control" ]; then
|
|
|
116
132
|
curl -sfL https://get.k3s.io | \
|
|
117
133
|
K3S_URL="https://${CONTROL_IP}:6443" \
|
|
118
134
|
K3S_TOKEN="${K3S_TOKEN}" \
|
|
119
|
-
sh -s - agent
|
|
135
|
+
sh -s - agent $(if command -v selinuxenabled >/dev/null 2>&1 && selinuxenabled; then printf '%s' '--selinux'; fi)
|
|
120
136
|
|
|
121
137
|
echo ""
|
|
122
138
|
echo "K3s worker joined https://${CONTROL_IP}:6443 successfully."
|
|
@@ -5,8 +5,8 @@ set -euo pipefail
|
|
|
5
5
|
# Underpost Kubeadm Node Setup (bare-metal physical node)
|
|
6
6
|
#
|
|
7
7
|
# Mirrors scripts/k3s-node-setup.sh but for kubeadm on real hardware: it runs on
|
|
8
|
-
# the freshly deployed OS (disk-installed Rocky) after first boot, installs
|
|
9
|
-
# Node.js, ensures the engine source is present, and drives the cluster bring-up
|
|
8
|
+
# the freshly deployed OS (disk-installed Rocky) after first boot, installs
|
|
9
|
+
# system-wide Node.js, ensures the engine source is present, and drives the cluster bring-up
|
|
10
10
|
# through the local engine entrypoint `node bin cluster` (src/cli/cluster.js) —
|
|
11
11
|
# reusing its kubeadm + Contour + host-init logic instead of reimplementing it.
|
|
12
12
|
#
|
|
@@ -146,33 +146,43 @@ if [ "$JOIN_ONLY" = "1" ]; then
|
|
|
146
146
|
fi
|
|
147
147
|
|
|
148
148
|
# ---------------------------------------------------------------------------
|
|
149
|
-
# 0. Base prerequisites
|
|
150
|
-
# NVM needs to extract Node.js and the engine clone needs. Install them first.
|
|
149
|
+
# 0. Base prerequisites.
|
|
151
150
|
# ---------------------------------------------------------------------------
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
151
|
+
# RHEL/Rocky only. An underpost node is an SELinux-Enforcing RHEL host: the storage labeling, the
|
|
152
|
+
# systemd units and the CRI bring-up below are all written against that policy. Commissioning a
|
|
153
|
+
# Debian/Ubuntu machine that is not an underpost node is `underpost baremetal`.
|
|
154
|
+
if ! command -v dnf >/dev/null 2>&1; then
|
|
155
|
+
echo "ERROR: underpost nodes are RHEL/Rocky only; dnf was not found" >&2
|
|
156
|
+
exit 1
|
|
157
|
+
fi
|
|
158
|
+
|
|
159
|
+
log "Installing base prerequisites..."
|
|
160
|
+
sudo dnf install -y tar xz gzip bzip2 git curl rsync ca-certificates which findutils policycoreutils policycoreutils-python-utils selinux-policy-targeted audit 2>/dev/null \
|
|
161
|
+
|| dnf install -y tar xz gzip bzip2 git curl rsync ca-certificates which findutils policycoreutils policycoreutils-python-utils selinux-policy-targeted audit
|
|
155
162
|
|
|
156
163
|
# ---------------------------------------------------------------------------
|
|
157
|
-
# 1.
|
|
158
|
-
#
|
|
164
|
+
# 1. System-wide Node.js. Home-directory runtimes cannot be used by hardened
|
|
165
|
+
# systemd services under SELinux.
|
|
159
166
|
# ---------------------------------------------------------------------------
|
|
160
|
-
|
|
161
|
-
|
|
167
|
+
# `command -v node` is not the question this step asks: an nvm runtime under $HOME answers it and
|
|
168
|
+
# is exactly what a unit cannot execute. Only a Node 24 at a system path counts.
|
|
169
|
+
system_node_path() {
|
|
170
|
+
local candidate
|
|
171
|
+
for candidate in /usr/bin/node /usr/local/bin/node /bin/node; do
|
|
172
|
+
if [ -x "$candidate" ] && "$candidate" --version 2>/dev/null | grep -q '^v24'; then
|
|
173
|
+
printf '%s' "$candidate"
|
|
174
|
+
return 0
|
|
175
|
+
fi
|
|
176
|
+
done
|
|
177
|
+
return 1
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if node_path="$(system_node_path)"; then
|
|
181
|
+
log "System-wide Node.js $("$node_path" --version) already installed at $node_path"
|
|
162
182
|
else
|
|
163
|
-
log "Installing
|
|
164
|
-
curl -
|
|
165
|
-
|
|
166
|
-
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
|
|
167
|
-
# shellcheck disable=SC1090
|
|
168
|
-
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
|
169
|
-
|
|
170
|
-
nvm install 24.15.0
|
|
171
|
-
nvm use 24.15.0
|
|
172
|
-
nvm alias default 24.15.0
|
|
173
|
-
ln -sf "$(command -v node)" /usr/local/bin/node
|
|
174
|
-
ln -sf "$(command -v npm)" /usr/local/bin/npm
|
|
175
|
-
ln -sf "$(command -v npx)" /usr/local/bin/npx
|
|
183
|
+
log "Installing system-wide Node.js 24..."
|
|
184
|
+
curl -fsSL https://rpm.nodesource.com/setup_24.x | sudo bash -
|
|
185
|
+
sudo dnf install -y nodejs
|
|
176
186
|
fi
|
|
177
187
|
|
|
178
188
|
echo "
|
|
@@ -189,7 +199,7 @@ Bringing up underpost kubeadm node (role=$ROLE) from $ENGINE_ROOT
|
|
|
189
199
|
# ---------------------------------------------------------------------------
|
|
190
200
|
# 2. Engine source — required by `node bin cluster` (manifests + CLI).
|
|
191
201
|
# Normalizes any (custom-named) repo into the canonical paths, mirroring
|
|
192
|
-
# src/server/start.js: clone into a temp dir then copy the contents into the
|
|
202
|
+
# src/server/runtime/start.js: clone into a temp dir then copy the contents into the
|
|
193
203
|
# target, so the working tree is always $ENGINE_ROOT regardless of repo name.
|
|
194
204
|
# ---------------------------------------------------------------------------
|
|
195
205
|
command -v git >/dev/null 2>&1 || sudo dnf install -y git
|
|
@@ -259,10 +269,8 @@ fi
|
|
|
259
269
|
|
|
260
270
|
cd "$ENGINE_ROOT"
|
|
261
271
|
|
|
262
|
-
# Clone + normalize the private secrets repo into $ENGINE_ROOT/engine-private
|
|
263
|
-
#
|
|
264
|
-
# regardless of the private repo's name. The token is masked in logs and then
|
|
265
|
-
# stripped from the saved remote URL.
|
|
272
|
+
# Clone + normalize the private secrets repo into $ENGINE_ROOT/engine-private, regardless of the
|
|
273
|
+
# private repo's name. The token is masked in logs and then stripped from the saved remote URL.
|
|
266
274
|
if [ -n "$GITHUB_TOKEN" ]; then
|
|
267
275
|
PRIV_URL="https://${GITHUB_USERNAME:-x-access-token}:${GITHUB_TOKEN}@${ENGINE_PRIVATE_REPO#https://}"
|
|
268
276
|
if clone_or_pull "$PRIV_URL" "$ENGINE_PRIVATE_BRANCH" "$ENGINE_ROOT/engine-private" "origin" "$GITHUB_TOKEN"; then
|
|
@@ -275,10 +283,11 @@ else
|
|
|
275
283
|
log "WARNING: GITHUB_TOKEN not provided; engine-private not cloned — secrets will be unavailable"
|
|
276
284
|
fi
|
|
277
285
|
|
|
278
|
-
# Install JS deps
|
|
286
|
+
# Install JS deps using the local engine entrypoint. Cluster Secret administration is not part of
|
|
287
|
+
# node bring-up: it is a control-plane capability, projected by `cron --setup-start --apply` on the
|
|
288
|
+
# control node. A worker joining the cluster has no business writing cluster-wide Secrets.
|
|
279
289
|
npm install
|
|
280
290
|
npm install -g underpost
|
|
281
|
-
node bin run secret
|
|
282
291
|
|
|
283
292
|
# ---------------------------------------------------------------------------
|
|
284
293
|
# 3. Host prerequisites (Docker, CRI-O, kubelet/kubeadm/kubectl, ...) via cluster.js
|
package/scripts/lxd-vm-setup.sh
CHANGED
|
File without changes
|
|
File without changes
|