@underpostnet/cyberia 3.3.0 → 3.3.76
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 +17 -5
- package/.github/workflows/coverall.cyberia.ci.yml +39 -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/publish.cyberia.ci.yml +44 -0
- 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 +96 -0
- package/CHANGELOG.md +653 -2513
- package/CLI-HELP.md +323 -157
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +5 -5
- package/README.md +48 -28
- package/bin/build.js +86 -41
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +1494 -1403
- package/bin/deploy.js +18 -104
- package/bin/index.js +1494 -1403
- package/compose.env +17 -5
- package/conf.js +98 -7
- package/deploy/cyberia-client/deploy.sh +46 -0
- package/deploy/cyberia-client/package.sh +17 -0
- package/deploy/cyberia-client/state.sh +15 -0
- package/deploy/cyberia-server/deploy.sh +46 -0
- package/deploy/cyberia-server/package.sh +17 -0
- package/deploy/cyberia-server/state.sh +15 -0
- package/deploy/dd-cyberia/deploy.sh +9 -29
- package/deploy/dd-cyberia/init.sh +38 -45
- package/deploy/dd-cyberia/package.sh +16 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +133 -147
- package/deploy/lib/config.sh +29 -0
- package/deploy/lib/github-actions-logging.sh +610 -0
- package/deploy/lib/host.sh +194 -0
- package/deploy/lib/state.sh +65 -0
- package/deploy/pwa-microservices-template/deploy.sh +17 -42
- package/deploy/release/deploy.sh +9 -41
- package/deployment.yaml +7 -2
- package/docker-compose.yml +23 -17
- 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/deployment/mongo-express/deployment.yaml +46 -27
- package/manifests/deployment/mongo-express/kustomization.yaml +9 -0
- package/manifests/deployment/mongo-express/mongo-express-nodeport.yaml +18 -0
- package/manifests/deployment/mongo-express/service.yaml +16 -0
- package/manifests/deployment/mongo-express-no-auth/disable-mongodb-auth.yaml +16 -0
- package/manifests/deployment/mongo-express-no-auth/kustomization.yaml +16 -0
- 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 +87 -12
- 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 +5 -5
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +15 -10
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +36 -5
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +7 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +90 -186
- 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 +3 -3
- package/src/api/cyberia-action/cyberia-action.service.js +5 -6
- package/src/api/cyberia-audio/cyberia-audio.controller.js +6 -0
- package/src/api/cyberia-audio/cyberia-audio.model.js +61 -0
- package/src/api/cyberia-audio/cyberia-audio.router.js +21 -0
- package/src/api/cyberia-audio/cyberia-audio.service.js +220 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +2 -4
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +10 -19
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +13 -35
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +17 -34
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
- 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.model.js +2 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +3 -3
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +8 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +31 -20
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +468 -5
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +502 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +29 -40
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +5 -5
- package/src/api/cyberia-instance/cyberia-instance-items.js +98 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +35 -142
- package/src/api/cyberia-instance/cyberia-instance.controller.js +2 -5
- package/src/api/cyberia-instance/cyberia-instance.model.js +0 -14
- package/src/api/cyberia-instance/cyberia-instance.router.js +5 -18
- package/src/api/cyberia-instance/cyberia-instance.service.js +5 -45
- package/src/api/cyberia-instance/cyberia-world-generator.js +8 -13
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +49 -75
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +76 -3
- 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 +8 -4
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.controller.js +31 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.model.js +56 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.router.js +33 -0
- package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +189 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +4 -4
- package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.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 +403 -214
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.model.js +6 -6
- 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.ref.js +153 -0
- package/src/api/file/file.ref.json +11 -2
- 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 +47 -12
- package/src/api/object-layer/object-layer.router.js +12 -5
- package/src/api/object-layer/object-layer.service.js +116 -123
- 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 +402 -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 +191 -82
- package/src/cli/db.js +120 -68
- package/src/cli/deploy.js +157 -75
- 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-selection.js +115 -0
- package/src/cli/fs.js +159 -343
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -6
- package/src/cli/index.js +343 -151
- 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 +586 -363
- package/src/cli/run.js +398 -843
- 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 +203 -125
- package/src/cli/vultr.js +61 -21
- package/src/cli/wireguard.js +1112 -306
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +327 -303
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/Modal.js +56 -1
- 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/ActionEngineCyberia.js +12 -36
- package/src/client/components/cyberia/EntityEngineCyberia.js +492 -121
- package/src/client/components/cyberia/InstanceEngineCyberia.js +129 -160
- package/src/client/components/cyberia/InstanceSelectionView.js +7 -1
- package/src/client/components/cyberia/MapEngineCyberia.js +175 -69
- package/src/client/components/cyberia/ObjectLayerEngine.js +1011 -97
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +81 -155
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +113 -98
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +215 -56
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -35
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +1 -1
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +712 -76
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +0 -4
- 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 +15 -15
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +313 -30
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +51 -29
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +52 -53
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +16 -11
- package/src/client/public/cyberia-docs/CYBERIA.md +48 -28
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +11 -5
- 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/STATS-PROGRESSION.md +217 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +20 -12
- 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-audio/cyberia-audio.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +38 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +5 -4
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +0 -40
- package/src/client/services/cyberia-map/cyberia-map.management.js +5 -4
- package/src/client/services/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +138 -0
- package/src/client/services/object-layer/object-layer.management.js +6 -10
- package/src/client/services/object-layer/object-layer.service.js +3 -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 +92 -77
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +105 -74
- package/src/client-builder/client-bundle.js +347 -0
- 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/MongoExpress.js +187 -0
- 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 +6 -8
- 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 +144 -147
- package/src/projects/cyberia/atlas-sprite-sheet-store.js +391 -0
- package/src/projects/cyberia/besu-genesis-generator.js +8 -17
- package/src/projects/cyberia/boot-contract-fixtures.js +32 -0
- package/src/projects/cyberia/catalog-cyberia.js +54 -10
- package/src/projects/cyberia/gemini-client.js +4 -4
- package/src/projects/cyberia/generate-saga.js +5 -12
- package/src/projects/cyberia/hot-reload-trigger.js +18 -29
- package/src/projects/cyberia/instance-backup.js +210 -0
- package/src/projects/cyberia/instance-data.js +178 -258
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +33 -69
- package/src/projects/cyberia/object-layer.js +153 -320
- package/src/projects/cyberia/seed-audio.js +139 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +2 -8
- package/src/projects/cyberia/semantic-layer-generator.js +3 -19
- package/src/projects/cyberia/stat-balance.js +81 -0
- package/src/projects/cyberia/stat-commands.js +23 -0
- package/src/projects/cyberia/stat-contract-generator.js +101 -0
- package/src/projects/underpost/catalog-underpost.js +9 -1
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +17 -8
- package/src/runtime/cyberia-client/Dockerfile.dev +13 -4
- package/src/runtime/cyberia-server/Dockerfile +18 -6
- package/src/runtime/cyberia-server/Dockerfile.dev +16 -3
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +5 -5
- package/src/runtime/engine-cyberia/compose.env +17 -5
- package/src/runtime/engine-cyberia/docker-compose.yml +23 -17
- 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 +188 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +508 -0
- package/src/server/build/testing.js +578 -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} +11 -5
- 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} +143 -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} +516 -423
- 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} +17 -1
- package/src/server/storage/downloader.js +121 -0
- package/src/server/storage/repository.js +68 -0
- package/src/server/storage/zip.js +153 -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/atlas-sprite-sheet-store.test.js +402 -0
- package/test/integration/app/cyberia/atlas-sprite-sheet.test.js +86 -0
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +64 -0
- package/test/integration/app/cyberia/cyberia-entity-type-default.test.js +842 -0
- package/test/integration/app/cyberia/cyberia-instance-conf-coerce.test.js +53 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +17 -23
- package/test/integration/app/cyberia/cyberia-instance-items.test.js +90 -0
- package/test/integration/app/cyberia/cyberia-load.test.js +466 -0
- package/test/integration/app/cyberia/cyberia-map-audio-conf.test.js +256 -0
- package/test/integration/app/cyberia/cyberia-stats.test.js +150 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +338 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/integration/app/cyberia/object-layer-item-selection.test.js +56 -0
- package/test/integration/app/cyberia/object-layer-natural-key.test.js +32 -0
- package/test/integration/app/cyberia/seed-audio.test.js +275 -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 +1187 -0
- package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +649 -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/3-cluster/mongo-express-deploy.test.js +156 -0
- package/test/integration/infra/4-ingress/api-cross-origin.test.js +79 -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 +361 -0
- package/test/unit/client-bundle.test.js +313 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +996 -0
- package/test/unit/coverage-artifact.test.js +221 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/cyberia/instance-backup.test.js +183 -0
- package/test/unit/cyberia/instance-object-layer-items.test.js +46 -0
- package/test/unit/cyberia/publish-workflow.test.js +22 -0
- package/test/unit/cyberia/stat-balance.test.js +69 -0
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +518 -0
- package/test/unit/downloader-integrity.test.js +98 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/file-reference-registry.test.js +141 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/fs-storage-paths.test.js +596 -0
- package/test/unit/logger-redaction.test.js +141 -0
- package/test/unit/package.test.js +457 -0
- package/test/unit/prepare-host.test.js +382 -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 +220 -0
- package/test/unit/zip-archive.test.js +142 -0
- package/vitest.config.js +66 -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/cyberia-instance/cyberia-fallback-default-items.js +0 -63
- 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/components/cyberia/FallbackWorldEngineCyberia.js +0 -368
- 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/downloader.js +0 -73
- package/src/server/environment.js +0 -98
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deploy route registry, and the routers built from it.
|
|
3
|
+
*
|
|
4
|
+
* Two levels of "route" meet here, which is why they share a module:
|
|
5
|
+
*
|
|
6
|
+
* - `engine-private/deploy/dd.routes` lists the deploy ids this engine serves.
|
|
7
|
+
* It is the cluster's route table at the deploy level, and every command that
|
|
8
|
+
* accepts the `dd` meta id expands it through this file.
|
|
9
|
+
* - The proxy routers map `<host><path>` to the local port a runtime bound, and
|
|
10
|
+
* are derived from each deploy's `conf.server.json`.
|
|
11
|
+
*
|
|
12
|
+
* Keeping both here means the file path is written once and the port arithmetic
|
|
13
|
+
* lives beside the list it is computed for.
|
|
14
|
+
*
|
|
15
|
+
* @module src/server/network/router.js
|
|
16
|
+
* @namespace ServerRouter
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import fs from 'fs-extra';
|
|
20
|
+
import { newInstance, orderArrayFromAttrInt, range } from '../../client/components/core/CommonJs.js';
|
|
21
|
+
import { loggerFactory } from '../ops/logger.js';
|
|
22
|
+
import { Config, DEFAULT_DEPLOY_ID, isDevProxyContext, isTlsDevProxy, loadConfServerJson } from '../runtime/conf.js';
|
|
23
|
+
|
|
24
|
+
const logger = loggerFactory(import.meta);
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @constant DEPLOY_ROUTES_PATH
|
|
28
|
+
* @description The deploy route table: a comma separated list of the deploy ids
|
|
29
|
+
* this engine serves.
|
|
30
|
+
* @memberof ServerRouter
|
|
31
|
+
*/
|
|
32
|
+
const DEPLOY_ROUTES_PATH = './engine-private/deploy/dd.routes';
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @method deployRoutesExists
|
|
36
|
+
* @description Whether the route table is present.
|
|
37
|
+
* @returns {boolean} True when the engine has a route table.
|
|
38
|
+
* @memberof ServerRouter
|
|
39
|
+
*/
|
|
40
|
+
const deployRoutesExists = () => fs.existsSync(DEPLOY_ROUTES_PATH);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @method readDeployRoutes
|
|
44
|
+
* @description The deploy ids in the route table, trimmed and without empties.
|
|
45
|
+
* @returns {string[]} Deploy ids, empty when no table exists.
|
|
46
|
+
* @memberof ServerRouter
|
|
47
|
+
*/
|
|
48
|
+
const readDeployRoutes = () =>
|
|
49
|
+
deployRoutesExists() ? parseDeployRoutes(fs.readFileSync(DEPLOY_ROUTES_PATH, 'utf8')) : [];
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* @method parseDeployRoutes
|
|
53
|
+
* @description Parses route table contents. Kept separate from the read so the
|
|
54
|
+
* parsing is testable without a checkout.
|
|
55
|
+
* @param {string} [contents] - Raw route table contents.
|
|
56
|
+
* @returns {string[]} Deploy ids, trimmed, empties dropped.
|
|
57
|
+
* @memberof ServerRouter
|
|
58
|
+
*/
|
|
59
|
+
const parseDeployRoutes = (contents = '') =>
|
|
60
|
+
`${contents || ''}`
|
|
61
|
+
.split(',')
|
|
62
|
+
.map((id) => id.trim())
|
|
63
|
+
.filter(Boolean);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @method registerDeployRoute
|
|
67
|
+
* @description Appends a deploy id to the route table, creating it when absent.
|
|
68
|
+
*
|
|
69
|
+
* Idempotent: a deploy already routed is left alone rather than listed twice,
|
|
70
|
+
* which would make every `dd` fan-out build and deploy it twice.
|
|
71
|
+
* @param {string} deployId - Deploy id to route.
|
|
72
|
+
* @returns {string[]} The resulting route table.
|
|
73
|
+
* @memberof ServerRouter
|
|
74
|
+
*/
|
|
75
|
+
const registerDeployRoute = (deployId) => {
|
|
76
|
+
const id = `${deployId || ''}`.trim();
|
|
77
|
+
if (!id) return readDeployRoutes();
|
|
78
|
+
const routes = readDeployRoutes();
|
|
79
|
+
if (routes.includes(id)) return routes;
|
|
80
|
+
routes.push(id);
|
|
81
|
+
fs.outputFileSync(DEPLOY_ROUTES_PATH, routes.join(','), 'utf8');
|
|
82
|
+
return routes;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @method resolveDeployList
|
|
87
|
+
* @description Resolves the concrete deploy ids a run should iterate over.
|
|
88
|
+
*
|
|
89
|
+
* The meta deploy id `dd` fans out to the route table; when no table exists
|
|
90
|
+
* (e.g. the private repository is not checked out) it falls back to
|
|
91
|
+
* {@link ServerConfBuilder.DEFAULT_DEPLOY_ID}. Any other value is parsed as a
|
|
92
|
+
* comma separated list.
|
|
93
|
+
* @param {string} deployId - A deploy id, a comma separated list, or the `dd` meta id.
|
|
94
|
+
* @returns {string[]} Ordered list of concrete deploy ids.
|
|
95
|
+
* @memberof ServerRouter
|
|
96
|
+
*/
|
|
97
|
+
const resolveDeployList = (deployId) => {
|
|
98
|
+
if (deployId !== 'dd') return parseDeployRoutes(deployId);
|
|
99
|
+
const routes = readDeployRoutes();
|
|
100
|
+
return routes.length > 0 ? routes : parseDeployRoutes(DEFAULT_DEPLOY_ID);
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @method buildProxyRouter
|
|
105
|
+
* @description Builds the proxy router.
|
|
106
|
+
* @memberof ServerRouter
|
|
107
|
+
*/
|
|
108
|
+
const buildProxyRouter = () => {
|
|
109
|
+
const confServer = newInstance(Config.default.server);
|
|
110
|
+
let currentPort = parseInt(process.env.PORT) + 1;
|
|
111
|
+
const proxyRouter = {};
|
|
112
|
+
for (const host of Object.keys(confServer)) {
|
|
113
|
+
for (const path of Object.keys(confServer[host])) {
|
|
114
|
+
if (confServer[host][path].singleReplica) continue;
|
|
115
|
+
|
|
116
|
+
if (isDevProxyContext()) confServer[host][path].proxy = [isTlsDevProxy() ? 443 : 80];
|
|
117
|
+
|
|
118
|
+
confServer[host][path].port = newInstance(currentPort);
|
|
119
|
+
for (const port of confServer[host][path].proxy) {
|
|
120
|
+
if (!(port in proxyRouter)) proxyRouter[port] = {};
|
|
121
|
+
proxyRouter[port][`${host}${path}`] = {
|
|
122
|
+
// target: `http://${host}:${confServer[host][path].port}${path}`,
|
|
123
|
+
target: `http://localhost:${confServer[host][path].port}`,
|
|
124
|
+
// target: `http://127.0.0.1:${confServer[host][path].port}`,
|
|
125
|
+
proxy: confServer[host][path].proxy,
|
|
126
|
+
redirect: confServer[host][path].redirect,
|
|
127
|
+
host,
|
|
128
|
+
path,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
currentPort++;
|
|
132
|
+
if (confServer[host][path].peer) {
|
|
133
|
+
const peerPath = path === '/' ? `/peer` : `${path}/peer`;
|
|
134
|
+
confServer[host][peerPath] = newInstance(confServer[host][path]);
|
|
135
|
+
confServer[host][peerPath].port = newInstance(currentPort);
|
|
136
|
+
for (const port of confServer[host][path].proxy) {
|
|
137
|
+
if (!(port in proxyRouter)) proxyRouter[port] = {};
|
|
138
|
+
proxyRouter[port][`${host}${peerPath}`] = {
|
|
139
|
+
// target: `http://${host}:${confServer[host][peerPath].port}${peerPath}`,
|
|
140
|
+
target: `http://localhost:${confServer[host][peerPath].port}`,
|
|
141
|
+
// target: `http://127.0.0.1:${confServer[host][peerPath].port}`,
|
|
142
|
+
proxy: confServer[host][peerPath].proxy,
|
|
143
|
+
host,
|
|
144
|
+
path: peerPath,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
currentPort++;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return proxyRouter;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* @method pathPortAssignmentFactory
|
|
157
|
+
* @description Creates the path port assignment.
|
|
158
|
+
* @param {string} deployId - The deploy ID.
|
|
159
|
+
* @param {object} router - The router.
|
|
160
|
+
* @param {object} confServer - The server configuration.
|
|
161
|
+
* @memberof ServerRouter
|
|
162
|
+
*/
|
|
163
|
+
const pathPortAssignmentFactory = async (deployId, router, confServer) => {
|
|
164
|
+
const pathPortAssignmentData = {};
|
|
165
|
+
for (const host of Object.keys(confServer)) {
|
|
166
|
+
const pathPortAssignment = [];
|
|
167
|
+
for (const path of Object.keys(confServer[host])) {
|
|
168
|
+
const { peer } = confServer[host][path];
|
|
169
|
+
if (!router[`${host}${path === '/' ? '' : path}`]) continue;
|
|
170
|
+
const port = parseInt(router[`${host}${path === '/' ? '' : path}`].split(':')[2]);
|
|
171
|
+
// logger.info('', { host, port, path });
|
|
172
|
+
pathPortAssignment.push({
|
|
173
|
+
port,
|
|
174
|
+
path,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
if (peer) {
|
|
178
|
+
// logger.info('', { host, port: port + 1, path: '/peer' });
|
|
179
|
+
pathPortAssignment.push({
|
|
180
|
+
port: port + 1,
|
|
181
|
+
path: `${path === '/' ? '' : path}/peer`,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
pathPortAssignmentData[host] = pathPortAssignment;
|
|
186
|
+
}
|
|
187
|
+
if (fs.existsSync(`./engine-private/replica`)) {
|
|
188
|
+
const singleReplicas = await fs.readdir(`./engine-private/replica`);
|
|
189
|
+
for (let replica of singleReplicas) {
|
|
190
|
+
if (replica.startsWith(deployId)) {
|
|
191
|
+
const replicaServerConf = loadConfServerJson(`./engine-private/replica/${replica}/conf.server.json`);
|
|
192
|
+
for (const host of Object.keys(replicaServerConf)) {
|
|
193
|
+
const pathPortAssignment = [];
|
|
194
|
+
for (const path of Object.keys(replicaServerConf[host])) {
|
|
195
|
+
const { peer } = replicaServerConf[host][path];
|
|
196
|
+
if (!router[`${host}${path === '/' ? '' : path}`]) continue;
|
|
197
|
+
const port = parseInt(router[`${host}${path === '/' ? '' : path}`].split(':')[2]);
|
|
198
|
+
// logger.info('', { host, port, path });
|
|
199
|
+
pathPortAssignment.push({
|
|
200
|
+
port,
|
|
201
|
+
path,
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
if (peer) {
|
|
205
|
+
// logger.info('', { host, port: port + 1, path: '/peer' });
|
|
206
|
+
pathPortAssignment.push({
|
|
207
|
+
port: port + 1,
|
|
208
|
+
path: `${path === '/' ? '' : path}/peer`,
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
pathPortAssignmentData[host] = pathPortAssignmentData[host].concat(pathPortAssignment);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return pathPortAssignmentData;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* @method deployRangePortFactory
|
|
222
|
+
* @description Creates the deploy range port factory.
|
|
223
|
+
* @param {object} router - The router.
|
|
224
|
+
* @returns {object} - The deploy range port factory.
|
|
225
|
+
* @memberof ServerRouter
|
|
226
|
+
*/
|
|
227
|
+
const deployRangePortFactory = (router) => {
|
|
228
|
+
const ports = Object.values(router).map((p) => parseInt(p.split(':')[2]));
|
|
229
|
+
const fromPort = Math.min(...ports);
|
|
230
|
+
const toPort = Math.max(...ports);
|
|
231
|
+
return { ports, fromPort, toPort };
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* @method buildKindPorts
|
|
236
|
+
* @description Builds the kind ports.
|
|
237
|
+
* @param {number} from - The from port.
|
|
238
|
+
* @param {number} to - The to port.
|
|
239
|
+
* @returns {string} - The kind ports.
|
|
240
|
+
* @memberof ServerRouter
|
|
241
|
+
*/
|
|
242
|
+
const buildKindPorts = (from, to) =>
|
|
243
|
+
range(parseInt(from), parseInt(to))
|
|
244
|
+
.map(
|
|
245
|
+
(port) => ` - name: 'tcp-${port}'
|
|
246
|
+
protocol: TCP
|
|
247
|
+
port: ${port}
|
|
248
|
+
targetPort: ${port}
|
|
249
|
+
- name: 'udp-${port}'
|
|
250
|
+
protocol: UDP
|
|
251
|
+
port: ${port}
|
|
252
|
+
targetPort: ${port}
|
|
253
|
+
`,
|
|
254
|
+
)
|
|
255
|
+
.join('\n');
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* @method buildPortProxyRouter
|
|
259
|
+
* @description Builds the port proxy router.
|
|
260
|
+
* @param {object} options - The options.
|
|
261
|
+
* @param {number} [options.port=4000] - The port.
|
|
262
|
+
* @param {object} options.proxyRouter - The proxy router.
|
|
263
|
+
* @param {object} [options.hosts] - The hosts.
|
|
264
|
+
* @param {boolean} [options.orderByPathLength=false] - Whether to order by path length.
|
|
265
|
+
* @param {boolean} [options.devProxyContext=false] - Whether to use dev proxy context.
|
|
266
|
+
* @returns {object} - The port proxy router.
|
|
267
|
+
* @memberof ServerRouter
|
|
268
|
+
*/
|
|
269
|
+
const buildPortProxyRouter = (
|
|
270
|
+
options = { port: 4000, proxyRouter, hosts, orderByPathLength: false, devProxyContext: false },
|
|
271
|
+
) => {
|
|
272
|
+
let { port, proxyRouter, hosts, orderByPathLength } = options;
|
|
273
|
+
hosts = hosts || proxyRouter[port] || {};
|
|
274
|
+
|
|
275
|
+
const router = {};
|
|
276
|
+
// build router
|
|
277
|
+
Object.keys(hosts).map((hostKey) => {
|
|
278
|
+
let { host, path, target, proxy, peer } = hosts[hostKey];
|
|
279
|
+
|
|
280
|
+
if (!proxy.includes(port)) {
|
|
281
|
+
logger.warn('Proxy port not set on conf', { port, host, path, proxy, target });
|
|
282
|
+
if (process.env.NODE_ENV === 'production') {
|
|
283
|
+
logger.warn('Omitting host', { host, path, target });
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
// ${process.env.NODE_ENV === 'development' && !isDevProxyContext() ? `:${port}` : ''}
|
|
288
|
+
const absoluteHost = [80, 443].includes(port)
|
|
289
|
+
? `${host}${path === '/' ? '' : path}`
|
|
290
|
+
: `${host}:${port}${path === '/' ? '' : path}`;
|
|
291
|
+
|
|
292
|
+
if (absoluteHost in router)
|
|
293
|
+
logger.warn('Overwrite: Absolute host already exists on router', { absoluteHost, target });
|
|
294
|
+
|
|
295
|
+
if (options.devProxyContext === true) {
|
|
296
|
+
const appDevPort = parseInt(target.split(':')[2]) - process.env.DEV_PROXY_PORT_OFFSET;
|
|
297
|
+
router[absoluteHost] = `http://localhost:${appDevPort}`;
|
|
298
|
+
} else router[absoluteHost] = target;
|
|
299
|
+
}); // order router
|
|
300
|
+
|
|
301
|
+
if (Object.keys(router).length === 0) return router;
|
|
302
|
+
|
|
303
|
+
const devApiConfPath = `./engine-private/conf/${process.argv[3]}/conf.server.dev.${process.argv[4]}-dev-api.json`;
|
|
304
|
+
if (options.devProxyContext === true && process.env.NODE_ENV === 'development' && fs.existsSync(devApiConfPath)) {
|
|
305
|
+
const confDevApiServer = JSON.parse(fs.readFileSync(devApiConfPath, 'utf8'));
|
|
306
|
+
let devApiHosts = [];
|
|
307
|
+
let origins = [];
|
|
308
|
+
for (const _host of Object.keys(confDevApiServer))
|
|
309
|
+
for (const _path of Object.keys(confDevApiServer[_host])) {
|
|
310
|
+
if (confDevApiServer[_host][_path].origins && confDevApiServer[_host][_path].origins.length) {
|
|
311
|
+
origins.push(...confDevApiServer[_host][_path].origins);
|
|
312
|
+
if (_path !== 'peer' && devApiHosts.length === 0)
|
|
313
|
+
devApiHosts.push(
|
|
314
|
+
`${_host}${[80, 443].includes(port) && isDevProxyContext() ? '' : `:${port}`}${_path == '/' ? '' : _path}`,
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
origins = Array.from(new Set(origins));
|
|
319
|
+
console.log({
|
|
320
|
+
origins,
|
|
321
|
+
devApiHosts,
|
|
322
|
+
});
|
|
323
|
+
for (const devApiHost of devApiHosts) {
|
|
324
|
+
if (devApiHost in router) {
|
|
325
|
+
const target = router[devApiHost];
|
|
326
|
+
delete router[devApiHost];
|
|
327
|
+
router[`${devApiHost}/${process.env.BASE_API}`] = target;
|
|
328
|
+
router[`${devApiHost}/socket.io`] = target;
|
|
329
|
+
for (const origin of origins) router[devApiHost] = origin;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (orderByPathLength === true) {
|
|
335
|
+
const reOrderRouter = {};
|
|
336
|
+
for (const absoluteHostKey of orderArrayFromAttrInt(Object.keys(router), 'length'))
|
|
337
|
+
reOrderRouter[absoluteHostKey] = router[absoluteHostKey];
|
|
338
|
+
return reOrderRouter;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
return router;
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
export {
|
|
345
|
+
DEPLOY_ROUTES_PATH,
|
|
346
|
+
buildKindPorts,
|
|
347
|
+
buildPortProxyRouter,
|
|
348
|
+
buildProxyRouter,
|
|
349
|
+
deployRangePortFactory,
|
|
350
|
+
deployRoutesExists,
|
|
351
|
+
parseDeployRoutes,
|
|
352
|
+
pathPortAssignmentFactory,
|
|
353
|
+
readDeployRoutes,
|
|
354
|
+
registerDeployRoute,
|
|
355
|
+
resolveDeployList,
|
|
356
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Transport Layer Security (TLS) / SSL utilities and HTTPS server creation and management.
|
|
3
|
-
* @module src/server/tls.js
|
|
3
|
+
* @module src/server/network/tls.js
|
|
4
4
|
* @namespace UnderpostTLS
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import fs from 'fs-extra';
|
|
8
8
|
import https from 'https';
|
|
9
9
|
import path from 'path';
|
|
10
|
-
import { loggerFactory } from '
|
|
10
|
+
import { loggerFactory } from '../ops/logger.js';
|
|
11
11
|
|
|
12
12
|
const logger = loggerFactory(import.meta);
|
|
13
13
|
|
|
@@ -23,19 +23,19 @@
|
|
|
23
23
|
* `www.cyberiaonline.com` + `/` + 404 becomes
|
|
24
24
|
* `www.cyberiaonline.com/root/status-pages/404/index.html`.
|
|
25
25
|
*
|
|
26
|
-
* @module src/server/underpost-gateway.js
|
|
26
|
+
* @module src/server/network/underpost-gateway.js
|
|
27
27
|
* @namespace UnderpostGateway
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
30
|
import crypto from 'node:crypto';
|
|
31
31
|
import fs from 'fs-extra';
|
|
32
32
|
import nodePath from 'node:path';
|
|
33
|
-
import { timer } from '
|
|
34
|
-
import { instanceStatusPageEntriesFactory, loadConfServerJson, loadReplicas } from '
|
|
33
|
+
import { timer } from '../../client/components/core/CommonJs.js';
|
|
34
|
+
import { instanceStatusPageEntriesFactory, loadConfServerJson, loadReplicas } from '../runtime/conf.js';
|
|
35
35
|
import { compressionConfFactory, compressionModulesConfFactory, nginxImageFactory } from './underpost-compression.js';
|
|
36
|
-
import Underpost from '
|
|
37
|
-
import { loggerFactory } from '
|
|
38
|
-
import { shellExec } from '
|
|
36
|
+
import Underpost from '../../index.js';
|
|
37
|
+
import { loggerFactory } from '../ops/logger.js';
|
|
38
|
+
import { shellExec } from '../runtime/process.js';
|
|
39
39
|
|
|
40
40
|
const logger = loggerFactory(import.meta);
|
|
41
41
|
|
|
@@ -194,7 +194,7 @@ const defaultStatusPagePath = (status = 404) => `${UNDERPOST_GATEWAY.defaultHost
|
|
|
194
194
|
* Compression is applied here rather than further out because this is the last
|
|
195
195
|
* hop that holds a response body in the clear — and, for every host whose
|
|
196
196
|
* errors are intercepted, the hop every site path already passes through. See
|
|
197
|
-
* {@link module:src/server/underpost-compression.js}.
|
|
197
|
+
* {@link module:src/server/network/underpost-compression.js}.
|
|
198
198
|
* @param {string} [resolver] - Cluster DNS ClusterIP.
|
|
199
199
|
* @param {object} [compression] - Overrides for the compression policy.
|
|
200
200
|
* @returns {string} nginx.conf contents.
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
* holding every host's certificate and re-negotiating ALPN. Passing the bytes
|
|
21
21
|
* through keeps certificates, HTTP/2 and mTLS exactly where they already work.
|
|
22
22
|
*
|
|
23
|
-
* @module src/server/underpost-ingress.js
|
|
23
|
+
* @module src/server/network/underpost-ingress.js
|
|
24
24
|
* @namespace UnderpostIngress
|
|
25
25
|
*/
|
|
26
26
|
|
|
@@ -107,7 +107,7 @@ const underpostIngressHostMapFactory = ({ contourHosts = [], gatewayHosts = [],
|
|
|
107
107
|
* the module makes everywhere else: an L7 hop holds a body it can encode, while
|
|
108
108
|
* `:443` carries bytes this process never decrypts. Whatever leaves through the
|
|
109
109
|
* tunnel on that port was compressed where TLS terminates — see
|
|
110
|
-
* {@link module:src/server/underpost-compression.js}.
|
|
110
|
+
* {@link module:src/server/network/underpost-compression.js}.
|
|
111
111
|
* @param {Array<object>} [entries] - Host table from {@link UnderpostIngress.underpostIngressHostMapFactory}.
|
|
112
112
|
* @param {object} backends - `{contour: {http, tls}, gateway: {http, tls}}`; a missing stack is omitted.
|
|
113
113
|
* @param {string} [defaultBackend] - Backend for an unmatched hostname.
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
* that shells out to `crictl`: the cluster CLI, image management, and the
|
|
4
4
|
* database bootstraps. Lives under `src/server` so the db layer can import it
|
|
5
5
|
* without depending on the CLI god-object.
|
|
6
|
-
* @module src/server/cri.js
|
|
6
|
+
* @module src/server/ops/cri.js
|
|
7
7
|
* @namespace CriEndpoint
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { shellExec } from '
|
|
10
|
+
import { shellExec } from '../runtime/process.js';
|
|
11
11
|
|
|
12
12
|
const CRIO_SOCKET_PATH = '/var/run/crio/crio.sock';
|
|
13
13
|
|