@underpostnet/cyberia 3.3.0 → 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/.github/workflows/coverall.cyberia.ci.yml +34 -14
- package/.github/workflows/cyberia-client.cd.yml +5 -0
- package/.github/workflows/cyberia-server.cd.yml +5 -0
- 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 +3 -0
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +35 -20
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -0
- package/.prettierignore +1 -0
- package/AGENTS.md +47 -0
- package/CHANGELOG.md +565 -2510
- package/CLI-HELP.md +306 -147
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +4 -4
- package/README.md +21 -1
- package/bin/build.js +66 -41
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +308 -91
- package/bin/deploy.js +18 -104
- package/bin/index.js +308 -91
- package/conf.js +91 -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 +6 -26
- package/deploy/dd-cyberia/init.sh +35 -43
- package/deploy/dd-cyberia/package.sh +17 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +92 -170
- 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 +12 -39
- package/deploy/release/deploy.sh +9 -39
- package/deployment.yaml +7 -2
- package/docker-compose.yml +7 -7
- 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 +101 -40
- package/hardhat/package.json +2 -2
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
- 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/event-monitor.sh +56 -0
- package/scripts/k3s-node-setup.sh +27 -14
- package/scripts/kubeadm-node-setup.sh +31 -11
- package/scripts/maas-setup.sh +8 -8
- 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-world.js +8 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.router.js +2 -2
- package/src/api/cyberia-instance/cyberia-instance.service.js +2 -2
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- 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 +0 -26
- 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.router.js +2 -2
- package/src/api/object-layer/object-layer.service.js +3 -3
- 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 -35
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +184 -82
- package/src/cli/db.js +120 -68
- package/src/cli/deploy.js +153 -71
- 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 -6
- package/src/cli/index.js +322 -142
- 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 +16 -12
- package/src/cli/repository.js +558 -363
- package/src/cli/run.js +331 -650
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +478 -279
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +1 -1
- package/src/cli/test.js +199 -125
- package/src/cli/vultr.js +61 -21
- package/src/cli/wireguard.js +1111 -306
- 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-portal/AppShellCyberiaPortal.js +2 -1
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- 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/CYBERIA-CLI.md +32 -5
- 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/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 +38 -30
- 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 +7 -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 +79 -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 +53 -10
- package/src/projects/cyberia/gemini-client.js +1 -1
- package/src/projects/cyberia/generate-saga.js +1 -1
- package/src/projects/cyberia/hot-reload-trigger.js +1 -1
- package/src/projects/cyberia/instance-data.js +1 -1
- 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 +1 -1
- package/src/projects/cyberia/semantic-layer-generator.js +1 -1
- package/src/projects/underpost/catalog-underpost.js +9 -1
- 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/docker-compose.yml +7 -7
- 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} +144 -11
- package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
- package/src/server/{middlewares.js → network/middlewares.js} +3 -3
- 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/{underpost-compression.js → network/underpost-compression.js} +1 -1
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/{cron.js → ops/cron.js} +349 -74
- 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/{systemd.js → ops/systemd.js} +55 -1
- package/src/server/{conf.js → runtime/conf.js} +513 -422
- 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 -12
- 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/{selinux.js → security/selinux.js} +1 -1
- 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} +1 -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/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
- 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/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +609 -55
- 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} +6 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -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/deploy/lib/logging.sh +0 -96
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/coverall-test-cyberia.sh +0 -24
- package/scripts/coverall-test.sh +0 -24
- 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/environment.js +0 -98
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository identity on the client.
|
|
3
|
+
*
|
|
4
|
+
* The owner is resolved at build time by `src/server/storage/repository.js` and travels
|
|
5
|
+
* in `renderPayload.repository`. Composing every GitHub, Pages and Coveralls URL
|
|
6
|
+
* from it is what keeps a fork's links pointing at the fork instead of upstream.
|
|
7
|
+
*
|
|
8
|
+
* @module src/client/components/core/Repository.js
|
|
9
|
+
* @namespace PwaRepository
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Identity injected by the build.
|
|
14
|
+
* @returns {{owner: string, name: string, template: string, packageSuffix: string}}
|
|
15
|
+
* @memberof PwaRepository
|
|
16
|
+
*/
|
|
17
|
+
const repositoryIdentity = () => window.renderPayload.repository;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Repository holding the prebuilt package and its published demo.
|
|
21
|
+
* @returns {string}
|
|
22
|
+
* @memberof PwaRepository
|
|
23
|
+
*/
|
|
24
|
+
const packageRepository = () => {
|
|
25
|
+
const { template, packageSuffix } = repositoryIdentity();
|
|
26
|
+
return `${template}${packageSuffix}`;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Composes a github.com URL under the resolved owner.
|
|
31
|
+
* @param {...string} segments - Path segments after the owner.
|
|
32
|
+
* @returns {string}
|
|
33
|
+
* @memberof PwaRepository
|
|
34
|
+
*/
|
|
35
|
+
const githubUrl = (...segments) =>
|
|
36
|
+
`https://github.com/${[repositoryIdentity().owner, ...segments].filter(Boolean).join('/')}/`;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Composes a GitHub Pages URL under the resolved owner.
|
|
40
|
+
* @param {string} repository - Repository publishing the page.
|
|
41
|
+
* @returns {string}
|
|
42
|
+
* @memberof PwaRepository
|
|
43
|
+
*/
|
|
44
|
+
const githubPagesUrl = (repository) => `https://${repositoryIdentity().owner}.github.io/${repository}/`;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Coveralls report for the engine repository this build came from.
|
|
48
|
+
* @returns {string}
|
|
49
|
+
* @memberof PwaRepository
|
|
50
|
+
*/
|
|
51
|
+
const coverallsUrl = () => {
|
|
52
|
+
const { owner, name } = repositoryIdentity();
|
|
53
|
+
return `https://coveralls.io/github/${owner}/${name}`;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
export { coverallsUrl, githubPagesUrl, githubUrl, packageRepository, repositoryIdentity };
|
|
@@ -42,6 +42,13 @@ class Translate {
|
|
|
42
42
|
static hasChangedListener(key) {
|
|
43
43
|
return translateEvents.has(key);
|
|
44
44
|
}
|
|
45
|
+
static text(keyLang, options = { disableTextFormat: false }) {
|
|
46
|
+
const translations = Translate.Data[keyLang];
|
|
47
|
+
if (!translations) return options.disableTextFormat ? keyLang : textFormatted(keyLang);
|
|
48
|
+
const lang = s('html')?.lang || 'en';
|
|
49
|
+
const value = translations[lang] ?? translations.en ?? keyLang;
|
|
50
|
+
return options.disableTextFormat ? value : textFormatted(value);
|
|
51
|
+
}
|
|
45
52
|
static async emitChanged(detail) {
|
|
46
53
|
await translateEvents.emit(TranslateEventType.changed, detail);
|
|
47
54
|
}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Utility module for fullscreen mode management with cross-browser and PWA compatibility.
|
|
3
3
|
* Provides robust fullscreen detection, event handling, and UI synchronization.
|
|
4
|
-
* @module src/client/components/core/
|
|
5
|
-
* @namespace
|
|
4
|
+
* @module src/client/components/core/ViewModeController.js
|
|
5
|
+
* @namespace ViewModeControllerClient
|
|
6
6
|
*/
|
|
7
7
|
import { Responsive } from './Responsive.js';
|
|
8
8
|
import { ToggleSwitch } from './ToggleSwitch.js';
|
|
9
9
|
import { Translate } from './Translate.js';
|
|
10
|
-
import {
|
|
10
|
+
import { fullScreenIn, fullScreenOut, s } from './VanillaJs.js';
|
|
11
11
|
/**
|
|
12
12
|
* Manages fullscreen mode state, event handling, and UI synchronization.
|
|
13
13
|
* Supports all major browsers and PWA/Nativefier environments with comprehensive
|
|
14
14
|
* vendor-prefixed API detection.
|
|
15
|
-
* @memberof
|
|
15
|
+
* @memberof ViewModeControllerClient
|
|
16
16
|
*/
|
|
17
|
-
class
|
|
17
|
+
class ViewModeController {
|
|
18
18
|
/**
|
|
19
19
|
* Internal state flag tracking the intended fullscreen mode.
|
|
20
20
|
* @type {boolean}
|
|
@@ -43,7 +43,7 @@ class FullScreen {
|
|
|
43
43
|
* - Mozilla (Firefox)
|
|
44
44
|
* - Microsoft (IE/Edge)
|
|
45
45
|
* @private
|
|
46
|
-
* @memberof
|
|
46
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
47
47
|
* @returns {boolean} True if currently in fullscreen mode, false otherwise.
|
|
48
48
|
*/
|
|
49
49
|
static _isFullScreen() {
|
|
@@ -62,16 +62,16 @@ class FullScreen {
|
|
|
62
62
|
* Prevents race conditions using the _syncInProgress flag.
|
|
63
63
|
* Updates the toggle switch only if there's a mismatch between UI and actual state.
|
|
64
64
|
* @private
|
|
65
|
-
* @memberof
|
|
65
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
66
66
|
* @returns {void}
|
|
67
67
|
*/
|
|
68
68
|
static _syncToggleState() {
|
|
69
|
-
if (
|
|
70
|
-
|
|
71
|
-
const actualFullScreen =
|
|
69
|
+
if (ViewModeController._syncInProgress) return;
|
|
70
|
+
ViewModeController._syncInProgress = true;
|
|
71
|
+
const actualFullScreen = ViewModeController._isFullScreen();
|
|
72
72
|
// Only update if there's a mismatch
|
|
73
|
-
if (
|
|
74
|
-
|
|
73
|
+
if (ViewModeController._fullScreenSwitch !== actualFullScreen) {
|
|
74
|
+
ViewModeController._fullScreenSwitch = actualFullScreen;
|
|
75
75
|
// Update toggle switch UI if it exists
|
|
76
76
|
const toggle = s('.fullscreen');
|
|
77
77
|
if (toggle && ToggleSwitch.Tokens[`fullscreen`]) {
|
|
@@ -82,18 +82,18 @@ class FullScreen {
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
setTimeout(() => {
|
|
85
|
-
|
|
85
|
+
ViewModeController._syncInProgress = false;
|
|
86
86
|
}, 100);
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* Event handler for fullscreen change events.
|
|
90
90
|
* Triggers UI state synchronization when fullscreen mode changes.
|
|
91
91
|
* @private
|
|
92
|
-
* @memberof
|
|
92
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
93
93
|
* @returns {void}
|
|
94
94
|
*/
|
|
95
95
|
static _handleFullScreenChange() {
|
|
96
|
-
|
|
96
|
+
ViewModeController._syncToggleState();
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
99
|
* Attaches all necessary event listeners for fullscreen mode detection.
|
|
@@ -103,20 +103,20 @@ class FullScreen {
|
|
|
103
103
|
* - ESC key detection (fallback for manual fullscreen exit)
|
|
104
104
|
* Only attaches listeners once to prevent duplicates.
|
|
105
105
|
* @private
|
|
106
|
-
* @memberof
|
|
106
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
107
107
|
* @returns {void}
|
|
108
108
|
*/
|
|
109
109
|
static _addEventListeners() {
|
|
110
|
-
if (
|
|
110
|
+
if (ViewModeController._eventListenersAdded) return;
|
|
111
111
|
const events = ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'];
|
|
112
112
|
events.forEach((eventName) => {
|
|
113
|
-
document.addEventListener(eventName, () =>
|
|
113
|
+
document.addEventListener(eventName, () => ViewModeController._handleFullScreenChange(), false);
|
|
114
114
|
});
|
|
115
115
|
// Additional check for PWA/Nativefier window resize events
|
|
116
116
|
window.addEventListener(
|
|
117
117
|
'resize',
|
|
118
118
|
() => {
|
|
119
|
-
setTimeout(() =>
|
|
119
|
+
setTimeout(() => ViewModeController._syncToggleState(), 150);
|
|
120
120
|
},
|
|
121
121
|
false,
|
|
122
122
|
);
|
|
@@ -125,77 +125,80 @@ class FullScreen {
|
|
|
125
125
|
'keydown',
|
|
126
126
|
(e) => {
|
|
127
127
|
if (e.key === 'Escape' || e.keyCode === 27) {
|
|
128
|
-
setTimeout(() =>
|
|
128
|
+
setTimeout(() => ViewModeController._syncToggleState(), 100);
|
|
129
129
|
}
|
|
130
130
|
},
|
|
131
131
|
false,
|
|
132
132
|
);
|
|
133
|
-
|
|
133
|
+
ViewModeController._eventListenersAdded = true;
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
136
136
|
* Enters fullscreen mode if not already in fullscreen.
|
|
137
137
|
* Updates internal state and triggers fullscreen API.
|
|
138
138
|
* Verifies the state change after a delay to ensure synchronization.
|
|
139
139
|
* @private
|
|
140
|
-
* @memberof
|
|
140
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
141
141
|
* @returns {void}
|
|
142
142
|
*/
|
|
143
143
|
static _enterFullScreen() {
|
|
144
|
-
if (
|
|
145
|
-
|
|
144
|
+
if (ViewModeController._isFullScreen()) return;
|
|
145
|
+
ViewModeController._fullScreenSwitch = true;
|
|
146
146
|
fullScreenIn();
|
|
147
147
|
// Verify after attempt
|
|
148
|
-
setTimeout(() =>
|
|
148
|
+
setTimeout(() => ViewModeController._syncToggleState(), 300);
|
|
149
149
|
}
|
|
150
150
|
/**
|
|
151
151
|
* Exits fullscreen mode if currently in fullscreen.
|
|
152
152
|
* Updates internal state and triggers fullscreen exit API.
|
|
153
153
|
* Verifies the state change after a delay to ensure synchronization.
|
|
154
154
|
* @private
|
|
155
|
-
* @memberof
|
|
155
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
156
156
|
* @returns {void}
|
|
157
157
|
*/
|
|
158
158
|
static _exitFullScreen() {
|
|
159
|
-
if (!
|
|
160
|
-
|
|
159
|
+
if (!ViewModeController._isFullScreen()) return;
|
|
160
|
+
ViewModeController._fullScreenSwitch = false;
|
|
161
161
|
fullScreenOut();
|
|
162
162
|
// Verify after attempt
|
|
163
|
-
setTimeout(() =>
|
|
163
|
+
setTimeout(() => ViewModeController._syncToggleState(), 300);
|
|
164
164
|
}
|
|
165
165
|
/**
|
|
166
166
|
* Renders the fullscreen toggle setting UI component.
|
|
167
167
|
* Initializes fullscreen state detection, sets up event listeners,
|
|
168
168
|
* and creates a toggle switch for user interaction.
|
|
169
169
|
* Integrates with the Responsive system for dynamic updates.
|
|
170
|
-
* @memberof
|
|
170
|
+
* @memberof ViewModeControllerClient.ViewModeController
|
|
171
171
|
* @returns {Promise<string>} A promise resolving to the HTML string for the fullscreen setting component.
|
|
172
172
|
*/
|
|
173
173
|
static async RenderSetting() {
|
|
174
174
|
// Initialize state from actual fullscreen status
|
|
175
|
-
|
|
175
|
+
ViewModeController._fullScreenSwitch = ViewModeController._isFullScreen();
|
|
176
176
|
// Setup event listeners once
|
|
177
|
-
|
|
177
|
+
ViewModeController._addEventListeners();
|
|
178
178
|
// Update responsive event
|
|
179
|
-
Responsive.onChanged(
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
Responsive.onChanged(
|
|
180
|
+
() => {
|
|
181
|
+
ViewModeController._syncToggleState();
|
|
182
|
+
},
|
|
183
|
+
{ key: 'full-screen-settings' },
|
|
184
|
+
);
|
|
182
185
|
return html`<div class="in section-mp">
|
|
183
186
|
${await ToggleSwitch.instance({
|
|
184
187
|
wrapper: true,
|
|
185
188
|
wrapperLabel: html`<i class="fa-solid fa-expand"></i> ${Translate.instance('fullscreen')}`,
|
|
186
189
|
id: 'fullscreen',
|
|
187
190
|
disabledOnClick: true,
|
|
188
|
-
checked:
|
|
191
|
+
checked: ViewModeController._fullScreenSwitch,
|
|
189
192
|
on: {
|
|
190
193
|
unchecked: () => {
|
|
191
|
-
|
|
194
|
+
ViewModeController._exitFullScreen();
|
|
192
195
|
},
|
|
193
196
|
checked: () => {
|
|
194
|
-
|
|
197
|
+
ViewModeController._enterFullScreen();
|
|
195
198
|
},
|
|
196
199
|
},
|
|
197
200
|
})}
|
|
198
201
|
</div>`;
|
|
199
202
|
}
|
|
200
203
|
}
|
|
201
|
-
export {
|
|
204
|
+
export { ViewModeController };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { CryptoService } from '../../services/crypto/crypto.service.js';
|
|
2
|
-
import { UserService } from '../../services/user/user.service.js';
|
|
3
2
|
import { Auth } from './Auth.js';
|
|
4
3
|
import { BtnIcon } from './BtnIcon.js';
|
|
5
4
|
import { getId } from './CommonJs.js';
|
|
@@ -21,16 +20,6 @@ class Wallet {
|
|
|
21
20
|
hash: 'SHA-256',
|
|
22
21
|
};
|
|
23
22
|
const format = 'jwk';
|
|
24
|
-
(async () => {
|
|
25
|
-
return;
|
|
26
|
-
const { data: payload } = await UserService.get({ id: 'public-key-sign-token' });
|
|
27
|
-
const signature = await window.crypto.subtle.sign(
|
|
28
|
-
algorithm,
|
|
29
|
-
keyPair.privateKey,
|
|
30
|
-
new TextEncoder().encode(payload),
|
|
31
|
-
);
|
|
32
|
-
const base64Signature = btoa(String.fromCharCode(...new Uint8Array(signature)));
|
|
33
|
-
})();
|
|
34
23
|
const keyPair = await window.crypto.subtle.generateKey(algorithm, true, ['sign', 'verify']);
|
|
35
24
|
const privateKey = await window.crypto.subtle.exportKey(format, keyPair.privateKey);
|
|
36
25
|
const publicKey = await window.crypto.subtle.exportKey(format, keyPair.publicKey);
|
|
@@ -150,7 +150,13 @@ class PwaWorker {
|
|
|
150
150
|
}
|
|
151
151
|
const run = async () => {
|
|
152
152
|
const registration = await this.getRegistration();
|
|
153
|
-
if (
|
|
153
|
+
if (registration) {
|
|
154
|
+
try {
|
|
155
|
+
await registration.update();
|
|
156
|
+
} catch (error) {
|
|
157
|
+
logger.error('Error updating service worker:', error);
|
|
158
|
+
}
|
|
159
|
+
} else await this.register();
|
|
154
160
|
};
|
|
155
161
|
if (document.readyState === 'complete') run();
|
|
156
162
|
else window.addEventListener('load', run, { once: true });
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Css } from '../core/Css.js';
|
|
2
|
-
import {
|
|
2
|
+
import { ViewModeController } from '../core/ViewModeController.js';
|
|
3
3
|
import { Translate } from '../core/Translate.js';
|
|
4
4
|
import { Worker } from '../core/Worker.js';
|
|
5
5
|
|
|
6
6
|
class SettingsCryptokoyn {
|
|
7
7
|
static async instance() {
|
|
8
|
-
let render = await
|
|
8
|
+
let render = await ViewModeController.RenderSetting();
|
|
9
9
|
render += await Css.RenderSetting();
|
|
10
10
|
render += await Translate.RenderSetting();
|
|
11
11
|
render += await Worker.RenderSetting();
|
|
@@ -3,6 +3,7 @@ import { BtnIcon } from '../core/BtnIcon.js';
|
|
|
3
3
|
import { getId, newInstance, random } from '../core/CommonJs.js';
|
|
4
4
|
import { Css, ThemeEvents, Themes, darkTheme } from '../core/Css.js';
|
|
5
5
|
import { Docs } from '../core/Docs.js';
|
|
6
|
+
import { githubUrl } from '../core/Repository.js';
|
|
6
7
|
import { EventsUI } from '../core/EventsUI.js';
|
|
7
8
|
import { LogIn } from '../core/LogIn.js';
|
|
8
9
|
import { LogOut } from '../core/LogOut.js';
|
|
@@ -567,7 +568,7 @@ class AppShellCyberiaPortal {
|
|
|
567
568
|
html`<img class="inl cyberia-menu-icon" src="${getProxyPath()}assets/ui-icons/arrow-right.png" />`,
|
|
568
569
|
coverageUrl: () => `${getProxyPath()}docs/hardhat-coverage`,
|
|
569
570
|
demoUrl: () => `https://client.cyberiaonline.com/`,
|
|
570
|
-
lastReleaseUrl: () =>
|
|
571
|
+
lastReleaseUrl: () => githubUrl('engine-cyberia'),
|
|
571
572
|
}),
|
|
572
573
|
handleType: 'bar',
|
|
573
574
|
observer: true,
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Css } from '../core/Css.js';
|
|
2
|
-
import {
|
|
2
|
+
import { ViewModeController } from '../core/ViewModeController.js';
|
|
3
3
|
import { Translate } from '../core/Translate.js';
|
|
4
4
|
import { Worker } from '../core/Worker.js';
|
|
5
5
|
|
|
6
6
|
class SettingsCyberiaPortal {
|
|
7
7
|
static async instance() {
|
|
8
|
-
let render = await
|
|
8
|
+
let render = await ViewModeController.RenderSetting();
|
|
9
9
|
render += await Css.RenderSetting();
|
|
10
10
|
render += await Translate.RenderSetting();
|
|
11
11
|
render += await Worker.RenderSetting();
|
|
@@ -239,7 +239,7 @@ class AppShellDefault {
|
|
|
239
239
|
`,
|
|
240
240
|
);
|
|
241
241
|
} else {
|
|
242
|
-
const backgroundImage = `${getProxyPath()}assets/background/
|
|
242
|
+
const backgroundImage = `${getProxyPath()}assets/background/white.jpg`;
|
|
243
243
|
htmls(
|
|
244
244
|
`.style-ssr-background-image`,
|
|
245
245
|
css`
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Css } from '../core/Css.js';
|
|
2
|
-
import {
|
|
2
|
+
import { ViewModeController } from '../core/ViewModeController.js';
|
|
3
3
|
import { Translate } from '../core/Translate.js';
|
|
4
4
|
import { Worker } from '../core/Worker.js';
|
|
5
5
|
|
|
6
6
|
class SettingsDefault {
|
|
7
7
|
static async instance() {
|
|
8
|
-
let render = await
|
|
8
|
+
let render = await ViewModeController.RenderSetting();
|
|
9
9
|
render += await Css.RenderSetting();
|
|
10
10
|
render += await Translate.RenderSetting();
|
|
11
11
|
render += await Worker.RenderSetting();
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Css } from '../core/Css.js';
|
|
2
|
-
import {
|
|
2
|
+
import { ViewModeController } from '../core/ViewModeController.js';
|
|
3
3
|
import { Translate } from '../core/Translate.js';
|
|
4
4
|
import { Worker } from '../core/Worker.js';
|
|
5
5
|
|
|
6
6
|
class SettingsItemledger {
|
|
7
7
|
static async instance() {
|
|
8
|
-
let render = await
|
|
8
|
+
let render = await ViewModeController.RenderSetting();
|
|
9
9
|
render += await Css.RenderSetting();
|
|
10
10
|
render += await Translate.RenderSetting();
|
|
11
11
|
render += await Worker.RenderSetting();
|
|
@@ -18,6 +18,7 @@ import { CyberpunkBloggerUnderpost } from './CyberpunkBloggerUnderpost.js';
|
|
|
18
18
|
import { Badge } from '../core/Badge.js';
|
|
19
19
|
import { SettingsUnderpost } from './SettingsUnderpost.js';
|
|
20
20
|
import { Recover } from '../core/Recover.js';
|
|
21
|
+
import { githubUrl, repositoryIdentity } from '../core/Repository.js';
|
|
21
22
|
import { PanelForm } from '../core/PanelForm.js';
|
|
22
23
|
import { SearchBox } from '../core/SearchBox.js';
|
|
23
24
|
import { DocumentSearchProvider } from './DocumentSearchProvider.js';
|
|
@@ -214,7 +215,7 @@ class AppShellUnderpost {
|
|
|
214
215
|
text: html`<span class="menu-label-text">${Translate.instance('github')}</span>`,
|
|
215
216
|
}),
|
|
216
217
|
attrs: `data-id="github"`,
|
|
217
|
-
tabHref:
|
|
218
|
+
tabHref: githubUrl(),
|
|
218
219
|
handleContainerClass: 'handle-btn-container',
|
|
219
220
|
tooltipHtml: await Badge.instance(buildBadgeToolTipMenuOption('github')),
|
|
220
221
|
})}
|
|
@@ -683,7 +684,7 @@ class AppShellUnderpost {
|
|
|
683
684
|
});
|
|
684
685
|
|
|
685
686
|
EventsUI.onClick(`.main-btn-github`, async () => {
|
|
686
|
-
location.href =
|
|
687
|
+
location.href = githubUrl(repositoryIdentity().template);
|
|
687
688
|
});
|
|
688
689
|
}
|
|
689
690
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Css } from '../core/Css.js';
|
|
2
|
-
import {
|
|
2
|
+
import { ViewModeController } from '../core/ViewModeController.js';
|
|
3
3
|
import { Translate } from '../core/Translate.js';
|
|
4
4
|
import { Worker } from '../core/Worker.js';
|
|
5
5
|
|
|
6
6
|
class SettingsUnderpost {
|
|
7
7
|
static async instance() {
|
|
8
|
-
let render = await
|
|
8
|
+
let render = await ViewModeController.RenderSetting();
|
|
9
9
|
render += await Css.RenderSetting();
|
|
10
10
|
render += await Translate.RenderSetting();
|
|
11
11
|
render += await Worker.RenderSetting();
|
|
@@ -87,6 +87,9 @@ cyberia instance [instance-code] [options]
|
|
|
87
87
|
| `--import [path]` | Import from a backup directory (upsert, preserves UUIDs) |
|
|
88
88
|
| `--conf` | With `--export`/`--import`: only `cyberia-instance.json` + `-conf.json` |
|
|
89
89
|
| `--drop` | Drop all documents associated with the instance code |
|
|
90
|
+
| `--export-current-fallbackworld` | Capture the in-memory procedural fallback world, then export it |
|
|
91
|
+
| `--keep-fallback-codes` | Capture using the raw `fallback-map-*` / canonical action-quest codes |
|
|
92
|
+
| `--fallback-url <url>` | Capture the world a running engine serves instead of regenerating it |
|
|
90
93
|
| `--env-path <path>` · `--mongo-host <host>` · `--dev` | env / DB / dev overrides |
|
|
91
94
|
|
|
92
95
|
```bash
|
|
@@ -95,6 +98,30 @@ cyberia instance FOREST --import ./backups/FOREST
|
|
|
95
98
|
cyberia instance FOREST --drop
|
|
96
99
|
```
|
|
97
100
|
|
|
101
|
+
### Capturing the procedural fallback world
|
|
102
|
+
|
|
103
|
+
The fallback world is never persisted: every engine process rebuilds it from the code defaults at
|
|
104
|
+
boot and serves it whenever a requested instance is absent. `--export-current-fallbackworld` freezes
|
|
105
|
+
that in-memory world into MongoDB under a real instance code — maps and portal topology, the
|
|
106
|
+
instance conf, and the content collections the fallback path serves from code rather than the DB
|
|
107
|
+
(skills, entity-type defaults, dialogues, actions, quests) — and then exports it like any other
|
|
108
|
+
instance.
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Freeze the current fallback world as PROC-1 and back it up
|
|
112
|
+
cyberia instance PROC-1 --export-current-fallbackworld --dev
|
|
113
|
+
|
|
114
|
+
# Restore it later as an ordinary persisted instance
|
|
115
|
+
cyberia instance PROC-1 --import --dev
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Map, action and quest codes are namespaced under the instance code (`fallback-map-0` →
|
|
119
|
+
`PROC-1-map-0`) so successive captures never overwrite each other; `--keep-fallback-codes` writes
|
|
120
|
+
the canonical codes verbatim instead. Sprites are the one thing a capture cannot synthesise: when a
|
|
121
|
+
referenced item id has no `ObjectLayer` document the command aborts and names the ids to import with
|
|
122
|
+
`cyberia ol <ids> --import`. Staged fallback default items live only in the serving engine process,
|
|
123
|
+
so pass `--fallback-url http://localhost:4001` to capture a live world rather than regenerating it.
|
|
124
|
+
|
|
98
125
|
---
|
|
99
126
|
|
|
100
127
|
## `cyberia client-hints` — presentation hints
|
|
@@ -198,7 +225,7 @@ cyberia run-workflow build-server-dashboard
|
|
|
198
225
|
## Bringing up the full stack locally
|
|
199
226
|
|
|
200
227
|
```bash
|
|
201
|
-
node bin run cluster
|
|
228
|
+
node bin run cluster --deploy-id dd-cyberia --dev
|
|
202
229
|
```
|
|
203
230
|
|
|
204
231
|
One command, no extra flags. It resets and rebuilds the node, deploys MongoDB / IPFS / Valkey, imports each database from its git backup, installs the Gateway API control plane, and deploys `dd-cyberia` behind it.
|
|
@@ -213,16 +240,16 @@ The run ends with a gateway status report: listener and route conditions, the wo
|
|
|
213
240
|
|
|
214
241
|
### With the MMO services
|
|
215
242
|
|
|
216
|
-
|
|
243
|
+
`--instance-id` brings up custom instances from `engine-private/conf/dd-cyberia/conf.instances.json` in the same run:
|
|
217
244
|
|
|
218
245
|
```bash
|
|
219
|
-
node bin run cluster
|
|
220
|
-
node bin run cluster
|
|
246
|
+
node bin run cluster --deploy-id dd-cyberia --instance-id mmo-server --dev
|
|
247
|
+
node bin run cluster --deploy-id dd-cyberia --instance-id mmo-server,mmo-client --dev
|
|
221
248
|
```
|
|
222
249
|
|
|
223
250
|
Each id runs only where `dd-cyberia` declares it, and only once the portal workload has rolled out — `cyberia-server` dials the engine's gRPC ClusterIP for its world configuration at boot, so the content authority has to be serving first. `mmo-server` names the whole variant family (`amethyst-strata-expansion`, `FOREST`, `TEST`); `mmo-server-forest` names one variant.
|
|
224
251
|
|
|
225
|
-
`server.cyberiaonline.com` and `client.cyberiaonline.com` are issued the same self-signed certificates as the portal hosts and written into the same `/etc/hosts` pass, so the three services are reachable over TLS from a local browser without further setup. In production the same
|
|
252
|
+
`server.cyberiaonline.com` and `client.cyberiaonline.com` are issued the same self-signed certificates as the portal hosts and written into the same `/etc/hosts` pass, so the three services are reachable over TLS from a local browser without further setup. In production the same flag issues cert-manager certificates instead.
|
|
226
253
|
|
|
227
254
|
To place the static documents again without redeploying — after rebuilding the portal client, for instance:
|
|
228
255
|
|
|
@@ -8,9 +8,29 @@
|
|
|
8
8
|
|
|
9
9
|
_Stackable Rendering Layers as a Unified Tokenized Reality_
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<!-- Tech stack -->
|
|
14
|
+
<div align="center">
|
|
15
|
+
|
|
16
|
+
<a target="_top" href='https://download.rockylinux.org/pub/rocky/9/'><img alt='rockylinux' src='https://img.shields.io/badge/Rocky Linux v9.8-100000?style=flat&logo=rockylinux&logoColor=white&labelColor=10b981&color=727273'/></a> <a target="_top" href='https://www.npmjs.com/package/npm?activeTab=versions'><img alt='npm' src='https://img.shields.io/badge/npm v11.6.2-100000?style=flat&logo=npm&logoColor=white&labelColor=CB3837&color=727273'/></a> <a target="_top" href='https://nodejs.org/download/release'><img alt='nodedotjs' src='https://img.shields.io/badge/node v24.15.0-100000?style=flat&logo=nodedotjs&logoColor=white&labelColor=5FA04E&color=727273'/></a> <a target="_top" href='https://pgp.mongodb.com/'><img alt='mongodb' src='https://img.shields.io/badge/mongodb_server v7.0-100000?style=flat&logo=mongodb&logoColor=white&labelColor=47A248&color=727273'/></a>
|
|
12
17
|
|
|
13
18
|
</div>
|
|
19
|
+
|
|
20
|
+
<!-- CI/CD and health -->
|
|
21
|
+
<div align="center">
|
|
22
|
+
|
|
23
|
+
[](https://github.com/underpostnet/engine-cyberia/actions/workflows/docker-image.engine-cyberia.ci.yml) [](https://github.com/underpostnet/engine-cyberia/actions/workflows/coverall.cyberia.ci.yml) [](https://coveralls.io/github/underpostnet/engine-cyberia?branch=main) [](https://socket.dev/npm/package/cyberia/overview/3.3.73)
|
|
24
|
+
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
<!-- Distribution and package -->
|
|
28
|
+
<div align="center">
|
|
29
|
+
|
|
30
|
+
[](https://www.npmjs.com/package/cyberia) [](https://www.npmjs.com/package/cyberia) [](https://www.jsdelivr.com/package/npm/cyberia) [](https://www.npmjs.com/package/cyberia)
|
|
31
|
+
|
|
32
|
+
</div>
|
|
33
|
+
|
|
14
34
|
Cyberia is an MMORPG extension built on the Underpost Platform. The platform owns the
|
|
15
35
|
toolchain, deployment surface, PWA delivery, and base infrastructure. Cyberia adds a three-service MMO
|
|
16
36
|
runtime: `engine-cyberia`, `cyberia-server`, and `cyberia-client`.
|
|
@@ -20,7 +20,7 @@ hardhat/
|
|
|
20
20
|
ObjectLayerToken.sol ERC-1155 multi-token contract
|
|
21
21
|
scripts/
|
|
22
22
|
deployObjectLayerToken.js Deployment script
|
|
23
|
-
test/ Contract tests (
|
|
23
|
+
test/ Contract tests (node:test + viem)
|
|
24
24
|
deployments/ Deployment artifacts (auto-generated)
|
|
25
25
|
ignition/ Hardhat Ignition modules (optional)
|
|
26
26
|
networks/ Network-specific genesis configs
|
|
@@ -199,15 +199,32 @@ The artifact is consumed by:
|
|
|
199
199
|
|
|
200
200
|
## Running Tests
|
|
201
201
|
|
|
202
|
+
Contract tests are the `contracts` tier of the platform runner, so they run
|
|
203
|
+
alongside every other suite and report to the same dashboard:
|
|
204
|
+
|
|
202
205
|
```bash
|
|
203
|
-
|
|
204
|
-
|
|
206
|
+
underpost test contracts # this tier only
|
|
207
|
+
underpost test contracts --allure # also write results for the dashboard
|
|
208
|
+
underpost test contracts --grep Burning
|
|
209
|
+
underpost test # every tier, contracts last
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Hardhat's own tasks stay available for contract-only work:
|
|
205
213
|
|
|
206
|
-
|
|
207
|
-
|
|
214
|
+
```bash
|
|
215
|
+
cd hardhat
|
|
216
|
+
npm test # hardhat test
|
|
217
|
+
npm run coverage # Solidity line/statement coverage
|
|
218
|
+
REPORT_GAS=true npm test
|
|
208
219
|
```
|
|
209
220
|
|
|
210
|
-
Tests use **
|
|
221
|
+
Tests use **node:test + viem** via `@nomicfoundation/hardhat-toolbox-viem`. The
|
|
222
|
+
`hardhat` in-process network simulates Besu behavior.
|
|
223
|
+
|
|
224
|
+
The tier runs the suites on Node's test runner rather than through `hardhat
|
|
225
|
+
test`: Hardhat pins its own reporter, and Node's can emit the JUnit results the
|
|
226
|
+
Allure dashboard ingests while still printing a readable run. Compilation still
|
|
227
|
+
goes through `hardhat build` first, so artifacts and the EVM are identical.
|
|
211
228
|
|
|
212
229
|
---
|
|
213
230
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|