cyberia 2.8.885
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 +15 -0
- package/.env.development +45 -0
- package/.env.production +50 -0
- package/.env.test +45 -0
- package/.github/workflows/engine-cyberia.cd.yml +31 -0
- package/.github/workflows/engine-cyberia.ci.yml +60 -0
- package/.github/workflows/ghpkg.ci.yml +87 -0
- package/.github/workflows/npmpkg.ci.yml +72 -0
- package/.github/workflows/publish.ci.yml +84 -0
- package/.github/workflows/publish.cyberia.ci.yml +84 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +72 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +37 -0
- package/.nycrc +9 -0
- package/.prettierignore +13 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +51 -0
- package/.vscode/settings.json +87 -0
- package/AUTHORS.md +21 -0
- package/CHANGELOG.md +205 -0
- package/Dockerfile +28 -0
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/bin/build.js +209 -0
- package/bin/cron.js +47 -0
- package/bin/cyberia.js +145 -0
- package/bin/db.js +199 -0
- package/bin/deploy.js +1293 -0
- package/bin/file.js +197 -0
- package/bin/hwt.js +49 -0
- package/bin/index.js +145 -0
- package/bin/ssl.js +63 -0
- package/bin/util.js +80 -0
- package/bin/vs.js +74 -0
- package/cli.md +714 -0
- package/conf.js +204 -0
- package/deployment.yaml +138 -0
- package/jsconfig.json +7 -0
- package/jsdoc.json +32 -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-default-development/deployment.yaml +167 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/dd-test-development/deployment.yaml +174 -0
- package/manifests/deployment/dd-test-development/proxy.yaml +51 -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 +56 -0
- package/manifests/deployment/kafka/deployment.yaml +69 -0
- package/manifests/deployment/mongo-express/deployment.yaml +60 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +21 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +65 -0
- package/manifests/envoy-service-nodeport.yaml +23 -0
- package/manifests/grafana/deployment.yaml +57 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/kind-config-dev.yaml +12 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +119 -0
- package/manifests/kubelet-config.yaml +65 -0
- package/manifests/letsencrypt-prod.yaml +15 -0
- package/manifests/lxd/lxd-admin-profile.yaml +17 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/lxd/underpost-setup.sh +163 -0
- package/manifests/mariadb/config.yaml +10 -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/secret.yaml +8 -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/backup-access.yaml +16 -0
- package/manifests/mongodb/backup-cronjob.yaml +42 -0
- package/manifests/mongodb/backup-pv-pvc.yaml +22 -0
- package/manifests/mongodb/configmap.yaml +26 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +23 -0
- package/manifests/mongodb/statefulset.yaml +126 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/kustomization.yaml +7 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +23 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +63 -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/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +11 -0
- package/manifests/valkey/statefulset.yaml +38 -0
- package/nodemon.json +6 -0
- package/package.json +118 -0
- package/proxy.yaml +35 -0
- package/scripts/device-scan.sh +43 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/maas-setup.sh +120 -0
- package/scripts/nat-iptables.sh +26 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/snap-clean.sh +26 -0
- package/scripts/ssh-cluster-info.sh +14 -0
- package/scripts/ssl.sh +164 -0
- package/src/api/blockchain/blockchain.controller.js +51 -0
- package/src/api/blockchain/blockchain.model.js +90 -0
- package/src/api/blockchain/blockchain.router.js +21 -0
- package/src/api/blockchain/blockchain.service.js +24 -0
- package/src/api/core/core.controller.js +69 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +24 -0
- package/src/api/core/core.service.js +35 -0
- package/src/api/crypto/crypto.controller.js +51 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +20 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/default/default.controller.js +74 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +27 -0
- package/src/api/default/default.service.js +40 -0
- package/src/api/document/document.controller.js +66 -0
- package/src/api/document/document.model.js +51 -0
- package/src/api/document/document.router.js +24 -0
- package/src/api/document/document.service.js +133 -0
- package/src/api/file/file.controller.js +67 -0
- package/src/api/file/file.model.js +19 -0
- package/src/api/file/file.router.js +22 -0
- package/src/api/file/file.service.js +100 -0
- package/src/api/instance/instance.controller.js +69 -0
- package/src/api/instance/instance.model.js +40 -0
- package/src/api/instance/instance.router.js +34 -0
- package/src/api/instance/instance.service.js +70 -0
- package/src/api/ipfs/ipfs.controller.js +51 -0
- package/src/api/ipfs/ipfs.model.js +17 -0
- package/src/api/ipfs/ipfs.router.js +20 -0
- package/src/api/ipfs/ipfs.service.js +25 -0
- package/src/api/object-layer/README.md +85 -0
- package/src/api/object-layer/object-layer.controller.js +69 -0
- package/src/api/object-layer/object-layer.model.js +181 -0
- package/src/api/object-layer/object-layer.router.js +29 -0
- package/src/api/object-layer/object-layer.service.js +49 -0
- package/src/api/test/test.controller.js +59 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +21 -0
- package/src/api/test/test.service.js +35 -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 +100 -0
- package/src/api/user/user.router.js +400 -0
- package/src/api/user/user.service.js +500 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +1310 -0
- package/src/cli/cloud-init.js +548 -0
- package/src/cli/cluster.js +834 -0
- package/src/cli/cron.js +95 -0
- package/src/cli/db.js +414 -0
- package/src/cli/deploy.js +661 -0
- package/src/cli/env.js +101 -0
- package/src/cli/fs.js +256 -0
- package/src/cli/image.js +156 -0
- package/src/cli/index.js +436 -0
- package/src/cli/lxd.js +402 -0
- package/src/cli/monitor.js +260 -0
- package/src/cli/repository.js +274 -0
- package/src/cli/run.js +728 -0
- package/src/cli/script.js +85 -0
- package/src/cli/secrets.js +71 -0
- package/src/cli/ssh.js +46 -0
- package/src/cli/test.js +159 -0
- package/src/client/Cyberia.index.js +50 -0
- package/src/client/CyberiaAdmin.index.js +34 -0
- package/src/client/CyberiaPortal.index.js +36 -0
- package/src/client/Default.index.js +84 -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 +326 -0
- package/src/client/components/core/AgGrid.js +191 -0
- package/src/client/components/core/Alert.js +77 -0
- package/src/client/components/core/Auth.js +342 -0
- package/src/client/components/core/Badge.js +32 -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 +111 -0
- package/src/client/components/core/CalendarCore.js +464 -0
- package/src/client/components/core/Chat.js +64 -0
- package/src/client/components/core/ColorPalette.js +5267 -0
- package/src/client/components/core/CommonJs.js +1010 -0
- package/src/client/components/core/Content.js +196 -0
- package/src/client/components/core/Css.js +1099 -0
- package/src/client/components/core/CssCore.js +882 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +376 -0
- package/src/client/components/core/DropDown.js +223 -0
- package/src/client/components/core/EventsUI.js +133 -0
- package/src/client/components/core/FileExplorer.js +707 -0
- package/src/client/components/core/FullScreen.js +36 -0
- package/src/client/components/core/Input.js +383 -0
- package/src/client/components/core/JoyStick.js +80 -0
- package/src/client/components/core/Keyboard.js +73 -0
- package/src/client/components/core/LoadingAnimation.js +159 -0
- package/src/client/components/core/LogIn.js +190 -0
- package/src/client/components/core/LogOut.js +63 -0
- package/src/client/components/core/Logger.js +29 -0
- package/src/client/components/core/Modal.js +2494 -0
- package/src/client/components/core/NotificationManager.js +84 -0
- package/src/client/components/core/ObjectLayerEngine.js +1229 -0
- package/src/client/components/core/ObjectLayerEngineModal.js +443 -0
- package/src/client/components/core/Pagination.js +207 -0
- package/src/client/components/core/Panel.js +772 -0
- package/src/client/components/core/PanelForm.js +627 -0
- package/src/client/components/core/Polyhedron.js +162 -0
- package/src/client/components/core/Recover.js +207 -0
- package/src/client/components/core/Responsive.js +82 -0
- package/src/client/components/core/RichText.js +43 -0
- package/src/client/components/core/Router.js +317 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SignUp.js +125 -0
- package/src/client/components/core/SocketIo.js +74 -0
- package/src/client/components/core/Stream.js +113 -0
- package/src/client/components/core/ToggleSwitch.js +101 -0
- package/src/client/components/core/ToolTip.js +90 -0
- package/src/client/components/core/Translate.js +522 -0
- package/src/client/components/core/Validator.js +115 -0
- package/src/client/components/core/VanillaJs.js +423 -0
- package/src/client/components/core/Wallet.js +106 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +25 -0
- package/src/client/components/core/Worker.js +371 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cyberia/BagCyberia.js +1253 -0
- package/src/client/components/cyberia/BiomeCyberia.js +130 -0
- package/src/client/components/cyberia/CharacterCyberia.js +321 -0
- package/src/client/components/cyberia/CommonCyberia.js +1834 -0
- package/src/client/components/cyberia/CssCyberia.js +816 -0
- package/src/client/components/cyberia/ElementPreviewCyberia.js +183 -0
- package/src/client/components/cyberia/ElementsCyberia.js +146 -0
- package/src/client/components/cyberia/InteractionPanelCyberia.js +1043 -0
- package/src/client/components/cyberia/JoyStickCyberia.js +53 -0
- package/src/client/components/cyberia/LogInCyberia.js +68 -0
- package/src/client/components/cyberia/LogOutCyberia.js +24 -0
- package/src/client/components/cyberia/MainUserCyberia.js +424 -0
- package/src/client/components/cyberia/MapCyberia.js +160 -0
- package/src/client/components/cyberia/MatrixCyberia.js +147 -0
- package/src/client/components/cyberia/MenuCyberia.js +575 -0
- package/src/client/components/cyberia/PixiCyberia.js +1639 -0
- package/src/client/components/cyberia/PointAndClickMovementCyberia.js +146 -0
- package/src/client/components/cyberia/QuestCyberia.js +1420 -0
- package/src/client/components/cyberia/RoutesCyberia.js +47 -0
- package/src/client/components/cyberia/SettingsCyberia.js +16 -0
- package/src/client/components/cyberia/SignUpCyberia.js +14 -0
- package/src/client/components/cyberia/SkillCyberia.js +124 -0
- package/src/client/components/cyberia/SocketIoCyberia.js +211 -0
- package/src/client/components/cyberia/TileCyberia.js +685 -0
- package/src/client/components/cyberia/TranslateCyberia.js +96 -0
- package/src/client/components/cyberia/UniverseCyberia.js +14 -0
- package/src/client/components/cyberia/WebhookCyberia.js +13 -0
- package/src/client/components/cyberia/WikiCyberia.js +144 -0
- package/src/client/components/cyberia/WorldCyberia.js +680 -0
- package/src/client/components/cyberia-admin/BiomeCyberiaAdmin.js +978 -0
- package/src/client/components/cyberia-admin/CommonCyberiaAdmin.js +29 -0
- package/src/client/components/cyberia-admin/CssCyberiaAdmin.js +15 -0
- package/src/client/components/cyberia-admin/ElementsCyberiaAdmin.js +38 -0
- package/src/client/components/cyberia-admin/InstanceEngineCyberiaAdmin.js +180 -0
- package/src/client/components/cyberia-admin/LogInCyberiaAdmin.js +34 -0
- package/src/client/components/cyberia-admin/LogOutCyberiaAdmin.js +24 -0
- package/src/client/components/cyberia-admin/MenuCyberiaAdmin.js +660 -0
- package/src/client/components/cyberia-admin/RoutesCyberiaAdmin.js +57 -0
- package/src/client/components/cyberia-admin/ServerCyberiaAdmin.js +129 -0
- package/src/client/components/cyberia-admin/SettingsCyberiaAdmin.js +16 -0
- package/src/client/components/cyberia-admin/SignUpCyberiaAdmin.js +11 -0
- package/src/client/components/cyberia-admin/SocketIoCyberiaAdmin.js +53 -0
- package/src/client/components/cyberia-admin/TranslateCyberiaAdmin.js +7 -0
- package/src/client/components/cyberia-biome/CityCyberiaBiome.js +209 -0
- package/src/client/components/cyberia-biome/CityInteriorCyberiaBiome.js +253 -0
- package/src/client/components/cyberia-biome/ColorChaosCyberiaBiome.js +26 -0
- package/src/client/components/cyberia-biome/ForestCyberiaBiome.js +191 -0
- package/src/client/components/cyberia-biome/GridBaseCyberiaBiome.js +364 -0
- package/src/client/components/cyberia-biome/SeedCityCyberiaBiome.js +347 -0
- package/src/client/components/cyberia-biome/ShopCyberiaBiome.js +12 -0
- package/src/client/components/cyberia-biome/SpaceCyberiaBiome.js +58 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +29 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +132 -0
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +38 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +18 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +12 -0
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +487 -0
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +45 -0
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +136 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +11 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +52 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +12 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/ElementsDefault.js +38 -0
- package/src/client/components/default/LogInDefault.js +14 -0
- package/src/client/components/default/LogOutDefault.js +10 -0
- package/src/client/components/default/MenuDefault.js +743 -0
- package/src/client/components/default/RoutesDefault.js +48 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +9 -0
- package/src/client/components/default/SocketIoDefault.js +54 -0
- package/src/client/components/default/TranslateDefault.js +7 -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/plantuml/client-conf.svg +1 -0
- package/src/client/public/default/plantuml/client-schema.svg +1 -0
- package/src/client/public/default/plantuml/cron-conf.svg +1 -0
- package/src/client/public/default/plantuml/cron-schema.svg +1 -0
- package/src/client/public/default/plantuml/server-conf.svg +1 -0
- package/src/client/public/default/plantuml/server-schema.svg +1 -0
- package/src/client/public/default/plantuml/ssr-conf.svg +1 -0
- package/src/client/public/default/plantuml/ssr-schema.svg +1 -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/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/blockchain/blockchain.service.js +73 -0
- package/src/client/services/core/core.service.js +165 -0
- package/src/client/services/crypto/crypto.service.js +73 -0
- package/src/client/services/default/default.management.js +450 -0
- package/src/client/services/default/default.service.js +98 -0
- package/src/client/services/document/document.service.js +97 -0
- package/src/client/services/file/file.service.js +72 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +97 -0
- package/src/client/services/ipfs/ipfs.service.js +73 -0
- package/src/client/services/object-layer/object-layer.service.js +93 -0
- package/src/client/services/test/test.service.js +73 -0
- package/src/client/services/user/user.management.js +56 -0
- package/src/client/services/user/user.service.js +108 -0
- package/src/client/ssr/Render.js +237 -0
- package/src/client/ssr/body/404.js +73 -0
- package/src/client/ssr/body/500.js +72 -0
- package/src/client/ssr/body/CacheControl.js +114 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +90 -0
- package/src/client/ssr/body/CyberiaSplashScreenLore.js +424 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +90 -0
- package/src/client/ssr/email/DefaultRecoverEmail.js +21 -0
- package/src/client/ssr/email/DefaultVerifyEmail.js +17 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaAdminScripts.js +6 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/CyberiaScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -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/Seo.js +15 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +21 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +17 -0
- package/src/client/ssr/offline/Maintenance.js +63 -0
- package/src/client/ssr/offline/NoNetworkConnection.js +67 -0
- package/src/client/ssr/pages/404.js +12 -0
- package/src/client/ssr/pages/500.js +12 -0
- package/src/client/ssr/pages/Test.js +198 -0
- package/src/client/ssr/pages/maintenance.js +14 -0
- package/src/client/ssr/pages/offline.js +21 -0
- package/src/client/sw/default.sw.js +108 -0
- package/src/client/sw/template.sw.js +84 -0
- package/src/client.build.js +22 -0
- package/src/client.dev.js +24 -0
- package/src/db/DataBaseProvider.js +98 -0
- package/src/db/mariadb/MariaDB.js +66 -0
- package/src/db/mongo/MongooseDB.js +70 -0
- package/src/index.js +198 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/monitor.js +24 -0
- package/src/proxy.js +22 -0
- package/src/runtime/express/Express.js +256 -0
- package/src/runtime/lampp/Dockerfile +50 -0
- package/src/runtime/lampp/Lampp.js +343 -0
- package/src/server/auth.js +689 -0
- package/src/server/backup.js +96 -0
- package/src/server/client-build-docs.js +205 -0
- package/src/server/client-build-live.js +109 -0
- package/src/server/client-build.js +690 -0
- package/src/server/client-dev-server.js +87 -0
- package/src/server/client-formatted.js +87 -0
- package/src/server/client-icons.js +108 -0
- package/src/server/conf.js +1071 -0
- package/src/server/crypto.js +210 -0
- package/src/server/dns.js +276 -0
- package/src/server/downloader.js +74 -0
- package/src/server/json-schema.js +77 -0
- package/src/server/logger.js +197 -0
- package/src/server/network.js +72 -0
- package/src/server/object-layer.js +294 -0
- package/src/server/peer.js +69 -0
- package/src/server/process.js +171 -0
- package/src/server/proxy.js +110 -0
- package/src/server/runtime.js +170 -0
- package/src/server/ssr.js +127 -0
- package/src/server/start.js +161 -0
- package/src/server/tls.js +251 -0
- package/src/server/valkey.js +293 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +139 -0
- package/src/ws/IoServer.js +88 -0
- package/src/ws/core/channels/core.ws.chat.js +23 -0
- package/src/ws/core/channels/core.ws.mailer.js +35 -0
- package/src/ws/core/channels/core.ws.stream.js +31 -0
- package/src/ws/core/core.ws.connection.js +62 -0
- package/src/ws/core/core.ws.emit.js +53 -0
- package/src/ws/core/core.ws.server.js +76 -0
- package/src/ws/core/management/core.ws.chat.js +8 -0
- package/src/ws/core/management/core.ws.mailer.js +16 -0
- package/src/ws/core/management/core.ws.stream.js +8 -0
- package/src/ws/cyberia/channels/cyberia.ws.bot.js +56 -0
- package/src/ws/cyberia/channels/cyberia.ws.skill.js +51 -0
- package/src/ws/cyberia/channels/cyberia.ws.user.js +437 -0
- package/src/ws/cyberia/cyberia.ws.connection.js +36 -0
- package/src/ws/cyberia/cyberia.ws.emit.js +14 -0
- package/src/ws/cyberia/cyberia.ws.server.js +67 -0
- package/src/ws/cyberia/management/cyberia.ws.bot.js +669 -0
- package/src/ws/cyberia/management/cyberia.ws.skill.js +441 -0
- package/src/ws/cyberia/management/cyberia.ws.user.js +188 -0
- package/src/ws/default/channels/default.ws.main.js +16 -0
- package/src/ws/default/default.ws.connection.js +22 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +20 -0
- package/src/ws/default/management/default.ws.main.js +8 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility class for managing Progressive Web App (PWA) worker functionalities,
|
|
3
|
+
* including service worker registration, caching, and notification management.
|
|
4
|
+
* This class is designed to be used as a singleton instance (exported as 'Worker').
|
|
5
|
+
* @module src/client/components/core/Worker.js
|
|
6
|
+
* @namespace PwaWorker
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { BtnIcon } from './BtnIcon.js';
|
|
10
|
+
import { s4 } from './CommonJs.js';
|
|
11
|
+
import { EventsUI } from './EventsUI.js';
|
|
12
|
+
import { LoadingAnimation } from './LoadingAnimation.js';
|
|
13
|
+
import { loggerFactory } from './Logger.js';
|
|
14
|
+
import { LoadRouter } from './Router.js';
|
|
15
|
+
import { Translate } from './Translate.js';
|
|
16
|
+
import { s } from './VanillaJs.js';
|
|
17
|
+
import { getProxyPath } from './Router.js';
|
|
18
|
+
const logger = loggerFactory(import.meta);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Manages the PWA lifecycle, service workers, and related client-side events.
|
|
22
|
+
* @memberof PwaWorker
|
|
23
|
+
*/
|
|
24
|
+
class PwaWorker {
|
|
25
|
+
/**
|
|
26
|
+
* The application title, usually from the <title> tag content.
|
|
27
|
+
* @type {string}
|
|
28
|
+
*/
|
|
29
|
+
title = '';
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Tracks if notification permission has been granted and is active.
|
|
33
|
+
* @type {boolean}
|
|
34
|
+
*/
|
|
35
|
+
notificationActive = false;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* A function reference to the service worker's update method (registration.update()),
|
|
39
|
+
* dynamically set upon successful registration status check.
|
|
40
|
+
* @type {function(): Promise<void>}
|
|
41
|
+
*/
|
|
42
|
+
updateServiceWorker = async () => {};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Router instance reference, initialized during the `instance` call.
|
|
46
|
+
* @type {object | null}
|
|
47
|
+
*/
|
|
48
|
+
RouterInstance = null;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Creates an instance of PwaWorker and initializes the application title.
|
|
52
|
+
* @memberof PwaWorker
|
|
53
|
+
*/
|
|
54
|
+
constructor() {
|
|
55
|
+
this.title = `${s('title').textContent}`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Checks if the application is running in development mode (localhost or 127.0.0.1).
|
|
60
|
+
* @memberof PwaWorker
|
|
61
|
+
* @returns {boolean} True if in development mode.
|
|
62
|
+
*/
|
|
63
|
+
devMode() {
|
|
64
|
+
return location.origin.match('localhost') || location.origin.match('127.0.0.1');
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Initializes the PWA worker, registers global/worker event listeners,
|
|
69
|
+
* checks service worker status, and renders the initial content.
|
|
70
|
+
* This is the main entry point for the worker setup.
|
|
71
|
+
* @memberof PwaWorker
|
|
72
|
+
* @param {object} options - Configuration options.
|
|
73
|
+
* @param {function(): object} options.router - Function to get the router instance.
|
|
74
|
+
* @param {function(): Promise<void>} options.render - Function to render the application's UI.
|
|
75
|
+
* @returns {Promise<void>}
|
|
76
|
+
*/
|
|
77
|
+
async instance({ router, render }) {
|
|
78
|
+
window.ononline = async () => {
|
|
79
|
+
logger.warn('ononline');
|
|
80
|
+
};
|
|
81
|
+
window.onoffline = async () => {
|
|
82
|
+
logger.warn('onoffline');
|
|
83
|
+
};
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
if ('onLine' in navigator && navigator.onLine) window.ononline();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
if ('serviceWorker' in navigator) {
|
|
89
|
+
navigator.serviceWorker.addEventListener('controllerchange', () => {
|
|
90
|
+
logger.info('The controller of current browsing context has changed.');
|
|
91
|
+
});
|
|
92
|
+
navigator.serviceWorker.ready.then((worker) => {
|
|
93
|
+
logger.info('Service Worker Ready', worker);
|
|
94
|
+
|
|
95
|
+
// event message listener
|
|
96
|
+
navigator.serviceWorker.addEventListener('message', (event) => {
|
|
97
|
+
logger.info('Received event message', event.data);
|
|
98
|
+
const { status } = event.data;
|
|
99
|
+
|
|
100
|
+
switch (status) {
|
|
101
|
+
case 'loader':
|
|
102
|
+
{
|
|
103
|
+
LoadingAnimation.RenderCurrentSrcLoad(event);
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
|
|
107
|
+
default:
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
// if (navigator.serviceWorker.controller)
|
|
113
|
+
// navigator.serviceWorker.controller.postMessage({
|
|
114
|
+
// title: 'Hello from Client event message',
|
|
115
|
+
// });
|
|
116
|
+
|
|
117
|
+
// broadcast message
|
|
118
|
+
// const channel = new BroadcastChannel('sw-messages');
|
|
119
|
+
// channel.addEventListener('message', (event) => {
|
|
120
|
+
// logger.info('Received broadcast message', event.data);
|
|
121
|
+
// });
|
|
122
|
+
// channel.postMessage({ title: 'Hello from Client broadcast message' });
|
|
123
|
+
// channel.close();
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
this.RouterInstance = router();
|
|
128
|
+
const isInstall = await this.status();
|
|
129
|
+
if (!isInstall) await this.install();
|
|
130
|
+
await render();
|
|
131
|
+
LoadRouter(this.RouterInstance);
|
|
132
|
+
LoadingAnimation.removeSplashScreen();
|
|
133
|
+
if (this.devMode()) {
|
|
134
|
+
// const delayLiveReload = 1250;
|
|
135
|
+
// window.addEventListener('visibilitychange', () => {
|
|
136
|
+
// if (document.visibilityState === 'visible') {
|
|
137
|
+
// this.reload(delayLiveReload);
|
|
138
|
+
// }
|
|
139
|
+
// });
|
|
140
|
+
// window.addEventListener('focus', () => {
|
|
141
|
+
// this.reload(delayLiveReload);
|
|
142
|
+
// });
|
|
143
|
+
}
|
|
144
|
+
window.serviceWorkerReady = true;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Gets the current service worker registration.
|
|
149
|
+
* @memberof PwaWorker
|
|
150
|
+
* @returns {Promise<ServiceWorkerRegistration | undefined>} The service worker registration object, or undefined.
|
|
151
|
+
*/
|
|
152
|
+
async getRegistration() {
|
|
153
|
+
return navigator.serviceWorker.getRegistration();
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Forces the current service worker to skip waiting and reloads the page
|
|
158
|
+
* to apply the new service worker immediately.
|
|
159
|
+
* @memberof PwaWorker
|
|
160
|
+
* @param {number} [timeOut=3000] - Delay in milliseconds before reloading the page.
|
|
161
|
+
* @returns {Promise<void>} A promise that resolves after the page is reloaded.
|
|
162
|
+
*/
|
|
163
|
+
async reload(timeOut = 3000) {
|
|
164
|
+
return new Promise((resolve) => {
|
|
165
|
+
if (navigator.serviceWorker && navigator.serviceWorker.controller) {
|
|
166
|
+
navigator.serviceWorker.controller.postMessage({
|
|
167
|
+
status: 'skipWaiting',
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
setTimeout(() => resolve(location.reload()), timeOut);
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Updates the application by clearing specific caches and running the service worker update logic.
|
|
176
|
+
* Cache names matching 'components/', 'services/', or '.index.js' are deleted.
|
|
177
|
+
* @memberof PwaWorker
|
|
178
|
+
* @returns {Promise<void>}
|
|
179
|
+
*/
|
|
180
|
+
async update() {
|
|
181
|
+
const isInstall = await this.status();
|
|
182
|
+
if (isInstall) {
|
|
183
|
+
const cacheNames = await caches.keys();
|
|
184
|
+
for (const cacheName of cacheNames) {
|
|
185
|
+
if (cacheName.match('components/') || cacheName.match('services/') || cacheName.match('.index.js')) {
|
|
186
|
+
await caches.delete(cacheName);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
await this.updateServiceWorker();
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Checks the current status of all service worker registrations and sets the
|
|
195
|
+
* `updateServiceWorker` function reference if an active worker is found.
|
|
196
|
+
* @memberof PwaWorker
|
|
197
|
+
* @returns {Promise<boolean>} True if at least one service worker is registered.
|
|
198
|
+
*/
|
|
199
|
+
status() {
|
|
200
|
+
let status = false;
|
|
201
|
+
return new Promise((resolve) => {
|
|
202
|
+
if ('serviceWorker' in navigator) {
|
|
203
|
+
navigator.serviceWorker
|
|
204
|
+
.getRegistrations()
|
|
205
|
+
.then((registrations) => {
|
|
206
|
+
for (const registration of registrations) {
|
|
207
|
+
if (registration.installing) logger.info('installing', registration);
|
|
208
|
+
else if (registration.waiting) logger.info('waiting', registration);
|
|
209
|
+
else if (registration.active) {
|
|
210
|
+
logger.info('active', registration);
|
|
211
|
+
// Dynamically set the update function
|
|
212
|
+
this.updateServiceWorker = async () => await registration.update();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
if (registrations.length > 0) status = true;
|
|
216
|
+
resolve(status);
|
|
217
|
+
})
|
|
218
|
+
.catch((...args) => {
|
|
219
|
+
logger.error('Error getting service worker registrations:', ...args);
|
|
220
|
+
resolve(false);
|
|
221
|
+
});
|
|
222
|
+
} else {
|
|
223
|
+
logger.warn('Service Worker Disabled in browser');
|
|
224
|
+
resolve(false);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Registers the service worker (`sw.js`) with the browser.
|
|
231
|
+
* @memberof PwaWorker
|
|
232
|
+
* @returns {Promise<Array<any>>} A promise that resolves with the registration arguments.
|
|
233
|
+
*/
|
|
234
|
+
install() {
|
|
235
|
+
return new Promise((resolve) => {
|
|
236
|
+
if ('serviceWorker' in navigator) {
|
|
237
|
+
navigator.serviceWorker
|
|
238
|
+
.register(`${getProxyPath()}sw.js`, {
|
|
239
|
+
type: 'module',
|
|
240
|
+
})
|
|
241
|
+
.then((...args) => {
|
|
242
|
+
logger.warn('Service Worker Registered', args);
|
|
243
|
+
resolve(args);
|
|
244
|
+
})
|
|
245
|
+
.catch((...args) => {
|
|
246
|
+
logger.error('Error registering service worker:', ...args);
|
|
247
|
+
resolve(args);
|
|
248
|
+
});
|
|
249
|
+
} else {
|
|
250
|
+
logger.warn('Service Worker Disabled in browser');
|
|
251
|
+
resolve([]);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Unregisters all service workers and deletes all application caches.
|
|
258
|
+
* @memberof PwaWorker
|
|
259
|
+
* @returns {Promise<Array<any>>} A promise that resolves after uninstallation.
|
|
260
|
+
*/
|
|
261
|
+
uninstall() {
|
|
262
|
+
return new Promise(async (resolve) => {
|
|
263
|
+
if ('serviceWorker' in navigator) {
|
|
264
|
+
try {
|
|
265
|
+
const registrations = await navigator.serviceWorker.getRegistrations();
|
|
266
|
+
const cacheNames = await caches.keys();
|
|
267
|
+
for (const cacheName of cacheNames) await caches.delete(cacheName);
|
|
268
|
+
for (const registration of registrations) {
|
|
269
|
+
logger.info('Removing service worker registration', registration);
|
|
270
|
+
registration.unregister();
|
|
271
|
+
}
|
|
272
|
+
resolve([]);
|
|
273
|
+
} catch (error) {
|
|
274
|
+
logger.error('Error during service worker uninstallation:', error);
|
|
275
|
+
resolve([error]);
|
|
276
|
+
}
|
|
277
|
+
} else {
|
|
278
|
+
logger.warn('Service Worker Disabled in browser');
|
|
279
|
+
resolve([]);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Requests permission from the user to display notifications.
|
|
286
|
+
* Sets the internal `notificationActive` state.
|
|
287
|
+
* @memberof PwaWorker
|
|
288
|
+
* @returns {Promise<boolean>} True if permission is granted, false otherwise.
|
|
289
|
+
*/
|
|
290
|
+
notificationRequestPermission() {
|
|
291
|
+
return new Promise((resolve) =>
|
|
292
|
+
Notification.requestPermission().then((result) => {
|
|
293
|
+
if (result === 'granted') {
|
|
294
|
+
this.notificationActive = true;
|
|
295
|
+
resolve(true);
|
|
296
|
+
} else {
|
|
297
|
+
this.notificationActive = false;
|
|
298
|
+
resolve(false);
|
|
299
|
+
}
|
|
300
|
+
}),
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* Shows a sample notification if permission is granted.
|
|
306
|
+
* @memberof PwaWorker
|
|
307
|
+
* @returns {void}
|
|
308
|
+
*/
|
|
309
|
+
notificationShow() {
|
|
310
|
+
Notification.requestPermission().then((result) => {
|
|
311
|
+
if (result === 'granted') {
|
|
312
|
+
navigator.serviceWorker.ready.then((registration) => {
|
|
313
|
+
registration.showNotification('Vibration Sample', {
|
|
314
|
+
body: 'Buzz! Buzz!',
|
|
315
|
+
icon: '../images/touch/chrome-touch-icon.png',
|
|
316
|
+
vibrate: [200, 100, 200, 100, 200, 100, 200],
|
|
317
|
+
tag: 'vibration-sample',
|
|
318
|
+
requireInteraction: true,
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Renders the UI for PWA settings, including buttons for cleaning cache and worker management.
|
|
327
|
+
* It also attaches the click handler for the 'clean-cache' button.
|
|
328
|
+
* @memberof PwaWorker
|
|
329
|
+
* @returns {Promise<string>} The HTML string for the settings section.
|
|
330
|
+
*/
|
|
331
|
+
async RenderSetting() {
|
|
332
|
+
setTimeout(() => {
|
|
333
|
+
// Event listener for the clean cache button
|
|
334
|
+
EventsUI.onClick(`.btn-clean-cache`, async (e) => {
|
|
335
|
+
e.preventDefault();
|
|
336
|
+
// Clear local storage, uninstall the worker, and reload
|
|
337
|
+
localStorage.clear();
|
|
338
|
+
await this.uninstall();
|
|
339
|
+
await this.reload();
|
|
340
|
+
});
|
|
341
|
+
});
|
|
342
|
+
return html` <div class="in">
|
|
343
|
+
${await BtnIcon.Render({
|
|
344
|
+
class: 'inl section-mp btn-custom btn-install-service-controller hide',
|
|
345
|
+
label: html`<i class="fas fa-download"></i> ${Translate.Render('Install control service')}`,
|
|
346
|
+
})}
|
|
347
|
+
${await BtnIcon.Render({
|
|
348
|
+
class: 'inl section-mp btn-custom btn-uninstall-service-controller hide',
|
|
349
|
+
label: html`<i class="far fa-trash-alt"></i> ${Translate.Render('Uninstall control service')}`,
|
|
350
|
+
})}
|
|
351
|
+
${await BtnIcon.Render({
|
|
352
|
+
class: 'inl section-mp btn-custom btn-clean-cache',
|
|
353
|
+
label: html`<i class="fa-solid fa-broom"></i> ${Translate.Render('clean-cache')}`,
|
|
354
|
+
})}
|
|
355
|
+
${await BtnIcon.Render({
|
|
356
|
+
class: 'inl section-mp btn-custom btn-reload hide',
|
|
357
|
+
label: html`<i class="fas fa-sync-alt"></i> ${Translate.Render('Reload')}`,
|
|
358
|
+
})}
|
|
359
|
+
</div>`;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
// Create the singleton instance
|
|
364
|
+
const PwaWorkerInstance = new PwaWorker();
|
|
365
|
+
|
|
366
|
+
// Export the new class name for modern usage
|
|
367
|
+
export { PwaWorker };
|
|
368
|
+
|
|
369
|
+
// Export the instance with the old name (`Worker`) for backward compatibility,
|
|
370
|
+
// ensuring existing code consuming the module continues to work.
|
|
371
|
+
export { PwaWorkerInstance as Worker };
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module exports utility functions (`windowGetH`, `windowGetW`) for reliably
|
|
3
|
+
* determining the browser viewport dimensions, refactored into a class structure
|
|
4
|
+
* for encapsulation and better organization.
|
|
5
|
+
*
|
|
6
|
+
* @module src/client/components/core/windowGetDimensions.js
|
|
7
|
+
* @namespace PwaWindowDimensions
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
// --- Internal Helper Functions ---
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Helper: coerce a candidate value to a finite integer (or null if not usable).
|
|
14
|
+
* @private
|
|
15
|
+
* @param {*} v - The value to coerce (e.g., height/width from a window object).
|
|
16
|
+
* @returns {number|null} The rounded positive integer, or null if invalid.
|
|
17
|
+
* @memberof PwaWindowDimensions
|
|
18
|
+
*/
|
|
19
|
+
const toInt = (v) => {
|
|
20
|
+
const n = Number(v);
|
|
21
|
+
return Number.isFinite(n) && n > 0 ? Math.round(n) : null;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Helper: Merge candidates in priority order and return first valid value.
|
|
26
|
+
* @private
|
|
27
|
+
* @param {...(number|null)[]} candidates - A list of number or null values.
|
|
28
|
+
* @returns {number|null} The first finite, positive integer found, or null.
|
|
29
|
+
* @memberof PwaWindowDimensions
|
|
30
|
+
*/
|
|
31
|
+
const pickFirst = (...candidates) => {
|
|
32
|
+
for (const c of candidates) {
|
|
33
|
+
if (Number.isFinite(c) && c > 0) return Math.round(c);
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// --- Core Dimension Class ---
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @namespace PwaWindowDimensions
|
|
42
|
+
* @class
|
|
43
|
+
* @classdesc Utility class containing static methods for reliably determining the
|
|
44
|
+
* browser viewport dimensions, prioritizing visual viewport, then layout viewport,
|
|
45
|
+
* and finally screen dimensions as fallbacks.
|
|
46
|
+
*
|
|
47
|
+
* Usage:
|
|
48
|
+
* import PwaWindowDimensions from './windowGetDimensions.js';
|
|
49
|
+
* const h = PwaWindowDimensions.getH();
|
|
50
|
+
* @memberof PwaWindowDimensions
|
|
51
|
+
*/
|
|
52
|
+
export class PwaWindowDimensions {
|
|
53
|
+
// --- Private Static Getters (Encapsulating browser APIs) ---
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @private
|
|
57
|
+
* @static
|
|
58
|
+
* Try visualViewport values (most accurate for "what's actually visible").
|
|
59
|
+
* @returns {{height: number|null, width: number|null}}
|
|
60
|
+
* @memberof PwaWindowDimensions
|
|
61
|
+
*/
|
|
62
|
+
static #getFromVisualViewport() {
|
|
63
|
+
if (typeof window !== 'undefined' && window.visualViewport) {
|
|
64
|
+
const { height, width } = window.visualViewport;
|
|
65
|
+
return { height: toInt(height), width: toInt(width) };
|
|
66
|
+
}
|
|
67
|
+
return { height: null, width: null };
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @private
|
|
72
|
+
* @static
|
|
73
|
+
* Try layout viewport (doctype-root) measurements.
|
|
74
|
+
* document.documentElement.clientHeight/clientWidth are stable and widely used.
|
|
75
|
+
* @returns {{height: number|null, width: number|null}}
|
|
76
|
+
* @memberof PwaWindowDimensions
|
|
77
|
+
*/
|
|
78
|
+
static #getFromDocumentElement() {
|
|
79
|
+
if (typeof document !== 'undefined' && document.documentElement) {
|
|
80
|
+
const { clientHeight, clientWidth } = document.documentElement;
|
|
81
|
+
return { height: toInt(clientHeight), width: toInt(clientWidth) };
|
|
82
|
+
}
|
|
83
|
+
return { height: null, width: null };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @private
|
|
88
|
+
* @static
|
|
89
|
+
* Try window.* measurements (innerHeight/innerWidth are widely supported).
|
|
90
|
+
* @returns {{height: number|null, width: number|null}}
|
|
91
|
+
* @memberof PwaWindowDimensions
|
|
92
|
+
*/
|
|
93
|
+
static #getFromWindowInner() {
|
|
94
|
+
if (typeof window !== 'undefined') {
|
|
95
|
+
return { height: toInt(window.innerHeight), width: toInt(window.innerWidth) };
|
|
96
|
+
}
|
|
97
|
+
return { height: null, width: null };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @private
|
|
102
|
+
* @static
|
|
103
|
+
* Try body measurements (less reliable, used as a fallback).
|
|
104
|
+
* @returns {{height: number|null, width: number|null}}
|
|
105
|
+
* @memberof PwaWindowDimensions
|
|
106
|
+
*/
|
|
107
|
+
static #getFromBody() {
|
|
108
|
+
if (typeof document !== 'undefined' && document.body) {
|
|
109
|
+
return { height: toInt(document.body.clientHeight), width: toInt(document.body.clientWidth) };
|
|
110
|
+
}
|
|
111
|
+
return { height: null, width: null };
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @private
|
|
116
|
+
* @static
|
|
117
|
+
* Try screen measurements (physical screen/last-resort fallback).
|
|
118
|
+
* @returns {{height: number|null, width: number|null}}
|
|
119
|
+
* @memberof PwaWindowDimensions
|
|
120
|
+
*/
|
|
121
|
+
static #getFromScreen() {
|
|
122
|
+
if (typeof window !== 'undefined' && window.screen) {
|
|
123
|
+
const { availHeight, availWidth, height, width } = window.screen;
|
|
124
|
+
return {
|
|
125
|
+
height: toInt(availHeight) || toInt(height) || null,
|
|
126
|
+
width: toInt(availWidth) || toInt(width) || null,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
return { height: null, width: null };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* @private
|
|
134
|
+
* @static
|
|
135
|
+
* Try outer dimensions (less reliable, sometimes available fallback).
|
|
136
|
+
* @returns {{height: number|null, width: number|null}}
|
|
137
|
+
* @memberof PwaWindowDimensions
|
|
138
|
+
*/
|
|
139
|
+
static #getFromOuter() {
|
|
140
|
+
if (typeof window !== 'undefined') {
|
|
141
|
+
return { height: toInt(window.outerHeight), width: toInt(window.outerWidth) };
|
|
142
|
+
}
|
|
143
|
+
return { height: null, width: null };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// --- Public Static Methods ---
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Get the best-available viewport height in pixels.
|
|
150
|
+
*
|
|
151
|
+
* Priority (from most reliable for "visible" to least):
|
|
152
|
+
* 1. window.visualViewport.height (if `preferVisualViewport` is true)
|
|
153
|
+
* 2. document.documentElement.clientHeight (Layout viewport)
|
|
154
|
+
* 3. window.innerHeight (Window size)
|
|
155
|
+
* 4. document.body.clientHeight (Body size)
|
|
156
|
+
* 5. window.visualViewport.height (if `preferVisualViewport` is false)
|
|
157
|
+
* 6. window.screen.availHeight / window.screen.height (Physical screen)
|
|
158
|
+
* 7. window.outerHeight (Last resort)
|
|
159
|
+
*
|
|
160
|
+
* @memberof PwaWindowDimensions
|
|
161
|
+
* @static
|
|
162
|
+
* @param {Object} [options]
|
|
163
|
+
* @param {boolean} [options.preferVisualViewport=true] - When true, visualViewport is checked first (best for visible screen size, e.g., above mobile keyboard).
|
|
164
|
+
* @returns {number|null} Height in px (rounded integer) or null if none found.
|
|
165
|
+
* @memberof PwaWindowDimensions
|
|
166
|
+
*/
|
|
167
|
+
static getH(options = {}) {
|
|
168
|
+
const { preferVisualViewport = true } = options;
|
|
169
|
+
|
|
170
|
+
const vv = PwaWindowDimensions.#getFromVisualViewport();
|
|
171
|
+
const de = PwaWindowDimensions.#getFromDocumentElement();
|
|
172
|
+
const wi = PwaWindowDimensions.#getFromWindowInner();
|
|
173
|
+
const bd = PwaWindowDimensions.#getFromBody();
|
|
174
|
+
const sc = PwaWindowDimensions.#getFromScreen();
|
|
175
|
+
const ot = PwaWindowDimensions.#getFromOuter();
|
|
176
|
+
|
|
177
|
+
// Determine the prioritized list of height candidates
|
|
178
|
+
let candidates = [de.height, wi.height, bd.height];
|
|
179
|
+
if (preferVisualViewport) {
|
|
180
|
+
candidates = [vv.height, ...candidates]; // vv first
|
|
181
|
+
} else {
|
|
182
|
+
candidates.push(vv.height); // vv later
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Add final fallbacks
|
|
186
|
+
candidates.push(sc.height, ot.height);
|
|
187
|
+
|
|
188
|
+
return pickFirst(...candidates) || null;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Get the best-available viewport width in pixels.
|
|
193
|
+
*
|
|
194
|
+
* Priority (from most reliable for "visible" to least):
|
|
195
|
+
* 1. window.visualViewport.width (if `preferVisualViewport` is true)
|
|
196
|
+
* 2. document.documentElement.clientWidth (Layout viewport)
|
|
197
|
+
* 3. window.innerWidth (Window size)
|
|
198
|
+
* 4. document.body.clientWidth (Body size)
|
|
199
|
+
* 5. window.visualViewport.width (if `preferVisualViewport` is false)
|
|
200
|
+
* 6. window.screen.availWidth / window.screen.width (Physical screen)
|
|
201
|
+
* 7. window.outerWidth (Last resort)
|
|
202
|
+
*
|
|
203
|
+
* @memberof PwaWindowDimensions
|
|
204
|
+
* @static
|
|
205
|
+
* @param {Object} [options]
|
|
206
|
+
* @param {boolean} [options.preferVisualViewport=true] - When true, visualViewport is checked first.
|
|
207
|
+
* @returns {number|null} Width in px (rounded integer) or null if none found.
|
|
208
|
+
* @memberof PwaWindowDimensions
|
|
209
|
+
*/
|
|
210
|
+
static getW(options = {}) {
|
|
211
|
+
const { preferVisualViewport = true } = options;
|
|
212
|
+
|
|
213
|
+
const vv = PwaWindowDimensions.#getFromVisualViewport();
|
|
214
|
+
const de = PwaWindowDimensions.#getFromDocumentElement();
|
|
215
|
+
const wi = PwaWindowDimensions.#getFromWindowInner();
|
|
216
|
+
const bd = PwaWindowDimensions.#getFromBody();
|
|
217
|
+
const sc = PwaWindowDimensions.#getFromScreen();
|
|
218
|
+
const ot = PwaWindowDimensions.#getFromOuter();
|
|
219
|
+
|
|
220
|
+
// Determine the prioritized list of width candidates
|
|
221
|
+
let candidates = [de.width, wi.width, bd.width];
|
|
222
|
+
if (preferVisualViewport) {
|
|
223
|
+
candidates = [vv.width, ...candidates]; // vv first
|
|
224
|
+
} else {
|
|
225
|
+
candidates.push(vv.width); // vv later
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Add final fallbacks
|
|
229
|
+
candidates.push(sc.width, ot.width);
|
|
230
|
+
|
|
231
|
+
return pickFirst(...candidates) || null;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// --- Backward Compatibility Exports (Legacy API) ---
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Get the best-available viewport height in pixels.
|
|
239
|
+
* This function exists for backward compatibility; it wraps PwaWindowDimensions.getH().
|
|
240
|
+
*
|
|
241
|
+
* @function windowGetH
|
|
242
|
+
* @memberof PwaWindowDimensions
|
|
243
|
+
* @param {Object} [options]
|
|
244
|
+
* @param {boolean} [options.preferVisualViewport=true] - When true, visualViewport is checked first.
|
|
245
|
+
* @returns {number|null} Height in px (rounded integer) or null if none found.
|
|
246
|
+
* @memberof PwaWindowDimensions
|
|
247
|
+
*/
|
|
248
|
+
export const windowGetH = (options = {}) => PwaWindowDimensions.getH(options);
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Get the best-available viewport width in pixels.
|
|
252
|
+
* This function exists for backward compatibility; it wraps PwaWindowDimensions.getW().
|
|
253
|
+
*
|
|
254
|
+
* @function windowGetW
|
|
255
|
+
* @memberof PwaWindowDimensions
|
|
256
|
+
* @param {Object} [options]
|
|
257
|
+
* @param {boolean} [options.preferVisualViewport=true] - When true, prefer visualViewport if present
|
|
258
|
+
* @returns {number|null} Width in px (rounded integer) or null if none found.
|
|
259
|
+
* @memberof PwaWindowDimensions
|
|
260
|
+
*/
|
|
261
|
+
export const windowGetW = (options = {}) => PwaWindowDimensions.getW(options);
|
|
262
|
+
|
|
263
|
+
// --- Default Export ---
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* @typedef {PwaWindowDimensions} PwaWindowDimensions
|
|
267
|
+
* @memberof PwaWindowDimensions
|
|
268
|
+
*/
|
|
269
|
+
export default PwaWindowDimensions;
|