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,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module for managing logger control and configuration
|
|
3
|
+
* @module src/server/logger.js
|
|
4
|
+
* @namespace Logger
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
'use strict';
|
|
8
|
+
|
|
9
|
+
import dotenv from 'dotenv';
|
|
10
|
+
import winston from 'winston';
|
|
11
|
+
import morgan from 'morgan';
|
|
12
|
+
import colorize from 'json-colorizer';
|
|
13
|
+
import colors from 'colors';
|
|
14
|
+
import v8 from 'v8';
|
|
15
|
+
import { clearTerminalStringColor, formatBytes } from '../client/components/core/CommonJs.js';
|
|
16
|
+
|
|
17
|
+
colors.enable();
|
|
18
|
+
dotenv.config();
|
|
19
|
+
|
|
20
|
+
// Define your severity levels.
|
|
21
|
+
// With them, You can create log files,
|
|
22
|
+
// see or hide levels based on the running ENV.
|
|
23
|
+
const levels = {
|
|
24
|
+
error: 0,
|
|
25
|
+
warn: 1,
|
|
26
|
+
info: 2,
|
|
27
|
+
http: 3,
|
|
28
|
+
debug: 4,
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// This method set the current severity based on
|
|
32
|
+
// the current NODE_ENV: show all the log levels
|
|
33
|
+
// if the server was run in development mode; otherwise,
|
|
34
|
+
// if it was run in production, show only warn and error messages.
|
|
35
|
+
const level = () => 'info'; // (process.env.NODE_ENV || 'development' ? 'debug' : 'warn');
|
|
36
|
+
|
|
37
|
+
// Define different colors for each level.
|
|
38
|
+
// Colors make the log message more visible,
|
|
39
|
+
// adding the ability to focus or ignore messages.
|
|
40
|
+
|
|
41
|
+
// Tell winston that you want to link the colors
|
|
42
|
+
// defined above to the severity levels.
|
|
43
|
+
winston.addColors({
|
|
44
|
+
error: 'red',
|
|
45
|
+
warn: 'yellow',
|
|
46
|
+
info: 'green',
|
|
47
|
+
http: 'magenta',
|
|
48
|
+
debug: 'white',
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
// Chose the aspect of your log customizing the log format.
|
|
52
|
+
const format = (meta) =>
|
|
53
|
+
winston.format.combine(
|
|
54
|
+
// winston.format.errors({ stack: true }),
|
|
55
|
+
// Add the message timestamp with the preferred format
|
|
56
|
+
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
|
|
57
|
+
// Tell Winston that the logs must be colored
|
|
58
|
+
winston.format.colorize({ all: true }),
|
|
59
|
+
// Define the format of the message showing the timestamp, the level and the message
|
|
60
|
+
winston.format.printf((info) => {
|
|
61
|
+
const symbols = Object.getOwnPropertySymbols(info);
|
|
62
|
+
return `${`[${meta}]`.green} ${info.timestamp} ${info.level} ${
|
|
63
|
+
symbols[1]
|
|
64
|
+
? `${clearTerminalStringColor(info.message)}: ${colorize(JSON.stringify(info[symbols[1]][0], null, 4), {
|
|
65
|
+
colors: {
|
|
66
|
+
STRING_KEY: 'green',
|
|
67
|
+
STRING_LITERAL: 'magenta.bold',
|
|
68
|
+
NUMBER_LITERAL: '#FF0000',
|
|
69
|
+
},
|
|
70
|
+
})}`
|
|
71
|
+
: info.message
|
|
72
|
+
}`;
|
|
73
|
+
}),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Logs information about the current process environment to the console.
|
|
78
|
+
*
|
|
79
|
+
* This function is used to log details about
|
|
80
|
+
* the execution context, such as command-line arguments,
|
|
81
|
+
* environment variables, and the maximum available heap space size.
|
|
82
|
+
*
|
|
83
|
+
* @param {winston.Logger} logger - A pre-configured Winston logger object.
|
|
84
|
+
* @memberof Logger
|
|
85
|
+
*/
|
|
86
|
+
const setUpInfo = async (logger = new winston.Logger()) => {
|
|
87
|
+
logger.info('argv', process.argv);
|
|
88
|
+
logger.info('cwd', process.cwd());
|
|
89
|
+
logger.info('platform', process.platform);
|
|
90
|
+
logger.info('env', process.env.NODE_ENV);
|
|
91
|
+
logger.info('--max-old-space-size', {
|
|
92
|
+
total_available_size: formatBytes(v8.getHeapStatistics().total_available_size),
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The function `loggerFactory` creates a logger instance with specified transports for printing out
|
|
98
|
+
* messages.
|
|
99
|
+
* @param meta - The `meta` parameter in the `loggerFactory` function is used to extract the last part
|
|
100
|
+
* of a URL and use it to create log files in a specific directory.
|
|
101
|
+
* @returns {winston.Logger} The `loggerFactory` function returns a logger instance created using Winston logger
|
|
102
|
+
* library. The logger instance is configured with various transports for printing out messages to
|
|
103
|
+
* different destinations such as the terminal, error.log file, and all.log file. The logger instance
|
|
104
|
+
* also has a method `setUpInfo` attached to it for setting up additional information.
|
|
105
|
+
* @memberof Logger
|
|
106
|
+
*/
|
|
107
|
+
const loggerFactory = (meta = { url: '' }) => {
|
|
108
|
+
meta = meta.url.split('/').pop();
|
|
109
|
+
// Define which transports the logger must use to print out messages.
|
|
110
|
+
// In this example, we are using three different transports
|
|
111
|
+
const transports = [
|
|
112
|
+
// Allow the use the terminal to print the messages
|
|
113
|
+
new winston.transports.Console(),
|
|
114
|
+
// Allow to print all the error level messages inside the error.log file
|
|
115
|
+
// new winston.transports.File({
|
|
116
|
+
// filename: `logs/${meta}/error.log`,
|
|
117
|
+
// level: 'error',
|
|
118
|
+
// }),
|
|
119
|
+
// Allow to print all the error message inside the all.log file
|
|
120
|
+
// (also the error log that are also printed inside the error.log(
|
|
121
|
+
new winston.transports.File({ filename: `logs/${meta}/all.log` }),
|
|
122
|
+
];
|
|
123
|
+
|
|
124
|
+
// Create the logger instance that has to be exported
|
|
125
|
+
// and used to log messages.
|
|
126
|
+
const logger = winston.createLogger({
|
|
127
|
+
defaultMeta: meta,
|
|
128
|
+
level: level(),
|
|
129
|
+
levels,
|
|
130
|
+
format: format(meta),
|
|
131
|
+
transports,
|
|
132
|
+
// exceptionHandlers: [new winston.transports.File({ filename: 'exceptions.log' })],
|
|
133
|
+
// rejectionHandlers: [new winston.transports.File({ filename: 'rejections.log' })],
|
|
134
|
+
// exitOnError: false,
|
|
135
|
+
});
|
|
136
|
+
logger.setUpInfo = async () => {
|
|
137
|
+
await setUpInfo(logger);
|
|
138
|
+
};
|
|
139
|
+
return logger;
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* The `loggerMiddleware` function creates a middleware for logging HTTP requests using Morgan with
|
|
144
|
+
* custom message format and options.
|
|
145
|
+
* @param meta - The `meta` parameter in the `loggerMiddleware` function is an object that contains
|
|
146
|
+
* information about the request URL. It has a default value of an empty object `{ url: '' }`. This
|
|
147
|
+
* object is used to provide additional metadata for logging purposes.
|
|
148
|
+
* @returns {Handler<any, any>} The `loggerMiddleware` function returns a middleware function that uses the Morgan library
|
|
149
|
+
* to log HTTP request information. The middleware function formats the log message using predefined
|
|
150
|
+
* tokens provided by Morgan and custom tokens like `:host` to include specific request details. The
|
|
151
|
+
* log message format includes information such as remote address, HTTP method, host, URL, status code,
|
|
152
|
+
* content length, and response time in milliseconds. The middleware
|
|
153
|
+
* @memberof Logger
|
|
154
|
+
*/
|
|
155
|
+
const loggerMiddleware = (meta = { url: '' }) => {
|
|
156
|
+
const stream = {
|
|
157
|
+
// Use the http severity
|
|
158
|
+
write: (message) => loggerFactory(meta).http(message),
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
const skip = (req, res) => process.env.NODE_ENV === 'production';
|
|
162
|
+
|
|
163
|
+
morgan.token('host', function (req, res) {
|
|
164
|
+
return req.headers['host'];
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
return morgan(
|
|
168
|
+
// Define message format string (this is the default one).
|
|
169
|
+
// The message format is made from tokens, and each token is
|
|
170
|
+
// defined inside the Morgan library.
|
|
171
|
+
// You can create your custom token to show what do you want from a request.
|
|
172
|
+
`:remote-addr :method :host:url :status :res[content-length] - :response-time ms`,
|
|
173
|
+
// Options: in this case, I overwrote the stream and the skip logic.
|
|
174
|
+
// See the methods above.
|
|
175
|
+
{ stream, skip },
|
|
176
|
+
);
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
const underpostASCII = () => `
|
|
180
|
+
|
|
181
|
+
██╗░░░██╗███╗░░██╗██████╗░███████╗██████╗░██████╗░░█████╗░░██████╗████████╗
|
|
182
|
+
██║░░░██║████╗░██║██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔════╝╚══██╔══╝
|
|
183
|
+
██║░░░██║██╔██╗██║██║░░██║█████╗░░██████╔╝██████╔╝██║░░██║╚█████╗░░░░██║░░░
|
|
184
|
+
██║░░░██║██║╚████║██║░░██║██╔══╝░░██╔══██╗██╔═══╝░██║░░██║░╚═══██╗░░░██║░░░
|
|
185
|
+
╚██████╔╝██║░╚███║██████╔╝███████╗██║░░██║██║░░░░░╚█████╔╝██████╔╝░░░██║░░░
|
|
186
|
+
░╚═════╝░╚═╝░░╚══╝╚═════╝░╚══════╝╚═╝░░╚═╝╚═╝░░░░░░╚════╝░╚═════╝░░░░╚═╝░░░
|
|
187
|
+
`;
|
|
188
|
+
|
|
189
|
+
const actionInitLog = () =>
|
|
190
|
+
console.log(
|
|
191
|
+
underpostASCII() +
|
|
192
|
+
`
|
|
193
|
+
https://www.nexodev.org/docs
|
|
194
|
+
`,
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
export { loggerFactory, loggerMiddleware, setUpInfo, underpostASCII, actionInitLog };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import Underpost from '../index.js';
|
|
2
|
+
import { actionInitLog, loggerFactory } from './logger.js';
|
|
3
|
+
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
|
|
6
|
+
const logRuntimeRouter = () => {
|
|
7
|
+
const displayLog = {};
|
|
8
|
+
|
|
9
|
+
for (const host of Object.keys(Underpost.deployNetwork))
|
|
10
|
+
for (const path of Object.keys(Underpost.deployNetwork[host]))
|
|
11
|
+
displayLog[Underpost.deployNetwork[host][path].publicHost] = Underpost.deployNetwork[host][path].local;
|
|
12
|
+
|
|
13
|
+
logger.info('Runtime network', displayLog);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const listenServerFactory = (logic = async () => {}) => {
|
|
17
|
+
return {
|
|
18
|
+
listen: async (...args) => (
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
const message = 'Listen server factory timeout';
|
|
21
|
+
logger.error(message);
|
|
22
|
+
throw new Error(message);
|
|
23
|
+
}, 80000000), // ~ 55 days
|
|
24
|
+
(logic ? await logic(...args) : undefined, args[1]())
|
|
25
|
+
),
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const listenPortController = async (server, port, metadata) =>
|
|
30
|
+
new Promise((resolve) => {
|
|
31
|
+
try {
|
|
32
|
+
if (port === ':') {
|
|
33
|
+
server.listen(port, actionInitLog);
|
|
34
|
+
return resolve(true);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const { host, path, client, runtime, meta } = metadata;
|
|
38
|
+
const error = [];
|
|
39
|
+
if (port === undefined) error.push(`port`);
|
|
40
|
+
if (host === undefined) error.push(`host`);
|
|
41
|
+
if (path === undefined) error.push(`path`);
|
|
42
|
+
if (client === undefined) error.push(`client`);
|
|
43
|
+
if (runtime === undefined) error.push(`runtime`);
|
|
44
|
+
if (meta === undefined) error.push(`meta`);
|
|
45
|
+
if (error.length > 0) throw new Error('Listen port controller requires values: ' + error.join(', '));
|
|
46
|
+
|
|
47
|
+
server.listen(port, () => {
|
|
48
|
+
if (!Underpost.deployNetwork[host]) Underpost.deployNetwork[host] = {};
|
|
49
|
+
Underpost.deployNetwork[host][path] = {
|
|
50
|
+
meta,
|
|
51
|
+
client,
|
|
52
|
+
runtime,
|
|
53
|
+
port,
|
|
54
|
+
publicHost:
|
|
55
|
+
port === 80
|
|
56
|
+
? `http://${host}${path}`
|
|
57
|
+
: port === 443
|
|
58
|
+
? `https://${host}${path}`
|
|
59
|
+
: `http://${host}:${port}${path}`,
|
|
60
|
+
local: `http://localhost:${port}${path}`,
|
|
61
|
+
apis: metadata.apis,
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
return resolve(true);
|
|
65
|
+
});
|
|
66
|
+
} catch (error) {
|
|
67
|
+
logger.error(error, { metadata, port, stack: error.stack });
|
|
68
|
+
resolve(false);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export { listenPortController, logRuntimeRouter, listenServerFactory };
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provides utilities and engine logic for processing and managing Cyberia Online's object layer assets (skins, floors, weapons, etc.).
|
|
3
|
+
* @module src/server/object-layer.js
|
|
4
|
+
* @namespace CyberiaObjectLayer
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import dotenv from 'dotenv';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import { PNG } from 'pngjs';
|
|
10
|
+
import sharp from 'sharp';
|
|
11
|
+
import { Jimp, intToRGBA, rgbaToInt } from 'jimp';
|
|
12
|
+
|
|
13
|
+
import { range } from '../client/components/core/CommonJs.js';
|
|
14
|
+
import { random } from '../client/components/core/CommonJs.js';
|
|
15
|
+
import { loggerFactory } from '../server/logger.js';
|
|
16
|
+
|
|
17
|
+
const logger = loggerFactory(import.meta);
|
|
18
|
+
|
|
19
|
+
dotenv.config({ path: `./engine-private/conf/dd-cyberia/.env.production`, override: true });
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {Object} ObjectLayerCallbackPayload
|
|
23
|
+
* @property {string} path - The full file path to the image.
|
|
24
|
+
* @property {string} objectLayerType - The type of object layer (e.g., 'skin', 'floor').
|
|
25
|
+
* @property {string} objectLayerId - The unique ID of the object layer asset.
|
|
26
|
+
* @property {string} direction - The direction folder name (e.g., '08', '12').
|
|
27
|
+
* @memberof CyberiaObjectLayer
|
|
28
|
+
* @property {string} frame - The frame file name.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
export class ObjectLayerEngine {
|
|
32
|
+
/**
|
|
33
|
+
* @memberof CyberiaObjectLayer
|
|
34
|
+
* @static
|
|
35
|
+
* @description Iterates through the directory structure of object layer PNG assets for a given type.
|
|
36
|
+
* @param {string} [objectLayerType='skin'] - The type of object layer to iterate over (e.g., 'skin', 'floor').
|
|
37
|
+
* @param {function(ObjectLayerCallbackPayload): Promise<void>} [callback=() => {}] - The async function to execute for each image file found.
|
|
38
|
+
* @returns {Promise<void>}
|
|
39
|
+
* @memberof CyberiaObjectLayer
|
|
40
|
+
*/
|
|
41
|
+
static async pngDirectoryIteratorByObjectLayerType(
|
|
42
|
+
objectLayerType = 'skin',
|
|
43
|
+
callback = ({ path, objectLayerType, objectLayerId, direction, frame }) => {},
|
|
44
|
+
) {
|
|
45
|
+
const assetRoot = `./src/client/public/cyberia/assets/${objectLayerType}`;
|
|
46
|
+
if (!fs.existsSync(assetRoot)) {
|
|
47
|
+
logger.warn(`Asset root not found for type: ${objectLayerType}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
for (const objectLayerId of await fs.readdir(assetRoot)) {
|
|
52
|
+
const idPath = `${assetRoot}/${objectLayerId}`;
|
|
53
|
+
if (!fs.statSync(idPath).isDirectory()) continue;
|
|
54
|
+
|
|
55
|
+
for (const direction of await fs.readdir(idPath)) {
|
|
56
|
+
const dirFolder = `${idPath}/${direction}`;
|
|
57
|
+
if (!fs.statSync(dirFolder).isDirectory()) continue;
|
|
58
|
+
|
|
59
|
+
for (const frame of await fs.readdir(dirFolder)) {
|
|
60
|
+
const imageFilePath = `${dirFolder}/${frame}`;
|
|
61
|
+
await callback({ path: imageFilePath, objectLayerType, objectLayerId, direction, frame });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @memberof CyberiaObjectLayer
|
|
69
|
+
* @static
|
|
70
|
+
* @description Asynchronously reads a PNG file and resolves with its raw bitmap data, width, and height.
|
|
71
|
+
* @param {string} filePath - The path to the PNG file.
|
|
72
|
+
* @returns {Promise<{width: number, height: number, data: Buffer} | {error: true, message: string}>} - The image data or an error object.
|
|
73
|
+
* @memberof CyberiaObjectLayer
|
|
74
|
+
*/
|
|
75
|
+
static readPngAsync(filePath) {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
fs.createReadStream(filePath)
|
|
78
|
+
.pipe(new PNG())
|
|
79
|
+
.on('parsed', function () {
|
|
80
|
+
resolve({
|
|
81
|
+
width: this.width,
|
|
82
|
+
height: this.height,
|
|
83
|
+
data: Buffer.from(this.data),
|
|
84
|
+
});
|
|
85
|
+
})
|
|
86
|
+
.on('error', (error) => {
|
|
87
|
+
logger.error(`Error reading PNG file: ${filePath}`, error);
|
|
88
|
+
// Resolve with a specific error indicator instead of rejecting
|
|
89
|
+
resolve({ error: true, message: error.message });
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @memberof CyberiaObjectLayer
|
|
96
|
+
* @static
|
|
97
|
+
* @description Processes an image file (PNG or GIF) to generate a frame matrix and a color palette (map_color).
|
|
98
|
+
* It quantizes the image based on a factor derived from image height (mazeFactor).
|
|
99
|
+
* @param {string} path - The path to the image file.
|
|
100
|
+
* @param {Array<number[]>} [colors=[]] - The existing color palette array to append new colors to.
|
|
101
|
+
* @returns {Promise<{frame: number[][], colors: Array<number[]>}>} - The frame matrix and the updated color palette.
|
|
102
|
+
* @memberof CyberiaObjectLayer
|
|
103
|
+
*/
|
|
104
|
+
static async frameFactory(path, colors = []) {
|
|
105
|
+
const frame = [];
|
|
106
|
+
try {
|
|
107
|
+
let image;
|
|
108
|
+
|
|
109
|
+
if (path.endsWith('.gif')) {
|
|
110
|
+
image = await Jimp.read(path);
|
|
111
|
+
// remove gif file
|
|
112
|
+
fs.removeSync(path);
|
|
113
|
+
// save image replacing gif for png
|
|
114
|
+
const pngPath = path.replace('.gif', '.png');
|
|
115
|
+
await image.write(pngPath);
|
|
116
|
+
} else {
|
|
117
|
+
const png = await ObjectLayerEngine.readPngAsync(path);
|
|
118
|
+
if (png.error) {
|
|
119
|
+
throw new Error(`Failed to read PNG: ${png.message}`);
|
|
120
|
+
}
|
|
121
|
+
image = new Jimp(png);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const mazeFactor = parseInt(image.bitmap.height / 24);
|
|
125
|
+
let _y = -1;
|
|
126
|
+
for (const y of range(0, image.bitmap.height - 1)) {
|
|
127
|
+
if (y % mazeFactor === 0) {
|
|
128
|
+
_y++;
|
|
129
|
+
if (!frame[_y]) frame[_y] = [];
|
|
130
|
+
}
|
|
131
|
+
let _x = -1;
|
|
132
|
+
for (const x of range(0, image.bitmap.width - 1)) {
|
|
133
|
+
const rgba = Object.values(intToRGBA(image.getPixelColor(x, y)));
|
|
134
|
+
if (y % mazeFactor === 0 && x % mazeFactor === 0) {
|
|
135
|
+
_x++;
|
|
136
|
+
const indexColor = colors.findIndex(
|
|
137
|
+
(c) => c[0] === rgba[0] && c[1] === rgba[1] && c[2] === rgba[2] && c[3] === rgba[3],
|
|
138
|
+
);
|
|
139
|
+
if (indexColor === -1) {
|
|
140
|
+
colors.push(rgba);
|
|
141
|
+
frame[_y][_x] = colors.length - 1;
|
|
142
|
+
} else {
|
|
143
|
+
frame[_y][_x] = indexColor;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
} catch (error) {
|
|
149
|
+
logger.error(`Failed to process image ${path}:`, error);
|
|
150
|
+
}
|
|
151
|
+
return { frame, colors };
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @memberof CyberiaObjectLayer
|
|
156
|
+
* @static
|
|
157
|
+
* @description Converts a numerical folder direction (e.g., '08', '14') into an array of corresponding keyframe names (e.g., 'down_idle', 'left_walking').
|
|
158
|
+
* @param {string} direction - The numerical direction string.
|
|
159
|
+
* @returns {string[]} - An array of keyframe direction names.
|
|
160
|
+
* @memberof CyberiaObjectLayer
|
|
161
|
+
*/
|
|
162
|
+
static getKeyFramesDirectionsFromNumberFolderDirection(direction) {
|
|
163
|
+
let objectLayerFrameDirections = [];
|
|
164
|
+
|
|
165
|
+
switch (direction) {
|
|
166
|
+
case '08':
|
|
167
|
+
objectLayerFrameDirections = ['down_idle', 'none_idle', 'default_idle'];
|
|
168
|
+
break;
|
|
169
|
+
case '18':
|
|
170
|
+
objectLayerFrameDirections = ['down_walking'];
|
|
171
|
+
break;
|
|
172
|
+
case '02':
|
|
173
|
+
objectLayerFrameDirections = ['up_idle'];
|
|
174
|
+
break;
|
|
175
|
+
case '12':
|
|
176
|
+
objectLayerFrameDirections = ['up_walking'];
|
|
177
|
+
break;
|
|
178
|
+
case '04':
|
|
179
|
+
objectLayerFrameDirections = ['left_idle', 'up_left_idle', 'down_left_idle'];
|
|
180
|
+
break;
|
|
181
|
+
case '14':
|
|
182
|
+
objectLayerFrameDirections = ['left_walking', 'up_left_walking', 'down_left_walking'];
|
|
183
|
+
break;
|
|
184
|
+
case '06':
|
|
185
|
+
objectLayerFrameDirections = ['right_idle', 'up_right_idle', 'down_right_idle'];
|
|
186
|
+
break;
|
|
187
|
+
case '16':
|
|
188
|
+
objectLayerFrameDirections = ['right_walking', 'up_right_walking', 'down_right_walking'];
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
return objectLayerFrameDirections;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* @memberof CyberiaObjectLayer
|
|
197
|
+
* @static
|
|
198
|
+
* @description Builds a PNG image file from a tile matrix and color map using Jimp and Sharp.
|
|
199
|
+
* @param {Object} options - Options object.
|
|
200
|
+
* @param {Object} options.tile - The tile data.
|
|
201
|
+
* @param {Array<number[]>} options.tile.map_color - The color palette.
|
|
202
|
+
* @param {number[][]} options.tile.frame_matrix - The matrix of color indices.
|
|
203
|
+
* @param {string} options.imagePath - The output path for the generated image.
|
|
204
|
+
* @param {number} [options.cellPixelDim=20] - The pixel dimension of each cell in the matrix.
|
|
205
|
+
* @param {function(number, number, number[]): number} [options.opacityFilter] - Function to filter opacity (ignored in this implementation).
|
|
206
|
+
* @returns {Promise<void>}
|
|
207
|
+
* @memberof CyberiaObjectLayer
|
|
208
|
+
*/
|
|
209
|
+
static async buildImgFromTile(
|
|
210
|
+
options = {
|
|
211
|
+
tile: { map_color: null, frame_matrix: null },
|
|
212
|
+
imagePath: '',
|
|
213
|
+
cellPixelDim: 20,
|
|
214
|
+
opacityFilter: (x, y, color) => 255,
|
|
215
|
+
},
|
|
216
|
+
) {
|
|
217
|
+
const { tile, imagePath, cellPixelDim } = options;
|
|
218
|
+
const mainMatrix = tile.frame_matrix;
|
|
219
|
+
if (!mainMatrix || mainMatrix.length === 0 || mainMatrix[0].length === 0) {
|
|
220
|
+
logger.error(`Cannot build image from empty or invalid frame_matrix for path: ${imagePath}`);
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
const sharpOptions = {
|
|
225
|
+
create: {
|
|
226
|
+
width: cellPixelDim * mainMatrix[0].length,
|
|
227
|
+
height: cellPixelDim * mainMatrix.length,
|
|
228
|
+
channels: 4,
|
|
229
|
+
background: { r: 0, g: 0, b: 0, alpha: 0 }, // transparent background
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
let image = await sharp(sharpOptions).png().toBuffer();
|
|
234
|
+
fs.writeFileSync(imagePath, image);
|
|
235
|
+
image = await Jimp.read(imagePath);
|
|
236
|
+
|
|
237
|
+
for (let y = 0; y < mainMatrix.length; y++) {
|
|
238
|
+
for (let x = 0; x < mainMatrix[y].length; x++) {
|
|
239
|
+
const colorIndex = mainMatrix[y][x];
|
|
240
|
+
if (colorIndex === null || colorIndex === undefined) continue;
|
|
241
|
+
|
|
242
|
+
const color = tile.map_color[colorIndex];
|
|
243
|
+
if (!color) continue;
|
|
244
|
+
|
|
245
|
+
const rgbaColor = color.length === 4 ? color : [...color, 255]; // Ensure alpha channel
|
|
246
|
+
|
|
247
|
+
for (let dy = 0; dy < cellPixelDim; dy++) {
|
|
248
|
+
for (let dx = 0; dx < cellPixelDim; dx++) {
|
|
249
|
+
const pixelX = x * cellPixelDim + dx;
|
|
250
|
+
const pixelY = y * cellPixelDim + dy;
|
|
251
|
+
image.setPixelColor(rgbaToInt(...rgbaColor), pixelX, pixelY);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
await image.write(imagePath);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* @memberof CyberiaObjectLayer
|
|
262
|
+
* @static
|
|
263
|
+
* @description Generates a random set of character statistics for an item, with values between 0 and 10.
|
|
264
|
+
* @returns {{effect: number, resistance: number, agility: number, range: number, intelligence: number, utility: number}} - The random stats object.
|
|
265
|
+
* @memberof CyberiaObjectLayer
|
|
266
|
+
*/
|
|
267
|
+
static generateRandomStats() {
|
|
268
|
+
return {
|
|
269
|
+
effect: random(0, 10),
|
|
270
|
+
resistance: random(0, 10),
|
|
271
|
+
agility: random(0, 10),
|
|
272
|
+
range: random(0, 10),
|
|
273
|
+
intelligence: random(0, 10),
|
|
274
|
+
utility: random(0, 10),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* @memberof CyberiaObjectLayer
|
|
281
|
+
* @constant
|
|
282
|
+
* @description Mapping of item type names to numerical IDs.
|
|
283
|
+
* @type {{floor: number, skin: number, weapon: number, skill: number, coin: number}}
|
|
284
|
+
*/
|
|
285
|
+
export const itemTypes = { floor: 0, skin: 1, weapon: 2, skill: 3, coin: 4 };
|
|
286
|
+
|
|
287
|
+
// Export equivalent for backward compatibility with existing destructured imports.
|
|
288
|
+
export const pngDirectoryIteratorByObjectLayerType = ObjectLayerEngine.pngDirectoryIteratorByObjectLayerType;
|
|
289
|
+
export const readPngAsync = ObjectLayerEngine.readPngAsync;
|
|
290
|
+
export const frameFactory = ObjectLayerEngine.frameFactory;
|
|
291
|
+
export const getKeyFramesDirectionsFromNumberFolderDirection =
|
|
292
|
+
ObjectLayerEngine.getKeyFramesDirectionsFromNumberFolderDirection;
|
|
293
|
+
export const buildImgFromTile = ObjectLayerEngine.buildImgFromTile;
|
|
294
|
+
export const generateRandomStats = ObjectLayerEngine.generateRandomStats;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module for peerjs server management.
|
|
3
|
+
* Initializes and configures the PeerJS server instance, typically running
|
|
4
|
+
* alongside a main Node.js application.
|
|
5
|
+
*
|
|
6
|
+
* @module src/server/peer.js
|
|
7
|
+
* @namespace Peer
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { PeerServer } from 'peer';
|
|
11
|
+
import dotenv from 'dotenv';
|
|
12
|
+
import { loggerFactory } from './logger.js';
|
|
13
|
+
import UnderpostStartUp from './start.js';
|
|
14
|
+
|
|
15
|
+
dotenv.config();
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Logger instance for this module, utilizing the framework's factory.
|
|
19
|
+
* @type {function(*): void}
|
|
20
|
+
* @memberof Peer
|
|
21
|
+
* @private
|
|
22
|
+
*/
|
|
23
|
+
const logger = loggerFactory(import.meta);
|
|
24
|
+
|
|
25
|
+
// Documentation references:
|
|
26
|
+
// https://github.com/peers/peerjs
|
|
27
|
+
// https://github.com/peers/peerjs-server
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Creates and starts a configured PeerJS server instance.
|
|
31
|
+
*
|
|
32
|
+
* This function handles port configuration, CORS origins, and paths, then uses
|
|
33
|
+
* a listener factory to start the server.
|
|
34
|
+
*
|
|
35
|
+
* @async
|
|
36
|
+
* @function createPeerServer
|
|
37
|
+
* @memberof Peer
|
|
38
|
+
* @param {object} config - Configuration object for the PeerJS server setup.
|
|
39
|
+
* @param {number} config.port - The primary port on which the PeerJS server will listen.
|
|
40
|
+
* @param {string[]} config.origins - An array of allowed domain origins for Cross-Origin Resource Sharing (CORS).
|
|
41
|
+
* @param {string} config.path - The base path for the API. The PeerJS path ('/peer') will be appended to this.
|
|
42
|
+
* @returns {Promise<object>} A promise that resolves to an object containing the final configuration and the server instance.
|
|
43
|
+
* @returns {import('peer').IConfig} return.options - The final options object used to create the PeerServer.
|
|
44
|
+
* @returns {import('peer').Server} return.peerServer - The created and listening PeerServer instance (wrapped by the listening server factory).
|
|
45
|
+
* @returns {object} return.meta - The module's import meta object (`import.meta`).
|
|
46
|
+
*/
|
|
47
|
+
const createPeerServer = async ({ port, origins, path }) => {
|
|
48
|
+
logger.info('origins', origins);
|
|
49
|
+
/** @type {import('peer').IConfig} */
|
|
50
|
+
const options = {
|
|
51
|
+
port,
|
|
52
|
+
// Ensure the path is correctly formatted, handling the root path case
|
|
53
|
+
path: `${path === '/' ? '' : path}/peer`,
|
|
54
|
+
corsOptions: {
|
|
55
|
+
origin: origins,
|
|
56
|
+
},
|
|
57
|
+
proxied: true,
|
|
58
|
+
// key: fs.readFileSync(''), // Example for HTTPS/SSL
|
|
59
|
+
// cert: fs.readFileSync(''), // Example for HTTPS/SSL
|
|
60
|
+
// ca: fs.readFileSync(''), // Example for HTTPS/SSL
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Use the framework's factory to listen on the server, ensuring graceful startup/shutdown
|
|
64
|
+
const peerServer = UnderpostStartUp.API.listenServerFactory(async () => PeerServer(options));
|
|
65
|
+
|
|
66
|
+
return { options, peerServer, meta: import.meta };
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export { createPeerServer };
|