@underpostnet/cyberia 3.2.90 → 3.3.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +1 -0
- package/.env.example +16 -0
- package/.github/workflows/coverall.cyberia.ci.yml +107 -0
- package/.github/workflows/cyberia-client.cd.yml +6 -18
- package/.github/workflows/cyberia-server.cd.yml +6 -18
- package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
- package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
- package/.github/workflows/engine-cyberia.cd.yml +6 -78
- package/.github/workflows/engine-cyberia.ci.yml +4 -5
- package/.github/workflows/ghpkg.ci.yml +42 -21
- package/.github/workflows/hardhat.ci.yml +12 -11
- package/.github/workflows/npmpkg.ci.yml +17 -15
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
- package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
- package/.github/workflows/release.cd.yml +2 -9
- package/.prettierignore +1 -0
- package/AGENTS.md +47 -0
- package/CHANGELOG.md +581 -2417
- package/CLI-HELP.md +416 -127
- package/Dockerfile +25 -9
- package/Dockerfile.dev +25 -9
- package/Dockerfile.test +4 -4
- package/README.md +21 -1
- package/bin/build.js +70 -43
- package/bin/build.template.js +8 -3
- package/bin/cyberia.js +372 -135
- package/bin/deploy.js +18 -104
- package/bin/index.js +372 -135
- package/compose.env +16 -0
- package/conf.js +93 -4
- package/deploy/cyberia-client/deploy.sh +47 -0
- package/deploy/cyberia-client/package.sh +18 -0
- package/deploy/cyberia-client/state.sh +14 -0
- package/deploy/cyberia-server/deploy.sh +47 -0
- package/deploy/cyberia-server/package.sh +18 -0
- package/deploy/cyberia-server/state.sh +14 -0
- package/deploy/dd-cyberia/deploy.sh +22 -0
- package/deploy/dd-cyberia/init.sh +55 -0
- package/deploy/dd-cyberia/package.sh +17 -0
- package/deploy/dd-cyberia/state.sh +14 -0
- package/deploy/dd-cyberia/sync-deploy.sh +116 -0
- package/deploy/lib/github-actions-logging.sh +594 -0
- package/deploy/lib/host.sh +185 -0
- package/deploy/lib/state.sh +62 -0
- package/deploy/pwa-microservices-template/deploy.sh +45 -0
- package/deploy/release/deploy.sh +32 -0
- package/deployment.yaml +7 -2
- package/docker-compose.yml +31 -37
- package/examples/static-page/README.md +19 -19
- package/examples/static-page/ssr-components/CustomPage.js +2 -2
- package/hardhat/hardhat.config.js +1 -6
- package/hardhat/package-lock.json +104 -43
- package/hardhat/package.json +3 -3
- package/manifests/alertmanager/deployment.yaml +81 -0
- package/manifests/blackbox-exporter/deployment.yaml +75 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +36 -7
- package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +77 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/grafana/deployment.yaml +26 -7
- package/manifests/grafana/kustomization.yaml +1 -0
- package/manifests/grafana/service.yaml +6 -1
- package/manifests/mariadb/pv.yaml +1 -0
- package/manifests/mongodb/statefulset.yaml +9 -2
- package/manifests/mysql/pv-pvc.yaml +14 -1
- package/manifests/postgresql/pv.yaml +12 -1
- package/manifests/postgresql/pvc.yaml +1 -0
- package/manifests/prometheus/deployment.yaml +18 -22
- package/package.json +83 -10
- package/scripts/audit-selinux.sh +64 -0
- package/scripts/event-monitor.sh +56 -0
- package/scripts/gpu-diag.sh +0 -0
- package/scripts/ip-info.sh +0 -0
- package/scripts/k3s-node-setup.sh +30 -14
- package/scripts/kubeadm-node-setup.sh +40 -31
- package/scripts/lxd-vm-setup.sh +0 -0
- package/scripts/maas-nat-firewalld.sh +0 -0
- package/scripts/maas-setup.sh +8 -8
- package/scripts/nat-iptables.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +0 -0
- package/scripts/rocky-kickstart.sh +25 -9
- package/scripts/selinux-normalize.sh +907 -0
- package/scripts/shutdown-machine.sh +843 -0
- package/scripts/test-monitor.sh +3 -3
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
- package/src/api/core/core.controller.js +1 -1
- package/src/api/core/core.router.js +2 -2
- package/src/api/core/core.service.js +2 -2
- package/src/api/crypto/crypto.controller.js +1 -1
- package/src/api/crypto/crypto.service.js +1 -1
- package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +1 -1
- package/src/api/cyberia-action/cyberia-action.service.js +2 -2
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
- package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
- package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
- package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
- package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +16 -1
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
- package/src/api/cyberia-instance/cyberia-instance.controller.js +4 -1
- package/src/api/cyberia-instance/cyberia-instance.router.js +15 -2
- package/src/api/cyberia-instance/cyberia-instance.service.js +45 -2
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
- package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
- package/src/api/cyberia-map/cyberia-map.router.js +1 -1
- package/src/api/cyberia-map/cyberia-map.service.js +2 -2
- package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
- package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
- package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -29
- package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
- package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
- package/src/api/default/default.controller.js +1 -1
- package/src/api/default/default.router.js +1 -1
- package/src/api/default/default.service.js +2 -2
- package/src/api/document/document.controller.js +1 -1
- package/src/api/document/document.router.js +1 -1
- package/src/api/document/document.service.js +2 -2
- package/src/api/file/file.controller.js +1 -1
- package/src/api/file/file.router.js +1 -1
- package/src/api/file/file.service.js +2 -2
- package/src/api/instance/instance.controller.js +1 -1
- package/src/api/instance/instance.router.js +1 -1
- package/src/api/instance/instance.service.js +2 -2
- package/src/api/ipfs/ipfs.controller.js +1 -1
- package/src/api/ipfs/ipfs.router.js +2 -2
- package/src/api/ipfs/ipfs.service.js +2 -2
- package/src/api/object-layer/object-layer.controller.js +1 -1
- package/src/api/object-layer/object-layer.model.js +204 -3
- package/src/api/object-layer/object-layer.router.js +2 -2
- package/src/api/object-layer/object-layer.service.js +4 -17
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
- package/src/api/test/test.controller.js +1 -1
- package/src/api/test/test.service.js +1 -1
- package/src/api/user/guest.service.js +3 -3
- package/src/api/user/user.controller.js +1 -1
- package/src/api/user/user.router.js +2 -2
- package/src/api/user/user.service.js +4 -4
- package/src/api.js +5 -9
- package/src/cli/app.js +391 -0
- package/src/cli/baremetal.js +30 -36
- package/src/cli/client.js +306 -0
- package/src/cli/cloud-init.js +3 -3
- package/src/cli/cluster.js +242 -135
- package/src/cli/db.js +126 -67
- package/src/cli/deploy.js +158 -60
- package/src/cli/docker-compose.js +5 -5
- package/src/cli/domains.js +184 -0
- package/src/cli/dotenv-store.js +143 -0
- package/src/cli/event.js +2281 -0
- package/src/cli/fs.js +3 -3
- package/src/cli/host.js +672 -0
- package/src/cli/image.js +4 -7
- package/src/cli/index.js +426 -134
- package/src/cli/ipfs.js +34 -30
- package/src/cli/kickstart.js +1 -1
- package/src/cli/kubectl.js +218 -41
- package/src/cli/lxd.js +3 -3
- package/src/cli/monitor.js +1359 -26
- package/src/cli/package.js +90 -0
- package/src/cli/release.js +73 -34
- package/src/cli/repository.js +564 -367
- package/src/cli/run.js +362 -654
- package/src/cli/secrets.js +2158 -964
- package/src/cli/ssh.js +651 -331
- package/src/cli/state.js +394 -0
- package/src/cli/static.js +2 -2
- package/src/cli/system.js +26 -13
- package/src/cli/test.js +199 -125
- package/src/cli/vultr.js +623 -0
- package/src/cli/wireguard.js +2930 -0
- package/src/client/components/core/CalendarCore.js +53 -96
- package/src/client/components/core/Docs.js +258 -211
- package/src/client/components/core/FileExplorer.js +0 -21
- package/src/client/components/core/PanelForm.js +4 -4
- package/src/client/components/core/Repository.js +56 -0
- package/src/client/components/core/Translate.js +7 -0
- package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
- package/src/client/components/core/Wallet.js +0 -11
- package/src/client/components/core/Worker.js +7 -1
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
- package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +35 -1
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppShellDefault.js +1 -1
- package/src/client/components/default/SettingsDefault.js +2 -2
- package/src/client/components/itemledger/SettingsItemledger.js +2 -2
- package/src/client/components/underpost/AppShellUnderpost.js +3 -2
- package/src/client/components/underpost/SettingsUnderpost.js +2 -2
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
- package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/browserconfig.xml +1 -1
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +5 -5
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +1 -1
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
- package/src/client/services/object-layer/object-layer.management.js +4 -4
- package/src/client/ssr/RootDocument.js +1 -1
- package/src/client/ssr/body/404.js +1 -1
- package/src/client/ssr/body/500.js +1 -1
- package/src/client/ssr/body/CacheControl.js +1 -1
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
- package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
- package/src/client/ssr/head/CryptokoynScripts.js +1 -1
- package/src/client/ssr/head/Css.js +1 -1
- package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
- package/src/client/ssr/head/DefaultScripts.js +1 -1
- package/src/client/ssr/head/ItemledgerScripts.js +1 -1
- package/src/client/ssr/head/Microdata.js +1 -1
- package/src/client/ssr/head/Production.js +1 -1
- package/src/client/ssr/head/Pwa.js +1 -1
- package/src/client/ssr/head/PwaItemledger.js +1 -1
- package/src/client/ssr/head/Seo.js +1 -1
- package/src/client/ssr/head/UnderpostScripts.js +1 -1
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
- package/src/client/ssr/views/Cyberia404.js +7 -5
- package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/views/Maintenance.js +1 -1
- package/src/client/ssr/views/NoNetworkConnection.js +1 -1
- package/src/client/ssr/views/Test.js +1 -1
- package/src/client/sw/core.sw.js +20 -14
- package/src/client-builder/client-build-docs.js +61 -46
- package/src/client-builder/client-build-live.js +2 -2
- package/src/client-builder/client-build.js +58 -44
- package/src/client-builder/client-dev-server.js +3 -3
- package/src/client-builder/client-icons.js +2 -2
- package/src/client-builder/ssr.js +3 -3
- package/src/client.build.js +3 -6
- package/src/client.dev.js +3 -6
- package/src/db/DataBaseProvider.js +186 -3
- package/src/db/mariadb/MariaDB.js +3 -2
- package/src/db/mongo/MongoBootstrap.js +273 -101
- package/src/db/mongo/MongooseDB.js +11 -8
- package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
- package/src/grpc/cyberia/grpc-server.js +1 -1
- package/src/index.js +103 -23
- package/src/mailer/EmailRender.js +2 -2
- package/src/mailer/MailerInterceptor.js +87 -0
- package/src/mailer/MailerProvider.js +50 -6
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
- package/src/projects/cyberia/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +54 -6
- package/src/projects/cyberia/gemini-client.js +1 -1
- package/src/projects/cyberia/generate-saga.js +15 -24
- package/src/projects/cyberia/hot-reload-trigger.js +1 -1
- package/src/projects/cyberia/instance-data.js +22 -3
- package/src/projects/cyberia/ipfs-client.js +4 -4
- package/src/projects/cyberia/map-preview-generator.js +1 -1
- package/src/projects/cyberia/object-layer.js +12 -22
- package/src/projects/cyberia/semantic-layer-generator.js +1 -1
- package/src/projects/underpost/catalog-underpost.js +13 -2
- package/src/proxy.js +4 -7
- package/src/runtime/cyberia-client/Dockerfile +9 -4
- package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
- package/src/runtime/cyberia-server/Dockerfile +9 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
- package/src/runtime/engine-cyberia/Dockerfile +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
- package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
- package/src/runtime/engine-cyberia/compose.env +16 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
- package/src/runtime/express/Express.js +32 -27
- package/src/runtime/lampp/Lampp.js +22 -70
- package/src/runtime/nginx/Nginx.js +1 -1
- package/src/runtime/wp/Wp.js +16 -48
- package/src/server/{catalog.js → build/catalog.js} +15 -5
- package/src/server/build/coverage.js +117 -0
- package/src/server/build/execution.js +402 -0
- package/src/server/build/package.js +465 -0
- package/src/server/build/testing.js +528 -0
- package/src/server/{dns.js → network/dns.js} +241 -14
- package/src/server/network/forward-proxy.js +541 -0
- package/src/server/{middlewares.js → network/middlewares.js} +59 -4
- package/src/server/network/node-capability.js +98 -0
- package/src/server/{peer.js → network/peer.js} +3 -3
- package/src/server/{proxy.js → network/proxy.js} +7 -13
- package/src/server/network/router.js +356 -0
- package/src/server/{tls.js → network/tls.js} +2 -2
- package/src/server/network/underpost-compression.js +186 -0
- package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +26 -16
- package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +19 -3
- package/src/server/{cri.js → ops/cri.js} +2 -2
- package/src/server/ops/cron.js +949 -0
- package/src/server/ops/event-notification.js +284 -0
- package/src/server/{logger.js → ops/logger.js} +108 -23
- package/src/server/ops/monitoring.js +1724 -0
- package/src/server/ops/systemd.js +259 -0
- package/src/server/{conf.js → runtime/conf.js} +521 -520
- package/src/server/runtime/config-scope.js +215 -0
- package/src/server/runtime/environment.js +149 -0
- package/src/server/{process.js → runtime/process.js} +153 -13
- package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
- package/src/server/{runtime.js → runtime/runtime.js} +12 -8
- package/src/server/{start.js → runtime/start.js} +128 -39
- package/src/server/{auth.js → security/auth.js} +7 -8
- package/src/server/security/container-storage.js +382 -0
- package/src/server/{crypto.js → security/crypto.js} +1 -1
- package/src/server/security/selinux.js +185 -0
- package/src/server/{backup.js → storage/backup.js} +17 -8
- package/src/server/{data-query.js → storage/data-query.js} +1 -1
- package/src/server/{downloader.js → storage/downloader.js} +2 -2
- package/src/server/storage/repository.js +68 -0
- package/src/server.js +4 -7
- package/src/ws/IoInterface.js +1 -1
- package/src/ws/IoServer.js +1 -1
- package/src/ws/core/core.ws.connection.js +1 -1
- package/src/ws/core/core.ws.emit.js +1 -1
- package/src/ws/core/core.ws.server.js +1 -1
- package/src/ws/default/default.ws.connection.js +1 -1
- package/src/ws/default/default.ws.emit.js +1 -1
- package/src/ws/default/default.ws.server.js +1 -1
- package/test/e2e/event-e2e-public-ingress-down.js +45 -0
- package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
- package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
- package/test/{api.test.js → integration/app/api.test.js} +33 -14
- package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
- package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +2 -1
- package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
- package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
- package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
- package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
- package/test/integration/infra/1-security/config-scope.test.js +305 -0
- package/test/integration/infra/1-security/container-storage.test.js +356 -0
- package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
- package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
- package/test/integration/infra/1-security/selinux.test.js +69 -0
- package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
- package/test/integration/infra/1-security/systemd-service.test.js +70 -0
- package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
- package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
- package/test/integration/infra/2-network/node-capability.test.js +182 -0
- package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
- package/test/integration/infra/2-network/wireguard-edge.test.js +1731 -0
- package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
- package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
- package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
- package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
- package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
- package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
- package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +47 -6
- package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +56 -4
- package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
- package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
- package/test/integration/infra/5-observability/event-notification.test.js +197 -0
- package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
- package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
- package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
- package/test/support/shell-harness.js +73 -0
- package/test/unit/build-template.test.js +97 -0
- package/test/unit/build-workflow-offline.test.js +132 -0
- package/test/unit/catalog.test.js +71 -0
- package/test/unit/client-build-docs.test.js +334 -0
- package/test/unit/conf-loading.test.js +303 -0
- package/test/unit/conf-resolution.test.js +979 -0
- package/test/unit/coverage-artifact.test.js +130 -0
- package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
- package/test/unit/deploy-env-resolution.test.js +38 -0
- package/test/unit/deploy-log-table.test.js +447 -0
- package/test/unit/execution-profiles.test.js +219 -0
- package/test/unit/fleet-sync-source.test.js +149 -0
- package/test/unit/logger-redaction.test.js +112 -0
- package/test/unit/package.test.js +403 -0
- package/test/unit/prepare-host.test.js +299 -0
- package/test/unit/process-environment.test.js +18 -0
- package/test/unit/propagation-message.test.js +78 -0
- package/test/unit/redeploy-plan.test.js +24 -0
- package/test/unit/release-bump.test.js +474 -0
- package/test/unit/ssh-output-redaction.test.js +28 -0
- package/test/unit/start-options.test.js +46 -0
- package/test/unit/test-tiers.test.js +193 -0
- package/vitest.config.js +58 -0
- package/.nycrc +0 -9
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
- package/manifests/mongodb/pv-pvc.yaml +0 -59
- package/scripts/link-local-underpost-cli.sh +0 -6
- package/src/api/user/user.build.js +0 -16
- package/src/cli/env.js +0 -177
- package/src/client/components/core/Blockchain.js +0 -41
- package/src/client/components/core/Blog.js +0 -9
- package/src/client/components/core/KeyboardAvoidance.js +0 -145
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +0 -148
- package/src/server/cron.js +0 -476
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
* @module src/api/object-layer/object-layer.model.js
|
|
4
4
|
* @namespace CyberiaObjectLayerModel
|
|
5
5
|
*/
|
|
6
|
+
import crypto from 'crypto';
|
|
7
|
+
import stringify from 'fast-json-stable-stringify';
|
|
6
8
|
import { Schema, model } from 'mongoose';
|
|
7
9
|
/**
|
|
8
10
|
* @typedef {Object} Stats
|
|
@@ -132,8 +134,19 @@ const ObjectLayerSchema = new Schema(
|
|
|
132
134
|
toObject: { virtuals: true },
|
|
133
135
|
},
|
|
134
136
|
);
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Name of the `data.item.id` index. Kept stable across the non-unique → unique
|
|
139
|
+
* upgrade so {@link ObjectLayerModel.ensureUniqueItemIdIndex} can detect and
|
|
140
|
+
* replace the legacy definition instead of leaving two overlapping indexes.
|
|
141
|
+
* @memberof CyberiaObjectLayerModel
|
|
142
|
+
*/
|
|
143
|
+
const ITEM_ID_INDEX_NAME = 'data.item.id_1';
|
|
144
|
+
// `data.item.id` is the natural key: exactly one document per item id.
|
|
145
|
+
// autoIndex runs at model-compile time, so on a collection that still holds
|
|
146
|
+
// legacy duplicates (or a legacy non-unique index) this build fails and is
|
|
147
|
+
// logged by the model's `error` listener. ensureUniqueItemIdIndex() then
|
|
148
|
+
// dedupes and rebuilds it, after which autoIndex agrees and stays quiet.
|
|
149
|
+
ObjectLayerSchema.index({ 'data.item.id': 1 }, { name: ITEM_ID_INDEX_NAME, unique: true });
|
|
137
150
|
ObjectLayerSchema.index({ 'data.item.type': 1 });
|
|
138
151
|
// Add text index for searchable fields
|
|
139
152
|
ObjectLayerSchema.index(
|
|
@@ -158,6 +171,186 @@ ObjectLayerSchema.pre('save', function () {
|
|
|
158
171
|
}
|
|
159
172
|
// cid (object layer data JSON) and data.render.cid (atlas PNG) are optional – default to ''
|
|
160
173
|
});
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Computes the canonical SHA-256 of an object layer `data` sub-document using
|
|
177
|
+
* deterministic JSON serialisation. Single source of truth for the hash;
|
|
178
|
+
* `ObjectLayerEngine.computeSha256` delegates here.
|
|
179
|
+
*
|
|
180
|
+
* @param {Object} data - The `data` sub-document (item, stats, ledger, render).
|
|
181
|
+
* @returns {string} Hex-encoded SHA-256 hash.
|
|
182
|
+
* @memberof CyberiaObjectLayerModel
|
|
183
|
+
*/
|
|
184
|
+
const computeObjectLayerSha256 = (data) => crypto.createHash('sha256').update(stringify(data)).digest('hex');
|
|
185
|
+
|
|
186
|
+
const isMergeableObject = (value) => {
|
|
187
|
+
if (value === null || typeof value !== 'object') return false;
|
|
188
|
+
const proto = Object.getPrototypeOf(value);
|
|
189
|
+
return proto === Object.prototype || proto === null;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* An incoming attribute only wins when it actually carries a value. `null`,
|
|
194
|
+
* `undefined` and `''` mean "not provided by this writer" — importers emit them
|
|
195
|
+
* whenever a stage is skipped or degraded (IPFS unreachable, atlas not
|
|
196
|
+
* generated, saga metadata with no render yet), and they must never erase a
|
|
197
|
+
* value another writer already persisted. `false` and `0` are real values.
|
|
198
|
+
*
|
|
199
|
+
* @param {*} value - Candidate attribute value.
|
|
200
|
+
* @returns {boolean} Whether the value should override the stored one.
|
|
201
|
+
* @memberof CyberiaObjectLayerModel
|
|
202
|
+
*/
|
|
203
|
+
const hasValue = (value) => value !== null && value !== undefined && value !== '';
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Deep-merges `incoming` over `existing`, keeping the last attribute that
|
|
207
|
+
* actually carries a value. Plain objects merge key by key; every other value
|
|
208
|
+
* (scalars, arrays, ObjectIds, Dates, Buffers) is replaced atomically.
|
|
209
|
+
*
|
|
210
|
+
* @param {*} existing - Currently persisted value.
|
|
211
|
+
* @param {*} incoming - Value received from the writer.
|
|
212
|
+
* @returns {*} The merged value.
|
|
213
|
+
* @memberof CyberiaObjectLayerModel
|
|
214
|
+
*/
|
|
215
|
+
function mergeObjectLayerData(existing, incoming) {
|
|
216
|
+
if (isMergeableObject(incoming)) {
|
|
217
|
+
if (!isMergeableObject(existing)) return incoming;
|
|
218
|
+
const merged = { ...existing };
|
|
219
|
+
for (const key of Object.keys(incoming)) merged[key] = mergeObjectLayerData(existing[key], incoming[key]);
|
|
220
|
+
return merged;
|
|
221
|
+
}
|
|
222
|
+
return hasValue(incoming) ? incoming : existing;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Document fields an upsert may carry. `sha256` is excluded on purpose: it is
|
|
227
|
+
* always recomputed from the merged `data`, so it can never drift from the
|
|
228
|
+
* payload the writer hashed before merging.
|
|
229
|
+
* @memberof CyberiaObjectLayerModel
|
|
230
|
+
*/
|
|
231
|
+
const UPSERTABLE_FIELDS = ['data', 'cid', 'objectLayerRenderFramesId', 'atlasSpriteSheetId'];
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* Collapses any pre-existing duplicates of a given `data.item.id` down to a
|
|
235
|
+
* single document, keeping the oldest one so `_id` references held elsewhere
|
|
236
|
+
* (instances, inventories, atlas metadata) stay valid.
|
|
237
|
+
*
|
|
238
|
+
* @param {import('mongoose').Model} Model - The bound ObjectLayer model.
|
|
239
|
+
* @param {string} itemId - The item id to collapse.
|
|
240
|
+
* @returns {Promise<{ survivor: Object|null, removedIds: Array }>} Survivor and removed document ids.
|
|
241
|
+
* @memberof CyberiaObjectLayerModel
|
|
242
|
+
*/
|
|
243
|
+
async function collapseItemIdDuplicates(Model, itemId) {
|
|
244
|
+
const [survivor, ...duplicates] = await Model.find({ 'data.item.id': itemId }).sort({ createdAt: 1, _id: 1 });
|
|
245
|
+
if (!survivor || duplicates.length === 0) return { survivor: survivor || null, removedIds: [] };
|
|
246
|
+
|
|
247
|
+
const removedIds = duplicates.map((duplicate) => duplicate._id);
|
|
248
|
+
await Model.deleteMany({ _id: { $in: removedIds } });
|
|
249
|
+
|
|
250
|
+
// Orphaned render frames have no other cleanup path once their owner is gone.
|
|
251
|
+
const renderFramesIds = duplicates.map((duplicate) => duplicate.objectLayerRenderFramesId).filter(Boolean);
|
|
252
|
+
if (renderFramesIds.length > 0 && Model.db.models.ObjectLayerRenderFrames) {
|
|
253
|
+
await Model.db.models.ObjectLayerRenderFrames.deleteMany({ _id: { $in: renderFramesIds } });
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
return { survivor, removedIds };
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Resolves the canonical document for an item id. While a legacy collection can
|
|
261
|
+
* still hold duplicates, an unsorted `findOne` may hand back a document that the
|
|
262
|
+
* next upsert collapses away, so readers and writers must agree on the same
|
|
263
|
+
* survivor: the oldest one.
|
|
264
|
+
*
|
|
265
|
+
* @param {string} itemId - The `data.item.id` to look up.
|
|
266
|
+
* @returns {import('mongoose').Query} Query resolving to the canonical document or `null`.
|
|
267
|
+
* @memberof CyberiaObjectLayerModel
|
|
268
|
+
*/
|
|
269
|
+
ObjectLayerSchema.statics.findByItemId = function (itemId) {
|
|
270
|
+
return this.findOne({ 'data.item.id': itemId }).sort({ createdAt: 1, _id: 1 });
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Dedupes the whole collection by `data.item.id`.
|
|
275
|
+
*
|
|
276
|
+
* @returns {Promise<Array>} Ids of the removed duplicate documents.
|
|
277
|
+
* @memberof CyberiaObjectLayerModel
|
|
278
|
+
*/
|
|
279
|
+
ObjectLayerSchema.statics.dedupeByItemId = async function () {
|
|
280
|
+
const duplicated = await this.aggregate([
|
|
281
|
+
{ $group: { _id: '$data.item.id', count: { $sum: 1 } } },
|
|
282
|
+
{ $match: { count: { $gt: 1 } } },
|
|
283
|
+
]);
|
|
284
|
+
const removedIds = [];
|
|
285
|
+
for (const { _id: itemId } of duplicated) {
|
|
286
|
+
if (itemId === null || itemId === undefined) continue;
|
|
287
|
+
const { removedIds: removed } = await collapseItemIdDuplicates(this, itemId);
|
|
288
|
+
removedIds.push(...removed);
|
|
289
|
+
}
|
|
290
|
+
return removedIds;
|
|
291
|
+
};
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Idempotent migration that enforces the one-document-per-`data.item.id`
|
|
295
|
+
* invariant at the storage layer: dedupes first, then upgrades the legacy
|
|
296
|
+
* non-unique index to a unique one. Safe to rerun; a no-op once applied.
|
|
297
|
+
*
|
|
298
|
+
* @returns {Promise<{ removedIds: Array, indexUpgraded: boolean }>} Migration outcome.
|
|
299
|
+
* @memberof CyberiaObjectLayerModel
|
|
300
|
+
*/
|
|
301
|
+
ObjectLayerSchema.statics.ensureUniqueItemIdIndex = async function () {
|
|
302
|
+
const removedIds = await this.dedupeByItemId();
|
|
303
|
+
|
|
304
|
+
const indexes = await this.collection.indexes().catch(() => []);
|
|
305
|
+
const current = indexes.find((index) => index.name === ITEM_ID_INDEX_NAME);
|
|
306
|
+
if (current?.unique) return { removedIds, indexUpgraded: false };
|
|
307
|
+
|
|
308
|
+
if (current) await this.collection.dropIndex(ITEM_ID_INDEX_NAME);
|
|
309
|
+
await this.collection.createIndex({ 'data.item.id': 1 }, { name: ITEM_ID_INDEX_NAME, unique: true });
|
|
310
|
+
return { removedIds, indexUpgraded: true };
|
|
311
|
+
};
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* The single write path for object layers keyed by item id.
|
|
315
|
+
*
|
|
316
|
+
* Guarantees that exactly one document exists per `data.item.id`: pre-existing
|
|
317
|
+
* duplicates are collapsed onto the oldest document, which is then updated in
|
|
318
|
+
* place. Attributes are merged with {@link mergeObjectLayerData}, so a writer
|
|
319
|
+
* that omits a value (or sends `null` / `''` because a stage was skipped) keeps
|
|
320
|
+
* whatever a previous writer stored instead of erasing it. `sha256` is always
|
|
321
|
+
* recomputed from the merged result.
|
|
322
|
+
*
|
|
323
|
+
* @param {Object} payload - Document payload; `data.item.id` is required.
|
|
324
|
+
* @param {Object} payload.data - Object layer data (item, stats, ledger, render).
|
|
325
|
+
* @param {Object} [options] - Upsert options.
|
|
326
|
+
* @param {Object} [options.setOnInsert=null] - Partial document applied only when the item is new,
|
|
327
|
+
* for fields a writer wants to seed but never refresh (mirrors Mongo's `$setOnInsert`).
|
|
328
|
+
* @returns {Promise<Object>} The single surviving ObjectLayer document.
|
|
329
|
+
* @memberof CyberiaObjectLayerModel
|
|
330
|
+
*/
|
|
331
|
+
ObjectLayerSchema.statics.upsertByItemId = async function (payload, { setOnInsert = null } = {}) {
|
|
332
|
+
const itemId = payload?.data?.item?.id;
|
|
333
|
+
if (!itemId) throw new Error('ObjectLayer.upsertByItemId requires data.item.id');
|
|
334
|
+
|
|
335
|
+
const { survivor } = await collapseItemIdDuplicates(this, itemId);
|
|
336
|
+
|
|
337
|
+
if (!survivor) {
|
|
338
|
+
const inserted = setOnInsert ? mergeObjectLayerData(setOnInsert, payload) : payload;
|
|
339
|
+
return await this.create({ ...inserted, sha256: computeObjectLayerSha256(inserted.data) });
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
const existing = survivor.toObject({ virtuals: false, depopulate: true });
|
|
343
|
+
const update = {};
|
|
344
|
+
for (const field of UPSERTABLE_FIELDS) {
|
|
345
|
+
if (!(field in payload)) continue;
|
|
346
|
+
const merged = mergeObjectLayerData(existing[field], payload[field]);
|
|
347
|
+
if (merged !== undefined) update[field] = merged;
|
|
348
|
+
}
|
|
349
|
+
update.sha256 = computeObjectLayerSha256(update.data ?? existing.data);
|
|
350
|
+
|
|
351
|
+
return await this.findByIdAndUpdate(survivor._id, { $set: update }, { returnDocument: 'after' });
|
|
352
|
+
};
|
|
353
|
+
|
|
161
354
|
// Create and export the model
|
|
162
355
|
const ObjectLayerModel = model('ObjectLayer', ObjectLayerSchema);
|
|
163
356
|
const ProviderSchema = ObjectLayerSchema;
|
|
@@ -197,4 +390,12 @@ class ObjectLayerDto {
|
|
|
197
390
|
},
|
|
198
391
|
};
|
|
199
392
|
}
|
|
200
|
-
export {
|
|
393
|
+
export {
|
|
394
|
+
ObjectLayerSchema,
|
|
395
|
+
ObjectLayerModel,
|
|
396
|
+
ProviderSchema,
|
|
397
|
+
ObjectLayerDto,
|
|
398
|
+
computeObjectLayerSha256,
|
|
399
|
+
mergeObjectLayerData,
|
|
400
|
+
ITEM_ID_INDEX_NAME,
|
|
401
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
1
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
2
2
|
import { ObjectLayerController } from './object-layer.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
-
import { moderatorGuard, adminGuard } from '../../server/auth.js';
|
|
4
|
+
import { moderatorGuard, adminGuard } from '../../server/security/auth.js';
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
14
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
14
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
15
15
|
import { ObjectLayerRenderFramesDto } from '../object-layer-render-frames/object-layer-render-frames.model.js';
|
|
16
16
|
import { FileFactory } from '../file/file.service.js';
|
|
17
17
|
import fs from 'fs-extra';
|
|
18
18
|
import { ObjectLayerDto } from './object-layer.model.js';
|
|
19
19
|
import { ObjectLayerEngine } from '../../projects/cyberia/object-layer.js';
|
|
20
|
-
import { shellExec } from '../../server/process.js';
|
|
21
|
-
import { DataQuery } from '../../server/data-query.js';
|
|
20
|
+
import { shellExec } from '../../server/runtime/process.js';
|
|
21
|
+
import { DataQuery } from '../../server/storage/data-query.js';
|
|
22
22
|
import { AtlasSpriteSheetService } from '../atlas-sprite-sheet/atlas-sprite-sheet.service.js';
|
|
23
23
|
import { IpfsClient } from '../../projects/cyberia/ipfs-client.js';
|
|
24
24
|
import { createPinRecord, removePinRecordsAndUnpin } from '../ipfs/ipfs.service.js';
|
|
@@ -215,9 +215,6 @@ class ObjectLayerService {
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
-
// Compute final SHA-256 with all CIDs
|
|
219
|
-
bodyData.sha256 = ObjectLayerEngine.computeSha256(bodyData.data);
|
|
220
|
-
|
|
221
218
|
// Pin data JSON to IPFS
|
|
222
219
|
try {
|
|
223
220
|
const itemId = bodyData.data.item.id;
|
|
@@ -232,17 +229,7 @@ class ObjectLayerService {
|
|
|
232
229
|
}
|
|
233
230
|
|
|
234
231
|
// Atomic create/replace – ObjectLayer is fully populated with all CIDs
|
|
235
|
-
|
|
236
|
-
const existingByItemId = await ObjectLayer.findOne({ 'data.item.id': bodyData.data.item.id });
|
|
237
|
-
if (existingByItemId) {
|
|
238
|
-
newObjectLayer = await ObjectLayer.findByIdAndUpdate(existingByItemId._id, bodyData, {
|
|
239
|
-
returnDocument: 'after',
|
|
240
|
-
}).populate('objectLayerRenderFramesId');
|
|
241
|
-
} else {
|
|
242
|
-
newObjectLayer = await (await new ObjectLayer(bodyData).save()).populate('objectLayerRenderFramesId');
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
return newObjectLayer;
|
|
232
|
+
return await (await ObjectLayer.upsertByItemId(bodyData)).populate('objectLayerRenderFramesId');
|
|
246
233
|
};
|
|
247
234
|
|
|
248
235
|
/**
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildCrudController } from '../../server/middlewares.js';
|
|
1
|
+
import { buildCrudController } from '../../server/network/middlewares.js';
|
|
2
2
|
import { ObjectLayerRenderFramesService } from './object-layer-render-frames.service.js';
|
|
3
3
|
|
|
4
4
|
const ObjectLayerRenderFramesController = buildCrudController(ObjectLayerRenderFramesService);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import { registerCrudRoutes } from '../../server/middlewares.js';
|
|
2
|
+
import { registerCrudRoutes } from '../../server/network/middlewares.js';
|
|
3
3
|
import { ObjectLayerRenderFramesController } from './object-layer-render-frames.controller.js';
|
|
4
4
|
|
|
5
5
|
class ObjectLayerRenderFramesRouter {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
3
|
-
import { DataQuery } from '../../server/data-query.js';
|
|
2
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
3
|
+
import { DataQuery } from '../../server/storage/data-query.js';
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { controllerHandler, sendSuccess, serviceHandler } from '../../server/middlewares.js';
|
|
1
|
+
import { controllerHandler, sendSuccess, serviceHandler } from '../../server/network/middlewares.js';
|
|
2
2
|
import { TestService } from './test.service.js';
|
|
3
3
|
|
|
4
4
|
class TestController {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import validator from 'validator';
|
|
2
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
3
3
|
import { TestModel } from './test.model.js';
|
|
4
4
|
import { getYouTubeID, validatePassword } from '../../client/components/core/CommonJs.js';
|
|
5
5
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import mongoose from 'mongoose';
|
|
2
2
|
import { UserDto } from './user.model.js';
|
|
3
|
-
import { ValkeyAPI } from '../../
|
|
4
|
-
import { hashPassword, getBearerToken, jwtSign } from '../../server/auth.js';
|
|
3
|
+
import { ValkeyAPI } from '../../db/valkey/Valkey.js';
|
|
4
|
+
import { hashPassword, getBearerToken, jwtSign } from '../../server/security/auth.js';
|
|
5
5
|
|
|
6
6
|
// ─── TTL ──────────────────────────────────────────────────────────────────────
|
|
7
7
|
|
|
@@ -15,7 +15,7 @@ const _guestTtlMs = () => {
|
|
|
15
15
|
/**
|
|
16
16
|
* Constructs a new ephemeral guest user object.
|
|
17
17
|
* This is domain logic specific to the guest lifecycle; it does not belong
|
|
18
|
-
* in the
|
|
18
|
+
* in the Valkey database adapter.
|
|
19
19
|
*
|
|
20
20
|
* @param {{ host?: string }} options
|
|
21
21
|
* @returns {object}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { hashPassword } from '../../server/auth.js';
|
|
1
|
+
import { hashPassword } from '../../server/security/auth.js';
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
3
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
4
4
|
import { UserController } from './user.controller.js';
|
|
5
5
|
import express from 'express';
|
|
6
6
|
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* @namespace UserService
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { loggerFactory } from '../../server/logger.js';
|
|
11
|
-
import { DataQuery } from '../../server/data-query.js';
|
|
10
|
+
import { loggerFactory } from '../../server/ops/logger.js';
|
|
11
|
+
import { DataQuery } from '../../server/storage/data-query.js';
|
|
12
12
|
import {
|
|
13
13
|
hashPassword,
|
|
14
14
|
verifyPassword,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
logoutSession,
|
|
20
20
|
jwtSign,
|
|
21
21
|
validatePasswordMiddleware,
|
|
22
|
-
} from '../../server/auth.js';
|
|
22
|
+
} from '../../server/security/auth.js';
|
|
23
23
|
import { MailerProvider } from '../../mailer/MailerProvider.js';
|
|
24
24
|
import { CoreWsEmitter } from '../../ws/core/core.ws.emit.js';
|
|
25
25
|
import { CoreWsMailerChannel } from '../../ws/core/channels/core.ws.mailer.js';
|
|
@@ -29,7 +29,7 @@ import { FileFactory, FileCleanup } from '../file/file.service.js';
|
|
|
29
29
|
import { UserDto } from './user.model.js';
|
|
30
30
|
import { timer } from '../../client/components/core/CommonJs.js';
|
|
31
31
|
import { GuestService } from './guest.service.js';
|
|
32
|
-
import { resolveHostKeyContext } from '../../server/conf.js';
|
|
32
|
+
import { resolveHostKeyContext } from '../../server/runtime/conf.js';
|
|
33
33
|
|
|
34
34
|
const logger = loggerFactory(import.meta);
|
|
35
35
|
|
package/src/api.js
CHANGED
|
@@ -1,18 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
// https://nodejs.org/api
|
|
4
|
-
// https://expressjs.com/en/4x/api.html
|
|
5
|
-
|
|
6
3
|
import dotenv from 'dotenv';
|
|
7
|
-
import { loggerFactory } from './server/logger.js';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { Config } from './server/conf.js';
|
|
4
|
+
import { loggerFactory } from './server/ops/logger.js';
|
|
5
|
+
import { buildRuntime } from './server/runtime/runtime.js';
|
|
6
|
+
import { ProcessController } from './server/runtime/process.js';
|
|
7
|
+
import { Config, buildApiConf } from './server/runtime/conf.js';
|
|
12
8
|
|
|
13
9
|
dotenv.config();
|
|
14
10
|
|
|
15
|
-
await Config.build();
|
|
11
|
+
await Config.build(undefined, undefined, await buildApiConf());
|
|
16
12
|
|
|
17
13
|
const logger = loggerFactory(import.meta);
|
|
18
14
|
|