@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,523 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Router module for handling routing in a PWA application.
|
|
3
|
+
* @module src/client/components/core/Router.js
|
|
4
|
+
* @namespace PwaRouter
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { titleFormatted } from './CommonJs.js';
|
|
8
|
+
import { loggerFactory } from './Logger.js';
|
|
9
|
+
import { htmls, s } from './VanillaJs.js';
|
|
10
|
+
import { Modal, subMenuHandler } from './Modal.js';
|
|
11
|
+
import { Worker } from './Worker.js';
|
|
12
|
+
|
|
13
|
+
const logger = loggerFactory(import.meta, { trace: true });
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @type {function | null}
|
|
17
|
+
* @description The active routes function registered by the current app router.
|
|
18
|
+
* Replaces the former `window.Routes` global so `getProxyPath` can resolve
|
|
19
|
+
* sub-directory proxy paths without polluting the global scope.
|
|
20
|
+
* @memberof PwaRouter
|
|
21
|
+
*/
|
|
22
|
+
let _activeRoutes = null;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Registers the active routes function for the current app.
|
|
26
|
+
* Called automatically by `LoadRouter`; should not be called manually.
|
|
27
|
+
* @param {function} routesFn - A function returning the routes object.
|
|
28
|
+
* @memberof PwaRouter
|
|
29
|
+
*/
|
|
30
|
+
const registerRoutes = (routesFn) => {
|
|
31
|
+
_activeRoutes = routesFn;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @type {Object.<string, function>}
|
|
36
|
+
* @description Holds event listeners for router changes.
|
|
37
|
+
* @memberof PwaRouter
|
|
38
|
+
*/
|
|
39
|
+
const RouterEvents = {};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @type {Object.<string, function>}\n
|
|
43
|
+
* @description Holds event listeners for query parameter changes.\n
|
|
44
|
+
* @memberof PwaRouter
|
|
45
|
+
*/
|
|
46
|
+
const queryParamsChangeListeners = {};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @type {string[]}
|
|
50
|
+
* @description Array of core UI component IDs that should not trigger modal close route changes.
|
|
51
|
+
* @memberof PwaRouter
|
|
52
|
+
*/
|
|
53
|
+
const coreUI = ['modal-menu', 'main-body', 'main-body-top', 'bottom-bar', 'board-notification'];
|
|
54
|
+
/**
|
|
55
|
+
* @type {Object.<string, function>}
|
|
56
|
+
* @description Holds event listeners for route changes that should close a modal.
|
|
57
|
+
* @memberof PwaRouter
|
|
58
|
+
*/
|
|
59
|
+
const closeModalRouteChangeEvents = {};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Deferred promise that resolves once the full UI (including deferred slide-menu DOM
|
|
63
|
+
* setup in Modal) is ready. Any code that depends on the complete DOM — route handlers,
|
|
64
|
+
* session callbacks, panel updates, etc. — can simply `await RouterReady` instead of
|
|
65
|
+
* scattering individual null-checks across every microfrontend.
|
|
66
|
+
*
|
|
67
|
+
* Resolved by calling `setRouterReady()`, which should happen exactly once at the end
|
|
68
|
+
* of Modal's deferred slide-menu `setTimeout` block.
|
|
69
|
+
* @type {Promise<void>}
|
|
70
|
+
* @memberof PwaRouter
|
|
71
|
+
*/
|
|
72
|
+
let _routerReadyResolve;
|
|
73
|
+
const RouterReady = new Promise((resolve) => {
|
|
74
|
+
_routerReadyResolve = resolve;
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Signals that the deferred UI setup is complete and the router (and any other
|
|
79
|
+
* awaiter of `RouterReady`) may safely access the full DOM.
|
|
80
|
+
* This must be called exactly once – typically at the end of Modal's deferred
|
|
81
|
+
* slide-menu `setTimeout` block.
|
|
82
|
+
* @memberof PwaRouter
|
|
83
|
+
*/
|
|
84
|
+
const setRouterReady = () => {
|
|
85
|
+
if (_routerReadyResolve) {
|
|
86
|
+
_routerReadyResolve();
|
|
87
|
+
_routerReadyResolve = undefined;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Determines the base path for the application, often used for routing within a sub-directory.
|
|
93
|
+
* It checks the current URL's pathname and the active registered routes to return the appropriate proxy path.
|
|
94
|
+
*
|
|
95
|
+
* @returns {string} The calculated proxy path. Returns `/<first-segment>/` if a segment exists,
|
|
96
|
+
* otherwise `/`. If the registered routes indicate the path is a root route, it returns `/`.
|
|
97
|
+
* @memberof PwaRouter
|
|
98
|
+
*/
|
|
99
|
+
const getProxyPath = () => {
|
|
100
|
+
let path = location.pathname.split('/')[1] ? `/${location.pathname.split('/')[1]}/` : '/';
|
|
101
|
+
if (_activeRoutes && path !== '/' && path.slice(0, -1) in _activeRoutes()) path = '/';
|
|
102
|
+
return path;
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Sets the browser's path using the History API. It sanitizes the path, handles query strings and hashes,
|
|
107
|
+
* and prevents pushing the same state twice unless forced or using replace mode.
|
|
108
|
+
* @param {string} [path='/'] - The new path to set. Can include query strings and hashes.
|
|
109
|
+
* @param {object} [options={ removeSearch: false, removeHash: false, replace: false, force: false }] - Options for path manipulation.
|
|
110
|
+
* @param {boolean} [options.removeSearch=false] - If true, removes the search part of the URL.
|
|
111
|
+
* @param {boolean} [options.removeHash=false] - If true, removes the hash part of the URL. Defaults to `false`.
|
|
112
|
+
* @param {boolean} [options.replace=false] - If true, uses replaceState instead of pushState.
|
|
113
|
+
* @param {boolean} [options.force=false] - If true, allows navigation to the same path (useful for query param changes).
|
|
114
|
+
* @param {object} [stateStorage={}] - State object to associate with the history entry.
|
|
115
|
+
* @param {string} [title=''] - The title for the new history entry.
|
|
116
|
+
* @memberof PwaRouter
|
|
117
|
+
* @returns {void | undefined} Returns `undefined` if the new path is the same as the current path and not forced, otherwise `void` (result of `history.pushState` or `history.replaceState`).
|
|
118
|
+
*/
|
|
119
|
+
const setPath = (
|
|
120
|
+
path = '/',
|
|
121
|
+
options = { removeSearch: false, removeHash: false, replace: false, force: false },
|
|
122
|
+
stateStorage = {},
|
|
123
|
+
title = '',
|
|
124
|
+
) => {
|
|
125
|
+
// logger.warn(`Set path input`, `${path}`);
|
|
126
|
+
if (!path) path = '/';
|
|
127
|
+
|
|
128
|
+
let [inputPath, inputSearchHash] = `${path}`.split('?');
|
|
129
|
+
let [inputSearch, inputHash] = inputSearchHash ? inputSearchHash.split('#') : [];
|
|
130
|
+
|
|
131
|
+
let sanitizedPath = (inputPath[0] !== '/' ? `/${inputPath}` : inputPath)
|
|
132
|
+
.trim()
|
|
133
|
+
.replaceAll('//', '/')
|
|
134
|
+
.replaceAll(`\\`, '/');
|
|
135
|
+
|
|
136
|
+
if (sanitizedPath.length > 1 && sanitizedPath[sanitizedPath.length - 1] === '/')
|
|
137
|
+
sanitizedPath = sanitizedPath.slice(0, -1);
|
|
138
|
+
|
|
139
|
+
const newFullPath = `${sanitizedPath}${inputSearch && !options.removeSearch ? `?${inputSearch}` : ''}${
|
|
140
|
+
inputHash && !options.removeHash ? `#${inputHash}` : ''
|
|
141
|
+
}`;
|
|
142
|
+
const currentFullPath = `${window.location.pathname}${location.search}${location.hash}`;
|
|
143
|
+
// logger.warn(`Set path output`, {
|
|
144
|
+
// inputPath: inputPath,
|
|
145
|
+
// inputSearch: inputSearch,
|
|
146
|
+
// inputHash: inputHash,
|
|
147
|
+
// sanitizedPath: sanitizedPath,
|
|
148
|
+
// currentLocationSearch: location.search,
|
|
149
|
+
// currentLocationHash: location.hash,
|
|
150
|
+
// currentFullPath,
|
|
151
|
+
// newFullPath,
|
|
152
|
+
// });
|
|
153
|
+
if (currentFullPath === newFullPath && !options.force) {
|
|
154
|
+
// logger.warn('Prevent overwriting same path', { currentFullPath, newFullPath });
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (options.replace) {
|
|
159
|
+
return history.replaceState.call(history, stateStorage, title, newFullPath);
|
|
160
|
+
} else {
|
|
161
|
+
return history.pushState.call(history, stateStorage, title, newFullPath);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Extracts query parameters from the current URL's search string and returns them as an object.
|
|
167
|
+
* @returns An object containing the query parameters from the current URL is being returned.
|
|
168
|
+
* @memberof PwaRouter
|
|
169
|
+
*/
|
|
170
|
+
const getQueryParams = () => {
|
|
171
|
+
const params = new URLSearchParams(window.location.search);
|
|
172
|
+
let queries = {};
|
|
173
|
+
for (const param of params) {
|
|
174
|
+
queries[param[0]] = param[1];
|
|
175
|
+
}
|
|
176
|
+
return queries;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Sanitizes a route string for use in CSS classes or other identifiers.
|
|
181
|
+
* Defaults to 'home' for empty, '/', or '\' routes.
|
|
182
|
+
* @param {string} route - The route string to sanitize.
|
|
183
|
+
* @returns {string} The sanitized route string.
|
|
184
|
+
* @memberof PwaRouter
|
|
185
|
+
*/
|
|
186
|
+
const sanitizeRoute = (route) =>
|
|
187
|
+
!route || route === '/' || route === `\\`
|
|
188
|
+
? 'home'
|
|
189
|
+
: route
|
|
190
|
+
.toLowerCase()
|
|
191
|
+
.replaceAll('/', '')
|
|
192
|
+
.replaceAll(`\\`, '')
|
|
193
|
+
.replaceAll(' ', '-')
|
|
194
|
+
.replaceAll(getProxyPath().replaceAll('/', ''), '');
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Sets the document title and updates the active state of the main menu button corresponding to the route.
|
|
198
|
+
* The title is formatted and appended with the main application title from `Worker.title` if it's not already present.
|
|
199
|
+
* @param {string} route - The current route string.
|
|
200
|
+
* @memberof PwaRouter
|
|
201
|
+
*/
|
|
202
|
+
const setDocTitle = (route) => {
|
|
203
|
+
let _route = sanitizeRoute(route);
|
|
204
|
+
// logger.warn('setDocTitle', _route);
|
|
205
|
+
const title = titleFormatted(_route);
|
|
206
|
+
htmls('title', html`${title}${title.match(Worker.title.toLowerCase()) ? '' : ` | ${Worker.title}`}`);
|
|
207
|
+
|
|
208
|
+
const btnSelector = _route === 'u' ? 'public-profile' : _route;
|
|
209
|
+
if (s(`.main-btn-${btnSelector}`)) {
|
|
210
|
+
if (s(`.main-btn-menu-active`)) s(`.main-btn-menu-active`).classList.remove(`main-btn-menu-active`);
|
|
211
|
+
if (s(`.main-btn-${btnSelector}`)) s(`.main-btn-${btnSelector}`).classList.add(`main-btn-menu-active`);
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Main router function. It matches the current URL path against the provided routes configuration
|
|
217
|
+
* and renders the corresponding component. It also fires registered router events.
|
|
218
|
+
* @param {object} [options={ Routes: () => {}, e: new PopStateEvent() }] - The router options.
|
|
219
|
+
* @param {function} options.Routes - A function that returns the routes object.
|
|
220
|
+
* @param {PopStateEvent} options.e - The popstate event object.
|
|
221
|
+
* @memberof PwaRouter
|
|
222
|
+
*/
|
|
223
|
+
const Router = function (options = { Routes: () => {}, e: new PopStateEvent() }) {
|
|
224
|
+
const { e, Routes } = options;
|
|
225
|
+
const proxyPath = getProxyPath();
|
|
226
|
+
let path = window.location.pathname;
|
|
227
|
+
// logger.info(options);
|
|
228
|
+
|
|
229
|
+
for (let route of Object.keys(Routes())) {
|
|
230
|
+
route = route.slice(1);
|
|
231
|
+
let pushPath = `${proxyPath}${route}`;
|
|
232
|
+
|
|
233
|
+
if (path[path.length - 1] !== '/') path = `${path}/`;
|
|
234
|
+
// Handle clean profile URLs: match /u/username with /u route
|
|
235
|
+
let matchPath = path;
|
|
236
|
+
if (route === 'u' && path.startsWith(`${proxyPath}u/`) && path !== `${proxyPath}u/`) {
|
|
237
|
+
handleCleanProfileUrl(path);
|
|
238
|
+
matchPath = `${proxyPath}u/`;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if (matchPath[matchPath.length - 1] !== '/') matchPath = `${matchPath}/`;
|
|
242
|
+
if (pushPath[pushPath.length - 1] !== '/') pushPath = `${pushPath}/`;
|
|
243
|
+
|
|
244
|
+
const routerEvent = { path: matchPath, pushPath, route };
|
|
245
|
+
|
|
246
|
+
if (matchPath === pushPath) {
|
|
247
|
+
for (const event of Object.keys(RouterEvents)) RouterEvents[event](routerEvent);
|
|
248
|
+
subMenuHandler(Object.keys(Routes()), route);
|
|
249
|
+
setDocTitle(route);
|
|
250
|
+
return Routes()[`/${route}`].render();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* Initializes the router and sets up the `onpopstate` event listener to handle browser
|
|
257
|
+
* back/forward navigation.
|
|
258
|
+
* @param {object} RouterInstance - The router instance configuration, including the `Routes` function.
|
|
259
|
+
* @memberof PwaRouter
|
|
260
|
+
*/
|
|
261
|
+
const LoadRouter = async function (RouterInstance) {
|
|
262
|
+
await RouterReady;
|
|
263
|
+
if (RouterInstance.Routes) registerRoutes(RouterInstance.Routes);
|
|
264
|
+
Router(RouterInstance);
|
|
265
|
+
window.onpopstate = (e) => {
|
|
266
|
+
Router({ ...RouterInstance, e });
|
|
267
|
+
// Notify query params listeners on browser back/forward navigation
|
|
268
|
+
const updatedParams = getQueryParams();
|
|
269
|
+
for (const listenerId in queryParamsChangeListeners) {
|
|
270
|
+
if (Object.hasOwnProperty.call(queryParamsChangeListeners, listenerId)) {
|
|
271
|
+
queryParamsChangeListeners[listenerId](updatedParams);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Sets the URL path with a specific query parameter, commonly used for content IDs.
|
|
279
|
+
* This function constructs a new URI based on the proxy path, a given path, and an optional query parameter.
|
|
280
|
+
* @param {object} [options={ path: '', queryPath: '' }] - The path options.
|
|
281
|
+
* @param {string} [options.path=''] - The base path segment.
|
|
282
|
+
* @param {string} [options.queryPath=''] - The query parameter value.
|
|
283
|
+
* @param {string} [queryKey='cid'] - The query parameter key.
|
|
284
|
+
* @memberof PwaRouter
|
|
285
|
+
*/
|
|
286
|
+
const setQueryPath = (options = { path: '', queryPath: '' }, queryKey = 'cid', navOptions = {}) => {
|
|
287
|
+
const { queryPath, path } = options;
|
|
288
|
+
const { replace = false } = navOptions;
|
|
289
|
+
const newUri = `${getProxyPath()}${path === 'home' ? '' : `${path}`}${
|
|
290
|
+
typeof queryPath === 'string' && queryPath ? `?${queryKey}=${queryPath}` : ''
|
|
291
|
+
}`;
|
|
292
|
+
const currentUri = `${window.location.pathname}${location.search}`;
|
|
293
|
+
|
|
294
|
+
// For query parameter changes on the same path, force the navigation to ensure proper history
|
|
295
|
+
const isSamePath = window.location.pathname === new URL(newUri, window.location.origin).pathname;
|
|
296
|
+
const isDifferentQuery = window.location.search !== new URL(newUri, window.location.origin).search;
|
|
297
|
+
const shouldForce = isSamePath && isDifferentQuery;
|
|
298
|
+
|
|
299
|
+
if (currentUri !== newUri && currentUri !== `${newUri}/`) {
|
|
300
|
+
setPath(newUri, { force: shouldForce, replace }, '');
|
|
301
|
+
}
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Extracts username from clean public profile URLs like /u/username.
|
|
306
|
+
* @param {string} [pathname] - The pathname to extract from (defaults to current pathname).
|
|
307
|
+
* @returns {string|null} The username if found, null otherwise.
|
|
308
|
+
* @memberof PwaRouter
|
|
309
|
+
*/
|
|
310
|
+
const extractUsernameFromPath = (pathname = window.location.pathname) => {
|
|
311
|
+
const proxyPath = getProxyPath();
|
|
312
|
+
const cleanPathPrefix = `${proxyPath}u/`.replace(/\/+/g, '/');
|
|
313
|
+
|
|
314
|
+
if (pathname.startsWith(cleanPathPrefix)) {
|
|
315
|
+
const username = pathname.slice(cleanPathPrefix.length).split('/')[0];
|
|
316
|
+
return username || null;
|
|
317
|
+
}
|
|
318
|
+
return null;
|
|
319
|
+
};
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Handles direct navigation to clean public profile URLs.
|
|
323
|
+
* Converts clean URLs like /u/username to internal query format for SPA.
|
|
324
|
+
* @param {string} [pathname] - The pathname to handle (defaults to current pathname).
|
|
325
|
+
* @returns {boolean} True if this was a public profile URL that was handled.
|
|
326
|
+
* @memberof PwaRouter
|
|
327
|
+
*/
|
|
328
|
+
const handleCleanProfileUrl = (pathname = window.location.pathname) => {
|
|
329
|
+
const username = extractUsernameFromPath(pathname);
|
|
330
|
+
if (username) {
|
|
331
|
+
// Convert clean URL to internal query format for data fetching
|
|
332
|
+
// Don't modify history - just return the username for the caller to use
|
|
333
|
+
return username;
|
|
334
|
+
}
|
|
335
|
+
return null;
|
|
336
|
+
};
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Navigates to a public profile URL without adding intermediate query URLs to history.
|
|
340
|
+
* This ensures clean back/forward navigation between profiles.
|
|
341
|
+
* @param {string} username - The username to navigate to.
|
|
342
|
+
* @param {object} [options={}] - Navigation options.
|
|
343
|
+
* @param {boolean} [options.replace=false] - If true, replaces current history entry instead of pushing.
|
|
344
|
+
* @memberof PwaRouter
|
|
345
|
+
*/
|
|
346
|
+
const navigateToProfile = (username, options = {}) => {
|
|
347
|
+
const { replace = false } = options;
|
|
348
|
+
if (!username) return;
|
|
349
|
+
|
|
350
|
+
const cleanPath = `${getProxyPath()}u/${username}`;
|
|
351
|
+
const currentPath = window.location.pathname;
|
|
352
|
+
|
|
353
|
+
// If we're already on this profile's clean URL, no navigation needed
|
|
354
|
+
if (currentPath === cleanPath) return;
|
|
355
|
+
// Navigate directly to clean URL, avoiding intermediate ?cid= URLs in history
|
|
356
|
+
setPath(cleanPath, { replace });
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Registers a listener for route changes that specifically watches for a `queryKey` parameter
|
|
361
|
+
* on a matching `routeId`. The provided event callback is triggered with the query parameter's value.
|
|
362
|
+
* @param {object} options - The listener options.
|
|
363
|
+
* @param {string} options.id - A unique ID for the listener.
|
|
364
|
+
* @param {string} options.routeId - The route ID to listen for.
|
|
365
|
+
* @param {function(string): void} options.event - The callback function to execute with the query path value (or an empty string if not found).
|
|
366
|
+
* @param {string} [queryKey='cid'] - The query parameter key to look for.
|
|
367
|
+
* @memberof PwaRouter
|
|
368
|
+
*/
|
|
369
|
+
const listenQueryPathInstance = ({ id, routeId, event }, queryKey = 'cid') => {
|
|
370
|
+
RouterEvents[id] = ({ path, pushPath, proxyPath, route }) => {
|
|
371
|
+
if ((route === '' && routeId === 'home') || (route && routeId && route === routeId)) {
|
|
372
|
+
setTimeout(() => {
|
|
373
|
+
const path = getQueryParams()[queryKey];
|
|
374
|
+
if (path) event(path);
|
|
375
|
+
else event('');
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
};
|
|
379
|
+
if (routeId && routeId !== 'home')
|
|
380
|
+
setTimeout(() => {
|
|
381
|
+
RouterEvents[id]({ route: routeId });
|
|
382
|
+
});
|
|
383
|
+
};
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* Registers a listener for changes to query parameters.\n
|
|
387
|
+
* The provided event callback is triggered with the current query parameters object.\n
|
|
388
|
+
* @param {object} options - The listener options.\n
|
|
389
|
+
* @param {string} options.id - A unique ID for the listener.\n
|
|
390
|
+
* @param {function(Object.<string, string>): void} options.event - The callback function to execute with the new query parameters.\n
|
|
391
|
+
* @memberof PwaRouter
|
|
392
|
+
*/
|
|
393
|
+
const listenQueryParamsChange = ({ id, event }) => {
|
|
394
|
+
queryParamsChangeListeners[id] = event;
|
|
395
|
+
// Immediately call with current query params for initial state
|
|
396
|
+
setTimeout(() => {
|
|
397
|
+
event(getQueryParams());
|
|
398
|
+
});
|
|
399
|
+
};
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Handles the logic for changing the route when a modal is closed. It determines the next URL
|
|
403
|
+
* based on the remaining open modals or falls back to a home URL.
|
|
404
|
+
* @param {object} [options={}] - Options for the modal close event.
|
|
405
|
+
* @param {string} options.closedId - The ID of the modal that was just closed.
|
|
406
|
+
* @memberof PwaRouter
|
|
407
|
+
*/
|
|
408
|
+
const closeModalRouteChangeEvent = (options = {}) => {
|
|
409
|
+
// logger.warn('closeModalRouteChangeEvent', options);
|
|
410
|
+
const { closedId } = options;
|
|
411
|
+
if (!closedId) return;
|
|
412
|
+
if (coreUI.find((id) => closedId.startsWith(id))) {
|
|
413
|
+
// logger.warn('prevent core ui component close');
|
|
414
|
+
return;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
const remainingModals = Object.keys(Modal.Data).filter(
|
|
418
|
+
(id) => id !== closedId && (Modal.Data[id]?.options?.route || Modal.Data[id]?.options?.query),
|
|
419
|
+
);
|
|
420
|
+
|
|
421
|
+
const topModalId = remainingModals.reverse().find((id) => Modal.Data[id]);
|
|
422
|
+
|
|
423
|
+
for (const event of Object.keys(closeModalRouteChangeEvents)) closeModalRouteChangeEvents[event]();
|
|
424
|
+
if (topModalId) Modal.setTopModalCallback(topModalId);
|
|
425
|
+
setPath(`${getProxyPath()}${Modal.Data[topModalId]?.options?.route ?? ''}`);
|
|
426
|
+
setDocTitle(Modal.Data[topModalId]?.options?.route ?? '');
|
|
427
|
+
};
|
|
428
|
+
|
|
429
|
+
/**
|
|
430
|
+
* Handles routing for modals that are meant to be displayed as a "view" (e.g., a full-page modal).
|
|
431
|
+
* It updates the URL to reflect the modal's route.
|
|
432
|
+
* @param {object} [options={ route: 'home' }] - The options for handling the modal view route.
|
|
433
|
+
* @param {string} options.route - The route associated with the modal view.
|
|
434
|
+
* @memberof PwaRouter
|
|
435
|
+
*/
|
|
436
|
+
const handleModalViewRoute = (options = { RouterInstance: { Routes: () => {} }, route: '' }) => {
|
|
437
|
+
const { route, RouterInstance } = options;
|
|
438
|
+
if (!route) return;
|
|
439
|
+
|
|
440
|
+
let path = window.location.pathname;
|
|
441
|
+
if (path !== '/' && path[path.length - 1] === '/') path = path.slice(0, -1);
|
|
442
|
+
const proxyPath = getProxyPath();
|
|
443
|
+
const newPath = `${proxyPath}${route}`;
|
|
444
|
+
if (RouterInstance && RouterInstance.Routes) subMenuHandler(Object.keys(RouterInstance.Routes()), route);
|
|
445
|
+
|
|
446
|
+
// Check if we're already on this route or a sub-path of it (e.g., /u/username for route 'u')
|
|
447
|
+
// Don't push to history if already on the route or its sub-path
|
|
448
|
+
const routeBasePath = `${proxyPath}${route}`;
|
|
449
|
+
const isOnRouteOrSubPath = path === newPath || path.startsWith(`${routeBasePath}/`);
|
|
450
|
+
|
|
451
|
+
if (!isOnRouteOrSubPath) {
|
|
452
|
+
setPath(newPath);
|
|
453
|
+
setDocTitle(newPath);
|
|
454
|
+
}
|
|
455
|
+
};
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Sets or updates query parameters in the URL.
|
|
459
|
+
* It preserves the existing path, hash, and other query parameters.
|
|
460
|
+
*
|
|
461
|
+
* @param {Object.<string, string|number>} newParams - An object of query parameters to set or update.
|
|
462
|
+
* If a value is `null` or `undefined`, the parameter will be removed.
|
|
463
|
+
* @param {object} [options={ replace: true }] - Options for history manipulation.
|
|
464
|
+
* @param {boolean} [options.replace=true] - If true, uses `history.replaceState` instead of `history.pushState`.
|
|
465
|
+
* @memberof PwaRouter
|
|
466
|
+
*/
|
|
467
|
+
const setQueryParams = (newParams, options = { replace: true }) => {
|
|
468
|
+
const url = new URL(window.location.href);
|
|
469
|
+
Object.entries(newParams).forEach(([key, value]) => {
|
|
470
|
+
if (value === null || value === undefined) {
|
|
471
|
+
url.searchParams.delete(key);
|
|
472
|
+
} else {
|
|
473
|
+
url.searchParams.set(key, value);
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
const newPath = url.pathname + url.search + url.hash;
|
|
478
|
+
const currentPath = window.location.pathname + window.location.search + window.location.hash;
|
|
479
|
+
|
|
480
|
+
// Only update history and trigger listeners if the URL actually changed
|
|
481
|
+
if (newPath === currentPath) {
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
if (options.replace) {
|
|
486
|
+
history.replaceState(history.state, '', newPath);
|
|
487
|
+
} else {
|
|
488
|
+
history.pushState(history.state, '', newPath);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
const updatedParams = getQueryParams();
|
|
492
|
+
for (const listenerId in queryParamsChangeListeners) {
|
|
493
|
+
if (Object.hasOwnProperty.call(queryParamsChangeListeners, listenerId)) {
|
|
494
|
+
queryParamsChangeListeners[listenerId](updatedParams);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
export {
|
|
500
|
+
RouterEvents,
|
|
501
|
+
registerRoutes,
|
|
502
|
+
navigateToProfile,
|
|
503
|
+
closeModalRouteChangeEvents,
|
|
504
|
+
coreUI,
|
|
505
|
+
Router,
|
|
506
|
+
setDocTitle,
|
|
507
|
+
LoadRouter,
|
|
508
|
+
setQueryPath,
|
|
509
|
+
extractUsernameFromPath,
|
|
510
|
+
handleCleanProfileUrl,
|
|
511
|
+
listenQueryPathInstance,
|
|
512
|
+
closeModalRouteChangeEvent,
|
|
513
|
+
handleModalViewRoute,
|
|
514
|
+
getQueryParams,
|
|
515
|
+
getProxyPath,
|
|
516
|
+
setPath,
|
|
517
|
+
setQueryParams,
|
|
518
|
+
sanitizeRoute,
|
|
519
|
+
queryParamsChangeListeners,
|
|
520
|
+
listenQueryParamsChange,
|
|
521
|
+
setRouterReady,
|
|
522
|
+
RouterReady,
|
|
523
|
+
};
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { s } from './VanillaJs.js';
|
|
2
|
+
|
|
3
|
+
class Scroll {
|
|
4
|
+
/**
|
|
5
|
+
* Attach scroll listener to an element (resolved with s(selector)).
|
|
6
|
+
* @param {string} selector - selector passed to s(selector)
|
|
7
|
+
* @param {function} [callback] - callback function to be called on scroll
|
|
8
|
+
* @param {object} options
|
|
9
|
+
* @param {number} [options.threshold=1] - px margin to treat as bottom
|
|
10
|
+
* @param {number} [options.precision=3] - decimal places for percentages
|
|
11
|
+
*/
|
|
12
|
+
static setEvent(selector, callback = async () => {}, options = { threshold: 1, precision: 3 }) {
|
|
13
|
+
const el = s(selector);
|
|
14
|
+
if (!el) return;
|
|
15
|
+
|
|
16
|
+
const threshold = options.threshold ?? 1; // px tolerance for bottom detection
|
|
17
|
+
const precision = options.precision ?? 3;
|
|
18
|
+
let ticking = false;
|
|
19
|
+
|
|
20
|
+
const round = (v) => {
|
|
21
|
+
const m = Math.pow(10, precision);
|
|
22
|
+
return Math.round(v * m) / m;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const listener = (event) => {
|
|
26
|
+
if (ticking) return;
|
|
27
|
+
ticking = true;
|
|
28
|
+
|
|
29
|
+
requestAnimationFrame(() => {
|
|
30
|
+
const scrollHeight = el.scrollHeight;
|
|
31
|
+
const clientHeight = el.clientHeight;
|
|
32
|
+
const scrollTop = el.scrollTop;
|
|
33
|
+
|
|
34
|
+
// pixels left to scroll (clamped to >= 0)
|
|
35
|
+
const remaining = Math.max(0, scrollHeight - clientHeight - scrollTop);
|
|
36
|
+
|
|
37
|
+
// maximum possible remaining (0 if content fits without scrolling)
|
|
38
|
+
const maxRemaining = Math.max(0, scrollHeight - clientHeight);
|
|
39
|
+
|
|
40
|
+
// percentRemaining: 1 = top (all remaining), 0 = bottom (none remaining)
|
|
41
|
+
let percentRemaining = maxRemaining === 0 ? 0 : remaining / maxRemaining;
|
|
42
|
+
percentRemaining = Math.max(0, Math.min(1, percentRemaining));
|
|
43
|
+
|
|
44
|
+
// percentScrolled: complementary value (0 = top, 1 = bottom)
|
|
45
|
+
let percentScrolled = 1 - percentRemaining;
|
|
46
|
+
percentScrolled = Math.max(0, Math.min(1, percentScrolled));
|
|
47
|
+
|
|
48
|
+
const payload = {
|
|
49
|
+
scrollHeight,
|
|
50
|
+
clientHeight,
|
|
51
|
+
scrollTop,
|
|
52
|
+
remaining, // px left (>= 0)
|
|
53
|
+
scrollBottom: remaining <= threshold ? 0 : remaining,
|
|
54
|
+
atBottom: remaining <= threshold,
|
|
55
|
+
percentRemaining: round(percentRemaining), // 0..1
|
|
56
|
+
percentScrolled: round(percentScrolled), // 0..1
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
// replace this with an event dispatch or callback if you prefer
|
|
60
|
+
// console.warn('scroll', event, JSON.stringify(payload, null, 2));
|
|
61
|
+
callback(payload);
|
|
62
|
+
|
|
63
|
+
ticking = false;
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
el.addEventListener('scroll', listener, { passive: true });
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
removeEvent: () => el.removeEventListener('scroll', listener),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { Scroll };
|
|
76
|
+
export default Scroll;
|