@underpostnet/cyberia 3.2.80
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 +14 -0
- package/.env.example +144 -0
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +70 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +71 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +53 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +53 -0
- package/.github/workflows/engine-cyberia.cd.yml +157 -0
- package/.github/workflows/engine-cyberia.ci.yml +125 -0
- package/.github/workflows/ghpkg.ci.yml +160 -0
- package/.github/workflows/gitlab.ci.yml +20 -0
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +126 -0
- package/.github/workflows/publish.ci.yml +87 -0
- package/.github/workflows/publish.cyberia.ci.yml +79 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +65 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +46 -0
- package/.nycrc +9 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +10 -0
- package/.vscode/settings.json +26 -0
- package/CHANGELOG.md +2516 -0
- package/CLI-HELP.md +1099 -0
- package/Dockerfile +161 -0
- package/Dockerfile.dev +161 -0
- package/Dockerfile.test +165 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/baremetal/commission-workflows.json +211 -0
- package/baremetal/packer-workflows.json +24 -0
- package/bin/build.js +261 -0
- package/bin/build.template.js +33 -0
- package/bin/cyberia.js +5627 -0
- package/bin/deploy.js +1547 -0
- package/bin/index.js +5627 -0
- package/bump.config.js +27 -0
- package/compose.env +144 -0
- package/conf.js +952 -0
- package/deployment.yaml +418 -0
- package/docker-compose.yml +434 -0
- package/examples/static-page/README.md +150 -0
- package/examples/static-page/ssr-components/CustomPage.js +554 -0
- package/examples/static-page/static-config-example.json +57 -0
- package/hardhat/.env.example +31 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/.gitkeep +0 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +2871 -0
- package/hardhat/package.json +43 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +696 -0
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/ipfs/configure-ipfs.sh +13 -0
- package/jsconfig.json +9 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +48 -0
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +48 -0
- package/manifests/deployment/adminer/deployment.yaml +32 -0
- package/manifests/deployment/adminer/kustomization.yaml +7 -0
- package/manifests/deployment/adminer/service.yaml +13 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +418 -0
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +189 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +164 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +163 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
- package/manifests/deployment/fastapi/backend-service.yml +19 -0
- package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
- package/manifests/deployment/fastapi/frontend-service.yml +15 -0
- package/manifests/deployment/fastapi/initial_data.sh +8 -0
- package/manifests/deployment/kafka/deployment.yaml +67 -0
- package/manifests/deployment/mongo-express/deployment.yaml +62 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/playwright/deployment.yaml +52 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +20 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +63 -0
- package/manifests/envoy-service-nodeport.yaml +22 -0
- package/manifests/grafana/deployment.yaml +64 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/grafana/storage-class.yaml +9 -0
- package/manifests/ipfs/configmap.yaml +64 -0
- package/manifests/ipfs/headless-service.yaml +35 -0
- package/manifests/ipfs/kustomization.yaml +8 -0
- package/manifests/ipfs/statefulset.yaml +149 -0
- package/manifests/ipfs/storage-class.yaml +9 -0
- package/manifests/kind-config-dev.yaml +20 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +14 -0
- package/manifests/letsencrypt-prod.yaml +14 -0
- package/manifests/lxd/lxd-admin-profile.yaml +26 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +56 -0
- package/manifests/mariadb/storage-class.yaml +10 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +59 -0
- package/manifests/mongodb/statefulset.yaml +113 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +9 -0
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +19 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +61 -0
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/mysql/kustomization.yaml +7 -0
- package/manifests/mysql/pv-pvc.yaml +27 -0
- package/manifests/mysql/statefulset.yaml +55 -0
- package/manifests/postgresql/configmap.yaml +9 -0
- package/manifests/postgresql/kustomization.yaml +10 -0
- package/manifests/postgresql/pv.yaml +15 -0
- package/manifests/postgresql/pvc.yaml +13 -0
- package/manifests/postgresql/service.yaml +10 -0
- package/manifests/postgresql/statefulset.yaml +37 -0
- package/manifests/prometheus/deployment.yaml +82 -0
- package/manifests/pv-pvc-dd.yaml +34 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +10 -0
- package/manifests/valkey/statefulset.yaml +37 -0
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +128 -0
- package/nodemon.json +6 -0
- package/package.json +101 -0
- package/packer/images/Rocky9Amd64/Makefile +62 -0
- package/packer/images/Rocky9Amd64/QUICKSTART.md +113 -0
- package/packer/images/Rocky9Amd64/README.md +122 -0
- package/packer/images/Rocky9Amd64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Amd64/rocky9.pkr.hcl +164 -0
- package/packer/images/Rocky9Arm64/Makefile +69 -0
- package/packer/images/Rocky9Arm64/README.md +122 -0
- package/packer/images/Rocky9Arm64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Arm64/rocky9.pkr.hcl +171 -0
- package/packer/scripts/fuse-nbd +64 -0
- package/packer/scripts/fuse-tar-root +63 -0
- package/proxy.yaml +189 -0
- package/pv-pvc.yaml +164 -0
- package/scripts/device-scan.sh +65 -0
- package/scripts/disk-clean.sh +182 -0
- package/scripts/disk-devices.sh +13 -0
- package/scripts/gen-fqdns.sh +14 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/ip-info.sh +118 -0
- package/scripts/ipxe-setup.sh +200 -0
- package/scripts/k3s-node-setup.sh +124 -0
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/lxd-vm-setup.sh +208 -0
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/maas-setup.sh +135 -0
- package/scripts/maas-upload-boot-resource.sh +183 -0
- package/scripts/nat-iptables.sh +111 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/packer-init-vars-file.sh +40 -0
- package/scripts/packer-setup.sh +289 -0
- package/scripts/ports-ls.sh +33 -0
- package/scripts/quick-tftp.sh +19 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/scripts/rocky-kickstart.sh +986 -0
- package/scripts/rocky-pwa.sh +200 -0
- package/scripts/rocky-setup.sh +106 -0
- package/scripts/rpmfusion-ffmpeg-setup.sh +32 -0
- package/scripts/ssl.sh +170 -0
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +30 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +155 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +39 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +382 -0
- package/src/api/core/core.controller.js +8 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +23 -0
- package/src/api/core/core.service.js +30 -0
- package/src/api/crypto/crypto.controller.js +10 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +23 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/cyberia-action/cyberia-action.controller.js +8 -0
- package/src/api/cyberia-action/cyberia-action.model.js +79 -0
- package/src/api/cyberia-action/cyberia-action.router.js +21 -0
- package/src/api/cyberia-action/cyberia-action.service.js +58 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +27 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +100 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +70 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +8 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +20 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +57 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +6 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +25 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +17 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +6 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +337 -0
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +57 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +583 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +42 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +117 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +75 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +190 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +618 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +6 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +200 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +17 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +6 -0
- package/src/api/cyberia-map/cyberia-map.model.js +33 -0
- package/src/api/cyberia-map/cyberia-map.router.js +19 -0
- package/src/api/cyberia-map/cyberia-map.service.js +76 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +9 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +26 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +97 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +6 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +21 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-saga/cyberia-saga.controller.js +6 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +17 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +1076 -0
- package/src/api/cyberia-skill/cyberia-skill.controller.js +6 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +17 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/default/default.controller.js +6 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +21 -0
- package/src/api/default/default.service.js +42 -0
- package/src/api/document/document.controller.js +9 -0
- package/src/api/document/document.model.js +95 -0
- package/src/api/document/document.router.js +32 -0
- package/src/api/document/document.service.js +633 -0
- package/src/api/file/file.controller.js +15 -0
- package/src/api/file/file.model.js +127 -0
- package/src/api/file/file.ref.json +39 -0
- package/src/api/file/file.router.js +36 -0
- package/src/api/file/file.service.js +499 -0
- package/src/api/instance/instance.controller.js +8 -0
- package/src/api/instance/instance.model.js +34 -0
- package/src/api/instance/instance.router.js +27 -0
- package/src/api/instance/instance.service.js +75 -0
- package/src/api/ipfs/ipfs.controller.js +8 -0
- package/src/api/ipfs/ipfs.model.js +77 -0
- package/src/api/ipfs/ipfs.router.js +26 -0
- package/src/api/ipfs/ipfs.service.js +145 -0
- package/src/api/object-layer/object-layer.controller.js +18 -0
- package/src/api/object-layer/object-layer.model.js +200 -0
- package/src/api/object-layer/object-layer.router.js +729 -0
- package/src/api/object-layer/object-layer.service.js +894 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +6 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +93 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +17 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +46 -0
- package/src/api/test/test.controller.js +14 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +23 -0
- package/src/api/test/test.service.js +35 -0
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/postman_collection.json +216 -0
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +35 -0
- package/src/api/user/user.model.js +142 -0
- package/src/api/user/user.router.js +367 -0
- package/src/api/user/user.service.js +582 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +3947 -0
- package/src/cli/cloud-init.js +673 -0
- package/src/cli/cluster.js +1395 -0
- package/src/cli/db.js +1533 -0
- package/src/cli/deploy.js +1542 -0
- package/src/cli/docker-compose.js +802 -0
- package/src/cli/env.js +177 -0
- package/src/cli/fs.js +380 -0
- package/src/cli/image.js +389 -0
- package/src/cli/index.js +1059 -0
- package/src/cli/ipfs.js +182 -0
- package/src/cli/kickstart.js +271 -0
- package/src/cli/kubectl.js +214 -0
- package/src/cli/lxd.js +1232 -0
- package/src/cli/monitor.js +659 -0
- package/src/cli/release.js +595 -0
- package/src/cli/repository.js +1969 -0
- package/src/cli/run.js +3326 -0
- package/src/cli/secrets.js +151 -0
- package/src/cli/ssh.js +975 -0
- package/src/cli/static.js +653 -0
- package/src/cli/system.js +332 -0
- package/src/cli/test.js +176 -0
- package/src/client/Cryptokoyn.index.js +30 -0
- package/src/client/CyberiaPortal.index.js +31 -0
- package/src/client/Default.index.js +77 -0
- package/src/client/Itemledger.index.js +35 -0
- package/src/client/Underpost.index.js +31 -0
- package/src/client/components/core/404.js +20 -0
- package/src/client/components/core/500.js +20 -0
- package/src/client/components/core/Account.js +630 -0
- package/src/client/components/core/AgGrid.js +238 -0
- package/src/client/components/core/Alert.js +76 -0
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/Auth.js +353 -0
- package/src/client/components/core/Badge.js +26 -0
- package/src/client/components/core/Blockchain.js +41 -0
- package/src/client/components/core/Blog.js +9 -0
- package/src/client/components/core/BtnIcon.js +109 -0
- package/src/client/components/core/CalendarCore.js +437 -0
- package/src/client/components/core/Chat.js +62 -0
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/CommonJs.js +1014 -0
- package/src/client/components/core/Content.js +349 -0
- package/src/client/components/core/Css.js +1134 -0
- package/src/client/components/core/CssCore.js +881 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +478 -0
- package/src/client/components/core/DropDown.js +321 -0
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +130 -0
- package/src/client/components/core/FileExplorer.js +1406 -0
- package/src/client/components/core/FullScreen.js +201 -0
- package/src/client/components/core/Input.js +537 -0
- package/src/client/components/core/Keyboard.js +80 -0
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +152 -0
- package/src/client/components/core/LogIn.js +212 -0
- package/src/client/components/core/LogOut.js +72 -0
- package/src/client/components/core/Logger.js +22 -0
- package/src/client/components/core/Modal.js +2956 -0
- package/src/client/components/core/NotificationManager.js +80 -0
- package/src/client/components/core/Pagination.js +252 -0
- package/src/client/components/core/Panel.js +1308 -0
- package/src/client/components/core/PanelForm.js +915 -0
- package/src/client/components/core/Polyhedron.js +947 -0
- package/src/client/components/core/PublicProfile.js +895 -0
- package/src/client/components/core/Recover.js +211 -0
- package/src/client/components/core/Responsive.js +146 -0
- package/src/client/components/core/RichText.js +33 -0
- package/src/client/components/core/Router.js +523 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SearchBox.js +1007 -0
- package/src/client/components/core/SignUp.js +153 -0
- package/src/client/components/core/SocketIo.js +163 -0
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +161 -0
- package/src/client/components/core/ToggleSwitch.js +89 -0
- package/src/client/components/core/ToolTip.js +78 -0
- package/src/client/components/core/Translate.js +694 -0
- package/src/client/components/core/Validator.js +140 -0
- package/src/client/components/core/VanillaJs.js +485 -0
- package/src/client/components/core/Wallet.js +95 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +58 -0
- package/src/client/components/core/Worker.js +313 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +352 -0
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +212 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +12 -0
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +11 -0
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +6 -0
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +1088 -0
- package/src/client/components/cyberia/InstanceSelectionView.js +900 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1976 -0
- package/src/client/components/cyberia/ObjectLayerEngine.js +1540 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +2420 -0
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +1522 -0
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +528 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +772 -0
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +254 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +21 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +518 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +72 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +13 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +6 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +48 -0
- package/src/client/components/default/AppShellDefault.js +765 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/LogInDefault.js +16 -0
- package/src/client/components/default/LogOutDefault.js +12 -0
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +11 -0
- package/src/client/components/default/SocketIoDefault.js +6 -0
- package/src/client/components/default/TranslateDefault.js +7 -0
- package/src/client/components/itemledger/AppShellItemledger.js +353 -0
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +212 -0
- package/src/client/components/itemledger/LogInItemledger.js +17 -0
- package/src/client/components/itemledger/LogOutItemledger.js +12 -0
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +16 -0
- package/src/client/components/itemledger/SignUpItemledger.js +11 -0
- package/src/client/components/itemledger/SocketIoItemledger.js +6 -0
- package/src/client/components/itemledger/TranslateItemledger.js +7 -0
- package/src/client/components/underpost/AppShellUnderpost.js +691 -0
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +281 -0
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
- package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
- package/src/client/components/underpost/LabGalleryUnderpost.js +79 -0
- package/src/client/components/underpost/LogInUnderpost.js +25 -0
- package/src/client/components/underpost/LogOutUnderpost.js +17 -0
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +16 -0
- package/src/client/components/underpost/SignUpUnderpost.js +11 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +6 -0
- package/src/client/components/underpost/TranslateUnderpost.js +10 -0
- package/src/client/public/cryptokoyn/assets/banner/koyn-social.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/cryptokoyn.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-192x192.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-256x256.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-36x36.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-48x48.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-96x96.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-16x16.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-32x32.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-150x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x310.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-70x70.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/safari-pinned-tab.svg +42 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/favicon.ico +0 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +148 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +307 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +309 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +341 -0
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +84 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +294 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +242 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +309 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +228 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +740 -0
- 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-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152-precomposed.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-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76-precomposed.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/dark.jpg +0 -0
- package/src/client/public/default/assets/background/dark.svg +557 -0
- package/src/client/public/default/assets/background/white.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/default/assets/logo/base-icon.png +0 -0
- package/src/client/public/default/assets/logo/underpost.gif +0 -0
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +12 -0
- 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 +69 -0
- 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/safari-pinned-tab.svg +24 -0
- package/src/client/public/default/site.webmanifest +69 -0
- package/src/client/public/default/sitemap +148 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +9 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +148 -0
- package/src/client/public/itemledger/android-chrome-144x144.png +0 -0
- package/src/client/public/itemledger/android-chrome-192x192.png +0 -0
- package/src/client/public/itemledger/android-chrome-256x256.png +0 -0
- package/src/client/public/itemledger/android-chrome-36x36.png +0 -0
- package/src/client/public/itemledger/android-chrome-384x384.png +0 -0
- package/src/client/public/itemledger/android-chrome-48x48.png +0 -0
- package/src/client/public/itemledger/android-chrome-512x512.png +0 -0
- package/src/client/public/itemledger/android-chrome-72x72.png +0 -0
- package/src/client/public/itemledger/android-chrome-96x96.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/itemledger/assets/logo/base-icon.png +0 -0
- package/src/client/public/itemledger/browserconfig.xml +12 -0
- package/src/client/public/itemledger/favicon-16x16.png +0 -0
- package/src/client/public/itemledger/favicon-32x32.png +0 -0
- package/src/client/public/itemledger/favicon-48x48.png +0 -0
- package/src/client/public/itemledger/favicon.ico +0 -0
- package/src/client/public/itemledger/manifest.webmanifest +69 -0
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/mstile-144x144.png +0 -0
- package/src/client/public/itemledger/mstile-150x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x310.png +0 -0
- package/src/client/public/itemledger/mstile-70x70.png +0 -0
- package/src/client/public/itemledger/sitemap +148 -0
- package/src/client/public/itemledger/yandex-browser-50x50.png +0 -0
- package/src/client/public/itemledger/yandex-browser-manifest.json +9 -0
- package/src/client/public/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +137 -0
- package/src/client/services/core/core.service.js +309 -0
- package/src/client/services/crypto/crypto.service.js +68 -0
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +99 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +137 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/default/default.management.js +1015 -0
- package/src/client/services/default/default.service.js +99 -0
- package/src/client/services/document/document.service.js +134 -0
- package/src/client/services/file/file.service.js +94 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +107 -0
- package/src/client/services/ipfs/ipfs.service.js +118 -0
- package/src/client/services/object-layer/object-layer.management.js +414 -0
- package/src/client/services/object-layer/object-layer.service.js +208 -0
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +99 -0
- package/src/client/services/test/test.service.js +68 -0
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +51 -0
- package/src/client/services/user/user.service.js +106 -0
- package/src/client/ssr/RootDocument.js +237 -0
- package/src/client/ssr/body/404.js +77 -0
- package/src/client/ssr/body/500.js +76 -0
- package/src/client/ssr/body/CacheControl.js +117 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +90 -0
- package/src/client/ssr/head/CryptokoynScripts.js +4 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -0
- package/src/client/ssr/head/ItemledgerScripts.js +4 -0
- package/src/client/ssr/head/Microdata.js +11 -0
- package/src/client/ssr/head/Production.js +1 -0
- package/src/client/ssr/head/Pwa.js +146 -0
- package/src/client/ssr/head/PwaItemledger.js +197 -0
- package/src/client/ssr/head/Seo.js +15 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +20 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +16 -0
- package/src/client/ssr/views/Cyberia404.js +328 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +1070 -0
- package/src/client/ssr/views/Maintenance.js +64 -0
- package/src/client/ssr/views/NoNetworkConnection.js +68 -0
- package/src/client/ssr/views/Test.js +199 -0
- package/src/client/sw/core.sw.js +274 -0
- package/src/client-builder/client-build-docs.js +493 -0
- package/src/client-builder/client-build-live.js +100 -0
- package/src/client-builder/client-build.js +1092 -0
- package/src/client-builder/client-dev-server.js +88 -0
- package/src/client-builder/client-formatted.js +170 -0
- package/src/client-builder/client-icons.js +108 -0
- package/src/client-builder/ssr.js +124 -0
- package/src/client.build.js +17 -0
- package/src/client.dev.js +21 -0
- package/src/db/DataBaseProvider.js +213 -0
- package/src/db/mariadb/MariaDB.js +72 -0
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +199 -0
- package/src/grpc/cyberia/grpc-server.js +162 -0
- package/src/index.js +357 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +413 -0
- package/src/projects/cyberia/besu-genesis-generator.js +1630 -0
- package/src/projects/cyberia/catalog-cyberia.js +90 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2137 -0
- package/src/projects/cyberia/hot-reload-trigger.js +163 -0
- package/src/projects/cyberia/instance-data.js +719 -0
- package/src/projects/cyberia/ipfs-client.js +599 -0
- package/src/projects/cyberia/map-preview-generator.js +304 -0
- package/src/projects/cyberia/object-layer.js +978 -0
- package/src/projects/cyberia/semantic-layer-generator-floor.js +319 -0
- package/src/projects/cyberia/semantic-layer-generator-resource.js +259 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +1164 -0
- package/src/projects/cyberia/semantic-layer-generator.js +753 -0
- package/src/projects/cyberia/shape-generator.js +1060 -0
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/proxy.js +19 -0
- package/src/runtime/cyberia-client/Dockerfile +49 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +75 -0
- package/src/runtime/cyberia-server/Dockerfile +43 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +56 -0
- package/src/runtime/engine-cyberia/Dockerfile +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +144 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +434 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +128 -0
- package/src/runtime/express/Dockerfile +45 -0
- package/src/runtime/express/Express.js +285 -0
- package/src/runtime/lampp/Dockerfile +62 -0
- package/src/runtime/lampp/Lampp.js +359 -0
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +642 -0
- package/src/server/auth.js +713 -0
- package/src/server/backup.js +102 -0
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +2316 -0
- package/src/server/cron.js +476 -0
- package/src/server/crypto.js +210 -0
- package/src/server/data-query.js +461 -0
- package/src/server/dns.js +553 -0
- package/src/server/downloader.js +73 -0
- package/src/server/logger.js +229 -0
- package/src/server/middlewares.js +152 -0
- package/src/server/peer.js +75 -0
- package/src/server/process.js +299 -0
- package/src/server/proxy.js +139 -0
- package/src/server/runtime-status.js +252 -0
- package/src/server/runtime.js +183 -0
- package/src/server/start.js +272 -0
- package/src/server/tls.js +254 -0
- package/src/server/valkey.js +201 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +129 -0
- package/src/ws/IoServer.js +68 -0
- package/src/ws/core/channels/core.ws.chat.js +68 -0
- package/src/ws/core/channels/core.ws.mailer.js +116 -0
- package/src/ws/core/channels/core.ws.stream.js +90 -0
- package/src/ws/core/core.ws.connection.js +41 -0
- package/src/ws/core/core.ws.emit.js +37 -0
- package/src/ws/core/core.ws.server.js +44 -0
- package/src/ws/default/channels/default.ws.main.js +57 -0
- package/src/ws/default/default.ws.connection.js +35 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +39 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +463 -0
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +31 -0
- package/typedoc.json +31 -0
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides a comprehensive set of DNS and IP management utilities,
|
|
3
|
+
* primarily focused on dynamic DNS (DDNS) updates and network checks.
|
|
4
|
+
* @module src/server/dns.js
|
|
5
|
+
* @namespace UnderpostDns
|
|
6
|
+
*/
|
|
7
|
+
import axios from 'axios';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import validator from 'validator';
|
|
10
|
+
import { loggerFactory } from './logger.js';
|
|
11
|
+
import dns from 'node:dns';
|
|
12
|
+
import os from 'node:os';
|
|
13
|
+
import { shellExec, pbcopy } from './process.js';
|
|
14
|
+
import Underpost from '../index.js';
|
|
15
|
+
import { writeEnv, readConfJson, loadCronDeployEnv } from './conf.js';
|
|
16
|
+
import { resolveDeployId } from './cron.js';
|
|
17
|
+
|
|
18
|
+
const logger = loggerFactory(import.meta);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Main class for handling DNS and IP related operations.
|
|
22
|
+
* All utility methods are implemented as static to serve as a namespace container.
|
|
23
|
+
* @class Dns
|
|
24
|
+
* @augments Dns
|
|
25
|
+
* @memberof UnderpostDns
|
|
26
|
+
*/
|
|
27
|
+
class Dns {
|
|
28
|
+
/**
|
|
29
|
+
* Retrieves the current public IP address (IPv4 or IPv6).
|
|
30
|
+
* @async
|
|
31
|
+
* @static
|
|
32
|
+
* @memberof UnderpostDns
|
|
33
|
+
* @returns {Promise<string>} The public IP address.
|
|
34
|
+
*/
|
|
35
|
+
static async getPublicIp() {
|
|
36
|
+
return await new Promise(async (resolve) => {
|
|
37
|
+
try {
|
|
38
|
+
return axios
|
|
39
|
+
.get(process.env.HTTP_PLAIN_IP_URL ? process.env.HTTP_PLAIN_IP_URL : 'https://api.ipify.org')
|
|
40
|
+
.then((response) => resolve(response.data));
|
|
41
|
+
} catch (error) {
|
|
42
|
+
logger.error('Error fetching public IP:', { error: error.message, stack: error.stack });
|
|
43
|
+
return resolve(null);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Checks for active internet connection by performing a DNS lookup on a specified domain.
|
|
50
|
+
* @static
|
|
51
|
+
* @memberof UnderpostDns
|
|
52
|
+
* @param {string} [domain='google.com'] The domain to check the connection against.
|
|
53
|
+
* @returns {Promise<boolean>} True if connected, false otherwise.
|
|
54
|
+
*/
|
|
55
|
+
static isInternetConnection(domain = 'google.com') {
|
|
56
|
+
return new Promise((resolve) => dns.lookup(domain, {}, (err) => resolve(err ? false : true)));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Determines the default network interface name using shell command.
|
|
61
|
+
* This method is primarily intended for Linux environments.
|
|
62
|
+
* @static
|
|
63
|
+
* @memberof UnderpostDns
|
|
64
|
+
* @returns {string} The default network interface name.
|
|
65
|
+
* @memberof UnderpostDns
|
|
66
|
+
*/
|
|
67
|
+
static getDefaultNetworkInterface() {
|
|
68
|
+
return shellExec(`ip route | grep default | cut -d ' ' -f 5`, {
|
|
69
|
+
stdout: true,
|
|
70
|
+
silent: true,
|
|
71
|
+
disableLog: true,
|
|
72
|
+
}).trim();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Gets the local device's IPv4 address by determining the active network interface.
|
|
77
|
+
* This relies on shell execution (`ip route`) and is primarily intended for Linux environments.
|
|
78
|
+
* @static
|
|
79
|
+
* @memberof UnderpostDns
|
|
80
|
+
* @returns {string} The local IPv4 address.
|
|
81
|
+
*/
|
|
82
|
+
static getLocalIPv4Address() {
|
|
83
|
+
// Determine the default network interface name using shell command
|
|
84
|
+
const interfaceName = Dns.getDefaultNetworkInterface();
|
|
85
|
+
|
|
86
|
+
// Find the IPv4 address associated with the determined interface
|
|
87
|
+
const networkInfo = os.networkInterfaces()[interfaceName];
|
|
88
|
+
|
|
89
|
+
if (!networkInfo) {
|
|
90
|
+
logger.error(`Could not find network interface: ${interfaceName}`);
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const ipv4 = networkInfo.find((i) => i.family === 'IPv4');
|
|
95
|
+
|
|
96
|
+
if (!ipv4) {
|
|
97
|
+
logger.error(`Could not find IPv4 address for interface: ${interfaceName}`);
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
return ipv4.address;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Gets the MAC address of the main (default route) network interface.
|
|
106
|
+
* @static
|
|
107
|
+
* @memberof UnderpostDns
|
|
108
|
+
* @returns {string|null} The MAC address, or null if not found.
|
|
109
|
+
*/
|
|
110
|
+
static getMainInterfaceMac() {
|
|
111
|
+
const interfaceName = Dns.getDefaultNetworkInterface();
|
|
112
|
+
const networkInfo = os.networkInterfaces()[interfaceName];
|
|
113
|
+
if (!networkInfo || networkInfo.length === 0) {
|
|
114
|
+
logger.error(`Could not find network interface: ${interfaceName}`);
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
return networkInfo[0].mac;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Setup nftables tables and chains if they don't exist.
|
|
122
|
+
* @static
|
|
123
|
+
* @memberof UnderpostDns
|
|
124
|
+
*/
|
|
125
|
+
static setupNftables() {
|
|
126
|
+
shellExec(`sudo nft add table inet filter 2>/dev/null`, { silent: true });
|
|
127
|
+
shellExec(
|
|
128
|
+
`sudo nft add chain inet filter input '{ type filter hook input priority 0; policy accept; }' 2>/dev/null`,
|
|
129
|
+
{ silent: true },
|
|
130
|
+
);
|
|
131
|
+
shellExec(
|
|
132
|
+
`sudo nft add chain inet filter output '{ type filter hook output priority 0; policy accept; }' 2>/dev/null`,
|
|
133
|
+
{ silent: true },
|
|
134
|
+
);
|
|
135
|
+
shellExec(
|
|
136
|
+
`sudo nft add chain inet filter forward '{ type filter hook forward priority 0; policy accept; }' 2>/dev/null`,
|
|
137
|
+
{ silent: true },
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Bans an IP address from ingress traffic.
|
|
143
|
+
* @static
|
|
144
|
+
* @memberof UnderpostDns
|
|
145
|
+
* @param {string} ip - The IP address to ban.
|
|
146
|
+
*/
|
|
147
|
+
static banIngress(ip) {
|
|
148
|
+
Dns.setupNftables();
|
|
149
|
+
if (!validator.isIP(ip)) {
|
|
150
|
+
logger.error(`Invalid IP address: ${ip}`);
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
shellExec(`sudo nft add rule inet filter input ip saddr ${ip} counter drop`, { silent: true });
|
|
154
|
+
logger.info(`Banned ingress for IP: ${ip}`);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Bans an IP address from egress traffic.
|
|
159
|
+
* @static
|
|
160
|
+
* @memberof UnderpostDns
|
|
161
|
+
* @param {string} ip - The IP address to ban.
|
|
162
|
+
*/
|
|
163
|
+
static banEgress(ip) {
|
|
164
|
+
Dns.setupNftables();
|
|
165
|
+
if (!validator.isIP(ip)) {
|
|
166
|
+
logger.error(`Invalid IP address: ${ip}`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
shellExec(`sudo nft add rule inet filter output ip daddr ${ip} counter drop`, { silent: true });
|
|
170
|
+
shellExec(`sudo nft add rule inet filter forward ip daddr ${ip} counter drop`, { silent: true });
|
|
171
|
+
logger.info(`Banned egress for IP: ${ip}`);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Helper to get nftables rule handles for a specific IP and chain.
|
|
176
|
+
* @static
|
|
177
|
+
* @memberof UnderpostDns
|
|
178
|
+
* @param {string} chain - The chain name (input, output, forward).
|
|
179
|
+
* @param {string} ip - The IP address.
|
|
180
|
+
* @param {string} type - The type (saddr or daddr).
|
|
181
|
+
* @returns {string[]} Array of handles.
|
|
182
|
+
*/
|
|
183
|
+
static getNftHandles(chain, ip, type) {
|
|
184
|
+
const output = shellExec(`sudo nft -a list chain inet filter ${chain}`, { stdout: true, silent: true });
|
|
185
|
+
const lines = output.split('\n');
|
|
186
|
+
const handles = [];
|
|
187
|
+
// Regex to match IP and handle. Note: output format depends on nft version but usually contains "handle <id>" at end.
|
|
188
|
+
// Example: ip saddr 1.2.3.4 counter packets 0 bytes 0 drop # handle 5
|
|
189
|
+
const regex = new RegExp(`ip ${type} ${ip} .* handle (\\d+)`);
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
const match = line.match(regex);
|
|
192
|
+
if (match) {
|
|
193
|
+
handles.push(match[1]);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return handles;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Unbans an IP address from ingress traffic.
|
|
201
|
+
* @static
|
|
202
|
+
* @memberof UnderpostDns
|
|
203
|
+
* @param {string} ip - The IP address to unban.
|
|
204
|
+
*/
|
|
205
|
+
static unbanIngress(ip) {
|
|
206
|
+
const handles = Dns.getNftHandles('input', ip, 'saddr');
|
|
207
|
+
for (const handle of handles) {
|
|
208
|
+
shellExec(`sudo nft delete rule inet filter input handle ${handle}`, { silent: true });
|
|
209
|
+
}
|
|
210
|
+
logger.info(`Unbanned ingress for IP: ${ip}`);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Unbans an IP address from egress traffic.
|
|
215
|
+
* @static
|
|
216
|
+
* @memberof UnderpostDns
|
|
217
|
+
* @param {string} ip - The IP address to unban.
|
|
218
|
+
*/
|
|
219
|
+
static unbanEgress(ip) {
|
|
220
|
+
const outputHandles = Dns.getNftHandles('output', ip, 'daddr');
|
|
221
|
+
for (const handle of outputHandles) {
|
|
222
|
+
shellExec(`sudo nft delete rule inet filter output handle ${handle}`, { silent: true });
|
|
223
|
+
}
|
|
224
|
+
const forwardHandles = Dns.getNftHandles('forward', ip, 'daddr');
|
|
225
|
+
for (const handle of forwardHandles) {
|
|
226
|
+
shellExec(`sudo nft delete rule inet filter forward handle ${handle}`, { silent: true });
|
|
227
|
+
}
|
|
228
|
+
logger.info(`Unbanned egress for IP: ${ip}`);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Lists all banned ingress IPs.
|
|
233
|
+
* @static
|
|
234
|
+
* @memberof UnderpostDns
|
|
235
|
+
*/
|
|
236
|
+
static listBannedIngress() {
|
|
237
|
+
const output = shellExec(`sudo nft list chain inet filter input`, { stdout: true, silent: true });
|
|
238
|
+
console.log(output);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Lists all banned egress IPs.
|
|
243
|
+
* @static
|
|
244
|
+
* @memberof UnderpostDns
|
|
245
|
+
*/
|
|
246
|
+
static listBannedEgress() {
|
|
247
|
+
console.log('--- Output Chain ---');
|
|
248
|
+
console.log(shellExec(`sudo nft list chain inet filter output`, { stdout: true, silent: true }));
|
|
249
|
+
console.log('--- Forward Chain ---');
|
|
250
|
+
console.log(shellExec(`sudo nft list chain inet filter forward`, { stdout: true, silent: true }));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Clears all banned ingress IPs.
|
|
255
|
+
* @static
|
|
256
|
+
* @memberof UnderpostDns
|
|
257
|
+
*/
|
|
258
|
+
static clearBannedIngress() {
|
|
259
|
+
shellExec(`sudo nft flush chain inet filter input`, { silent: true });
|
|
260
|
+
logger.info('Cleared all ingress bans.');
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Clears all banned egress IPs.
|
|
265
|
+
* @static
|
|
266
|
+
* @memberof UnderpostDns
|
|
267
|
+
*/
|
|
268
|
+
static clearBannedEgress() {
|
|
269
|
+
shellExec(`sudo nft flush chain inet filter output`, { silent: true });
|
|
270
|
+
shellExec(`sudo nft flush chain inet filter forward`, { silent: true });
|
|
271
|
+
logger.info('Cleared all egress bans.');
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Performs the dynamic DNS update logic.
|
|
276
|
+
* It checks if the public IP has changed and, if so, updates the configured DNS records.
|
|
277
|
+
* @async
|
|
278
|
+
* @static
|
|
279
|
+
* @memberof UnderpostDns
|
|
280
|
+
* @param {string} deployList Comma-separated string of deployment IDs to process.
|
|
281
|
+
* @returns {Promise<void>}
|
|
282
|
+
*/
|
|
283
|
+
static async callback(deployList) {
|
|
284
|
+
// loadCronDeployEnv();
|
|
285
|
+
|
|
286
|
+
const isOnline = await Dns.isInternetConnection();
|
|
287
|
+
|
|
288
|
+
if (!isOnline) return;
|
|
289
|
+
|
|
290
|
+
let testIp;
|
|
291
|
+
|
|
292
|
+
try {
|
|
293
|
+
testIp = await Dns.getPublicIp();
|
|
294
|
+
} catch (error) {
|
|
295
|
+
logger.error(error, { testIp, stack: error.stack });
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
const currentIp = Underpost.env.get('ip');
|
|
299
|
+
|
|
300
|
+
if (validator.isIP(testIp) && currentIp !== testIp) {
|
|
301
|
+
logger.info(`New IP detected`, testIp);
|
|
302
|
+
Underpost.env.set('monitor-input', 'pause');
|
|
303
|
+
|
|
304
|
+
for (const _deployId of deployList.split(',')) {
|
|
305
|
+
const deployId = _deployId.trim();
|
|
306
|
+
|
|
307
|
+
let confCronData;
|
|
308
|
+
try {
|
|
309
|
+
confCronData = readConfJson(deployId, 'cron', { resolve: true });
|
|
310
|
+
} catch (error) {
|
|
311
|
+
logger.warn(`Cron config file not found for deployId: ${deployId}`, { message: error.message });
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
if (!confCronData.records) {
|
|
316
|
+
logger.warn(`'records' field missing in cron config for deployId: ${deployId}`);
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Iterate through DNS record types (A, AAAA, etc.)
|
|
321
|
+
for (const recordType of Object.keys(confCronData.records)) {
|
|
322
|
+
switch (recordType) {
|
|
323
|
+
case 'A':
|
|
324
|
+
// Process A records for IPv4 update
|
|
325
|
+
for (const dnsProvider of confCronData.records[recordType]) {
|
|
326
|
+
if (typeof Dns.services.updateIp[dnsProvider.dns] === 'function')
|
|
327
|
+
await Dns.services.updateIp[dnsProvider.dns]({ ...dnsProvider, ip: testIp });
|
|
328
|
+
}
|
|
329
|
+
break;
|
|
330
|
+
|
|
331
|
+
// Add other record types (e.g., AAAA) here if needed
|
|
332
|
+
default:
|
|
333
|
+
break;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Verify the IP update externally
|
|
338
|
+
try {
|
|
339
|
+
const ipUrlTest = `https://${process.env.DEFAULT_DEPLOY_HOST}`;
|
|
340
|
+
const response = await axios.get(ipUrlTest);
|
|
341
|
+
const verifyIp = response.request.socket.remoteAddress;
|
|
342
|
+
logger.info(ipUrlTest + ' verify ip', verifyIp);
|
|
343
|
+
if (verifyIp === testIp) {
|
|
344
|
+
logger.info('IP updated successfully and verified', testIp);
|
|
345
|
+
Underpost.env.set('ip', testIp);
|
|
346
|
+
Underpost.env.delete('monitor-input');
|
|
347
|
+
} else {
|
|
348
|
+
logger.error('IP not updated or verification failed', { expected: testIp, received: verifyIp });
|
|
349
|
+
}
|
|
350
|
+
} catch (error) {
|
|
351
|
+
logger.error('Error during IP update verification step', {
|
|
352
|
+
error: error.message,
|
|
353
|
+
stack: error.stack,
|
|
354
|
+
testIp,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Internal collection of external DNS service update functions.
|
|
363
|
+
* @static
|
|
364
|
+
* @memberof UnderpostDns
|
|
365
|
+
* @property {object} updateIp - Functions keyed by DNS provider name to update A/AAAA records.
|
|
366
|
+
*/
|
|
367
|
+
static services = {
|
|
368
|
+
updateIp: {
|
|
369
|
+
/**
|
|
370
|
+
* Updates the IP address for a dondominio.com DNS record.
|
|
371
|
+
* @memberof UnderpostDns
|
|
372
|
+
* @param {object} options
|
|
373
|
+
* @param {string} options.user - The dondominio DDNS username.
|
|
374
|
+
* @param {string} options.api_key - The dondominio DDNS password/API key.
|
|
375
|
+
* @param {string} options.host - The hostname to update.
|
|
376
|
+
* @param {string} options.dns - The name of the DNS provider ('dondominio').
|
|
377
|
+
* @param {string} options.ip - The new IPv4 address to set.
|
|
378
|
+
* @returns {Promise<boolean>} True on success, false on failure.
|
|
379
|
+
*/
|
|
380
|
+
dondominio: (options) => {
|
|
381
|
+
const { user, api_key, host, dns, ip } = options;
|
|
382
|
+
|
|
383
|
+
// Validate that required credentials are present before making any request
|
|
384
|
+
if (!user || !api_key) {
|
|
385
|
+
logger.error(
|
|
386
|
+
`${dns} update aborted: missing credentials. ` +
|
|
387
|
+
`Ensure DDNS_USER and DDNS_API_KEY environment variables are set ` +
|
|
388
|
+
`or provide 'user' and 'api_key' in cron records configuration.`,
|
|
389
|
+
{ host, hasUser: !!user, hasApiKey: !!api_key },
|
|
390
|
+
);
|
|
391
|
+
return Promise.resolve(false);
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (!host) {
|
|
395
|
+
logger.error(`${dns} update aborted: missing host. Set DDNS_HOST or provide 'host' in cron records.`);
|
|
396
|
+
return Promise.resolve(false);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const url = `https://dondns.dondominio.com/json/?user=${user}&password=${api_key}&host=${host}&ip=${ip}`;
|
|
400
|
+
// Log the update attempt without exposing the full URL containing credentials
|
|
401
|
+
logger.info(`${dns} update ip request`, { host, ip });
|
|
402
|
+
|
|
403
|
+
// Prevent live IP update in non-production environments
|
|
404
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
405
|
+
logger.warn('Skipping dondominio update in non-production environment.');
|
|
406
|
+
return Promise.resolve(false);
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
return new Promise((resolve) => {
|
|
410
|
+
axios
|
|
411
|
+
.get(url)
|
|
412
|
+
.then((response) => {
|
|
413
|
+
logger.info(`${dns} update ip success`, response.data);
|
|
414
|
+
return resolve(true);
|
|
415
|
+
})
|
|
416
|
+
.catch((error) => {
|
|
417
|
+
// Only log the error message — the full error object contains the request URL with credentials
|
|
418
|
+
logger.error(`${dns} update ip error`, { message: error.message, host, ip });
|
|
419
|
+
return resolve(false);
|
|
420
|
+
});
|
|
421
|
+
});
|
|
422
|
+
},
|
|
423
|
+
// Add other DNS provider update functions here
|
|
424
|
+
},
|
|
425
|
+
};
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Dispatcher for IP ban/unban/list/clear operations based on CLI options.
|
|
429
|
+
* @static
|
|
430
|
+
* @memberof UnderpostDns
|
|
431
|
+
* @param {string} [ips=''] Comma-separated string of IPs to process.
|
|
432
|
+
* @param {object} options - Options indicating which action to perform.
|
|
433
|
+
* @property {boolean} [options.banIngressAdd=false] - Ban IPs from ingress.
|
|
434
|
+
* @property {boolean} [options.banIngressRemove=false] - Unban IPs from ingress.
|
|
435
|
+
* @property {boolean} [options.banIngressList=false] - List banned ingress IPs.
|
|
436
|
+
* @property {boolean} [options.banIngressClear=false] - Clear all banned ingress IPs.
|
|
437
|
+
* @property {boolean} [options.banEgressAdd=false] - Ban IPs from egress.
|
|
438
|
+
* @property {boolean} [options.banEgressRemove=false] - Unban IPs from egress.
|
|
439
|
+
* @property {boolean} [options.banEgressList=false] - List banned egress IPs.
|
|
440
|
+
* @property {boolean} [options.banEgressClear=false] - Clear all banned egress IPs.
|
|
441
|
+
* @property {boolean} [options.banBothAdd=false] - Ban IPs from both ingress and egress.
|
|
442
|
+
* @property {boolean} [options.banBothRemove=false] - Unban IPs from both ingress and egress.
|
|
443
|
+
* @property {boolean} [options.dhcp=false] - Get local DHCP IP instead of public IP.
|
|
444
|
+
* @property {boolean} [options.copy=false] - Copy the public IP to clipboard.
|
|
445
|
+
* @return {Promise<string|void>} The public IP if no ban/unban action is taken.
|
|
446
|
+
*/
|
|
447
|
+
static async ipDispatcher(
|
|
448
|
+
ips = '',
|
|
449
|
+
options = {
|
|
450
|
+
banIngressAdd: false,
|
|
451
|
+
banIngressRemove: false,
|
|
452
|
+
banIngressList: false,
|
|
453
|
+
banIngressClear: false,
|
|
454
|
+
banEgressAdd: false,
|
|
455
|
+
banEgressRemove: false,
|
|
456
|
+
banEgressList: false,
|
|
457
|
+
banEgressClear: false,
|
|
458
|
+
banBothAdd: false,
|
|
459
|
+
banBothRemove: false,
|
|
460
|
+
copy: false,
|
|
461
|
+
dhcp: false,
|
|
462
|
+
},
|
|
463
|
+
) {
|
|
464
|
+
const ipList = ips
|
|
465
|
+
? ips
|
|
466
|
+
.split(',')
|
|
467
|
+
.map((i) => i.trim())
|
|
468
|
+
.filter(Boolean)
|
|
469
|
+
: [];
|
|
470
|
+
|
|
471
|
+
if (options.banIngressAdd) {
|
|
472
|
+
return ipList.forEach((ip) => Dns.banIngress(ip));
|
|
473
|
+
}
|
|
474
|
+
if (options.banIngressRemove) {
|
|
475
|
+
return ipList.forEach((ip) => Dns.unbanIngress(ip));
|
|
476
|
+
}
|
|
477
|
+
if (options.banIngressList) {
|
|
478
|
+
return Dns.listBannedIngress();
|
|
479
|
+
}
|
|
480
|
+
if (options.banIngressClear) {
|
|
481
|
+
return Dns.clearBannedIngress();
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
if (options.banEgressAdd) {
|
|
485
|
+
return ipList.forEach((ip) => Dns.banEgress(ip));
|
|
486
|
+
}
|
|
487
|
+
if (options.banEgressRemove) {
|
|
488
|
+
return ipList.forEach((ip) => Dns.unbanEgress(ip));
|
|
489
|
+
}
|
|
490
|
+
if (options.banEgressList) {
|
|
491
|
+
return Dns.listBannedEgress();
|
|
492
|
+
}
|
|
493
|
+
if (options.banEgressClear) {
|
|
494
|
+
return Dns.clearBannedEgress();
|
|
495
|
+
}
|
|
496
|
+
|
|
497
|
+
if (options.banBothAdd) {
|
|
498
|
+
return ipList.forEach((ip) => {
|
|
499
|
+
Dns.banIngress(ip);
|
|
500
|
+
Dns.banEgress(ip);
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
if (options.banBothRemove) {
|
|
504
|
+
return ipList.forEach((ip) => {
|
|
505
|
+
Dns.unbanIngress(ip);
|
|
506
|
+
Dns.unbanEgress(ip);
|
|
507
|
+
});
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
if (options.mac) {
|
|
511
|
+
const mac = Dns.getMainInterfaceMac();
|
|
512
|
+
console.log(mac);
|
|
513
|
+
return mac;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
let ip;
|
|
517
|
+
if (options.dhcp) ip = Dns.getLocalIPv4Address();
|
|
518
|
+
else ip = await Dns.getPublicIp();
|
|
519
|
+
if (options.copy) return pbcopy(ip);
|
|
520
|
+
console.log(ip);
|
|
521
|
+
return ip;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* @function isInternetConnection
|
|
527
|
+
* @memberof UnderpostDns
|
|
528
|
+
* @description Exported function for backward compatibility.
|
|
529
|
+
* @param {string} [domain='google.com']
|
|
530
|
+
* @returns {Promise<boolean>}
|
|
531
|
+
*/
|
|
532
|
+
const isInternetConnection = Dns.isInternetConnection;
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* @function getLocalIPv4Address
|
|
536
|
+
* @memberof UnderpostDns
|
|
537
|
+
* @description Exported function for backward compatibility.
|
|
538
|
+
* @returns {string}
|
|
539
|
+
*/
|
|
540
|
+
const getLocalIPv4Address = Dns.getLocalIPv4Address;
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Main UnderpostDns class exposing the Dns API.
|
|
544
|
+
* @class UnderpostDns
|
|
545
|
+
* @memberof UnderpostDns
|
|
546
|
+
*/
|
|
547
|
+
class UnderpostDns {
|
|
548
|
+
static API = Dns;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
export default UnderpostDns;
|
|
552
|
+
|
|
553
|
+
export { Dns, isInternetConnection, getLocalIPv4Address, UnderpostDns };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides a utility class for downloading files from a URL and saving them to the local filesystem.
|
|
3
|
+
* @module src/server/downloader.js
|
|
4
|
+
* @namespace Downloader
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import axios from 'axios';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import { loggerFactory } from './logger.js';
|
|
10
|
+
|
|
11
|
+
const logger = loggerFactory(import.meta);
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Main class for handling file downloading operations.
|
|
15
|
+
* All utility methods are implemented as static to serve as a namespace container.
|
|
16
|
+
* @class Downloader
|
|
17
|
+
* @augments Downloader
|
|
18
|
+
* @memberof Downloader
|
|
19
|
+
*/
|
|
20
|
+
class Downloader {
|
|
21
|
+
/**
|
|
22
|
+
* Downloads a file from a given URL and pipes the stream to a local file path.
|
|
23
|
+
* @static
|
|
24
|
+
* @memberof Downloader
|
|
25
|
+
* @param {string} url The URL of the file to download.
|
|
26
|
+
* @param {string} fullPath The full local path where the file should be saved.
|
|
27
|
+
* @param {object} [options] Axios request configuration options.
|
|
28
|
+
* @param {string} [options.method='get'] HTTP method.
|
|
29
|
+
* @param {string} [options.responseType='stream'] Expected response type.
|
|
30
|
+
* @returns {Promise<string>} Resolves with the full path of the saved file on success.
|
|
31
|
+
* @memberof Downloader
|
|
32
|
+
*/
|
|
33
|
+
static downloadFile(url, fullPath, options = { method: 'get', responseType: 'stream' }) {
|
|
34
|
+
return new Promise((resolve, reject) =>
|
|
35
|
+
axios({
|
|
36
|
+
url,
|
|
37
|
+
...options,
|
|
38
|
+
})
|
|
39
|
+
.then((response) => {
|
|
40
|
+
// Create a write stream to save the file to the specified path
|
|
41
|
+
const writer = fs.createWriteStream(fullPath);
|
|
42
|
+
response.data.pipe(writer);
|
|
43
|
+
writer.on('finish', () => {
|
|
44
|
+
logger.info('Download completet');
|
|
45
|
+
return resolve(fullPath);
|
|
46
|
+
});
|
|
47
|
+
writer.on('error', (error) => {
|
|
48
|
+
logger.error('Error downloading the file');
|
|
49
|
+
// Cleanup incomplete file if possible
|
|
50
|
+
if (fs.existsSync(fullPath)) fs.unlinkSync(fullPath);
|
|
51
|
+
return reject(error);
|
|
52
|
+
});
|
|
53
|
+
})
|
|
54
|
+
.catch((error) => {
|
|
55
|
+
logger.error('Error in the request');
|
|
56
|
+
return reject(error);
|
|
57
|
+
}),
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export default Downloader;
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* @function downloadFile
|
|
66
|
+
* @description Backward compatibility export for `Downloader.downloadFile`.
|
|
67
|
+
* @param {string} url The URL of the file to download.
|
|
68
|
+
* @param {string} fullPath The full local path where the file should be saved.
|
|
69
|
+
* @param {object} [options] Axios request configuration options.
|
|
70
|
+
* @returns {Promise<string>} Resolves with the full path of the saved file on success.
|
|
71
|
+
* @memberof Downloader
|
|
72
|
+
*/
|
|
73
|
+
export const downloadFile = Downloader.downloadFile;
|