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
package/src/cli/env.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment module for managing the environment variables of the underpost root
|
|
3
|
+
* @module src/cli/env.js
|
|
4
|
+
* @namespace UnderpostEnv
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { getNpmRootPath, writeEnv } from '../server/conf.js';
|
|
8
|
+
import fs from 'fs-extra';
|
|
9
|
+
import { loggerFactory } from '../server/logger.js';
|
|
10
|
+
import dotenv from 'dotenv';
|
|
11
|
+
|
|
12
|
+
dotenv.config();
|
|
13
|
+
|
|
14
|
+
const logger = loggerFactory(import.meta);
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @class UnderpostEnv
|
|
18
|
+
* @description Manages the environment variables of the underpost root.
|
|
19
|
+
* @memberof UnderpostEnv
|
|
20
|
+
*/
|
|
21
|
+
class UnderpostRootEnv {
|
|
22
|
+
static API = {
|
|
23
|
+
/**
|
|
24
|
+
* @method set
|
|
25
|
+
* @description Sets an environment variable in the underpost root environment.
|
|
26
|
+
* @param {string} key - The key of the environment variable to set.
|
|
27
|
+
* @param {string} value - The value of the environment variable to set.
|
|
28
|
+
* @memberof UnderpostEnv
|
|
29
|
+
*/
|
|
30
|
+
set(key, value) {
|
|
31
|
+
const exeRootPath = `${getNpmRootPath()}/underpost`;
|
|
32
|
+
const envPath = `${exeRootPath}/.env`;
|
|
33
|
+
let env = {};
|
|
34
|
+
if (fs.existsSync(envPath)) env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
|
|
35
|
+
env[key] = value;
|
|
36
|
+
writeEnv(envPath, env);
|
|
37
|
+
},
|
|
38
|
+
/**
|
|
39
|
+
* @method delete
|
|
40
|
+
* @description Deletes an environment variable from the underpost root environment.
|
|
41
|
+
* @param {string} key - The key of the environment variable to delete.
|
|
42
|
+
* @memberof UnderpostEnv
|
|
43
|
+
*/
|
|
44
|
+
delete(key) {
|
|
45
|
+
const exeRootPath = `${getNpmRootPath()}/underpost`;
|
|
46
|
+
const envPath = `${exeRootPath}/.env`;
|
|
47
|
+
let env = {};
|
|
48
|
+
if (fs.existsSync(envPath)) env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
|
|
49
|
+
delete env[key];
|
|
50
|
+
writeEnv(envPath, env);
|
|
51
|
+
},
|
|
52
|
+
/**
|
|
53
|
+
* @method get
|
|
54
|
+
* @description Gets an environment variable from the underpost root environment.
|
|
55
|
+
* @param {string} key - The key of the environment variable to get.
|
|
56
|
+
* @param {string} value - The value of the environment variable to get.
|
|
57
|
+
* @param {object} options - Options for getting the environment variable.
|
|
58
|
+
* @param {boolean} [options.plain=false] - If true, returns the environment variable value as a string.
|
|
59
|
+
* @memberof UnderpostEnv
|
|
60
|
+
*/
|
|
61
|
+
get(key, value, options = { plain: false }) {
|
|
62
|
+
const exeRootPath = `${getNpmRootPath()}/underpost`;
|
|
63
|
+
const envPath = `${exeRootPath}/.env`;
|
|
64
|
+
if (!fs.existsSync(envPath)) {
|
|
65
|
+
logger.error(`Unable to find underpost root environment`);
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
const env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
|
|
69
|
+
options?.plain === true ? console.log(env[key]) : logger.info(`${key}(${typeof env[key]})`, env[key]);
|
|
70
|
+
return env[key];
|
|
71
|
+
},
|
|
72
|
+
/**
|
|
73
|
+
* @method list
|
|
74
|
+
* @description Lists all environment variables in the underpost root environment.
|
|
75
|
+
* @memberof UnderpostEnv
|
|
76
|
+
*/
|
|
77
|
+
list() {
|
|
78
|
+
const exeRootPath = `${getNpmRootPath()}/underpost`;
|
|
79
|
+
const envPath = `${exeRootPath}/.env`;
|
|
80
|
+
if (!fs.existsSync(envPath)) {
|
|
81
|
+
logger.error(`Unable to find underpost root environment`);
|
|
82
|
+
return {};
|
|
83
|
+
}
|
|
84
|
+
const env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
|
|
85
|
+
logger.info('underpost root', env);
|
|
86
|
+
return env;
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* @method clean
|
|
90
|
+
* @description Cleans the underpost root environment by removing the environment file.
|
|
91
|
+
* @memberof UnderpostEnv
|
|
92
|
+
*/
|
|
93
|
+
clean() {
|
|
94
|
+
const exeRootPath = `${getNpmRootPath()}/underpost`;
|
|
95
|
+
const envPath = `${exeRootPath}/.env`;
|
|
96
|
+
fs.removeSync(envPath);
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export default UnderpostRootEnv;
|
package/src/cli/fs.js
ADDED
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File storage module for managing file operations using Cloudinary.
|
|
3
|
+
* @module src/cli/fs.js
|
|
4
|
+
* @namespace UnderpostFileStorage
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { v2 as cloudinary } from 'cloudinary';
|
|
8
|
+
import { loggerFactory } from '../server/logger.js';
|
|
9
|
+
import dotenv from 'dotenv';
|
|
10
|
+
import AdmZip from 'adm-zip';
|
|
11
|
+
import * as dir from 'path';
|
|
12
|
+
import fs from 'fs-extra';
|
|
13
|
+
import { Downloader } from '../server/downloader.js';
|
|
14
|
+
import UnderpostRepository from './repository.js';
|
|
15
|
+
import { shellExec } from '../server/process.js';
|
|
16
|
+
dotenv.config();
|
|
17
|
+
|
|
18
|
+
const logger = loggerFactory(import.meta);
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @class UnderpostFileStorage
|
|
22
|
+
* @description Manages file storage operations using Cloudinary.
|
|
23
|
+
* This class provides a set of static methods to upload, pull, and delete files
|
|
24
|
+
* from Cloudinary, as well as manage a local storage configuration file.
|
|
25
|
+
*/
|
|
26
|
+
class UnderpostFileStorage {
|
|
27
|
+
static API = {
|
|
28
|
+
/**
|
|
29
|
+
* @method cloudinaryConfig
|
|
30
|
+
* @description Configures the Cloudinary client with environment variables.
|
|
31
|
+
* @memberof UnderpostFileStorage
|
|
32
|
+
*/
|
|
33
|
+
cloudinaryConfig() {
|
|
34
|
+
// https://console.cloudinary.com/
|
|
35
|
+
cloudinary.config({
|
|
36
|
+
cloud_name: process.env.CLOUDINARY_CLOUD_NAME,
|
|
37
|
+
api_key: process.env.CLOUDINARY_API_KEY,
|
|
38
|
+
api_secret: process.env.CLOUDINARY_API_SECRET,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
/**
|
|
42
|
+
* @method getStorageConf
|
|
43
|
+
* @description Retrieves the storage configuration for a specific deployment.
|
|
44
|
+
* @param {object} options - An object containing deployment-specific options.
|
|
45
|
+
* @param {string} options.deployId - The identifier for the deployment.
|
|
46
|
+
* @param {string} [options.storageFilePath] - The path to the storage configuration file.
|
|
47
|
+
* @returns {object} An object containing the storage configuration and storage file path.
|
|
48
|
+
* @memberof UnderpostFileStorage
|
|
49
|
+
*/
|
|
50
|
+
getStorageConf(options) {
|
|
51
|
+
let storage, storageConf;
|
|
52
|
+
if (options.deployId && typeof options.deployId === 'string') {
|
|
53
|
+
storageConf = options.storageFilePath ?? `./engine-private/conf/${options.deployId}/storage.json`;
|
|
54
|
+
if (!fs.existsSync(storageConf)) fs.writeFileSync(storageConf, JSON.stringify({}), 'utf8');
|
|
55
|
+
storage = JSON.parse(fs.readFileSync(storageConf, 'utf8'));
|
|
56
|
+
}
|
|
57
|
+
return { storage, storageConf };
|
|
58
|
+
},
|
|
59
|
+
/**
|
|
60
|
+
* @method writeStorageConf
|
|
61
|
+
* @description Writes the storage configuration to a file.
|
|
62
|
+
* @param {object} storage - The storage configuration object.
|
|
63
|
+
* @param {string} storageConf - The path to the storage configuration file.
|
|
64
|
+
* @memberof UnderpostFileStorage
|
|
65
|
+
*/
|
|
66
|
+
writeStorageConf(storage, storageConf) {
|
|
67
|
+
if (storage) fs.writeFileSync(storageConf, JSON.stringify(storage, null, 4), 'utf8');
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* @method recursiveCallback
|
|
71
|
+
* @description Recursively processes files and directories based on the provided options.
|
|
72
|
+
* @param {string} path - The path to the directory to process.
|
|
73
|
+
* @param {object} [options] - An object containing options for the recursive callback.
|
|
74
|
+
* @param {boolean} [options.rm=false] - Flag to remove files and directories.
|
|
75
|
+
* @param {boolean} [options.recursive=false] - Flag to process directories recursively.
|
|
76
|
+
* @param {string} [options.deployId=''] - The identifier for the deployment.
|
|
77
|
+
* @param {boolean} [options.force=false] - Flag to force file operations.
|
|
78
|
+
* @param {boolean} [options.pull=false] - Flag to pull files from storage.
|
|
79
|
+
* @param {boolean} [options.git=false] - Flag to use Git for file operations.
|
|
80
|
+
* @param {string} [options.storageFilePath=''] - The path to the storage configuration file.
|
|
81
|
+
* @returns {Promise<void>} A promise that resolves when the recursive callback is complete.
|
|
82
|
+
* @memberof UnderpostFileStorage
|
|
83
|
+
*/
|
|
84
|
+
async recursiveCallback(
|
|
85
|
+
path,
|
|
86
|
+
options = {
|
|
87
|
+
rm: false,
|
|
88
|
+
recursive: false,
|
|
89
|
+
deployId: '',
|
|
90
|
+
force: false,
|
|
91
|
+
pull: false,
|
|
92
|
+
git: false,
|
|
93
|
+
storageFilePath: '',
|
|
94
|
+
},
|
|
95
|
+
) {
|
|
96
|
+
const { storage, storageConf } = UnderpostFileStorage.API.getStorageConf(options);
|
|
97
|
+
const deleteFiles = options.pull === true ? [] : UnderpostRepository.API.getDeleteFiles(path);
|
|
98
|
+
for (const relativePath of deleteFiles) {
|
|
99
|
+
const _path = path + '/' + relativePath;
|
|
100
|
+
if (_path in storage) {
|
|
101
|
+
await UnderpostFileStorage.API.delete(_path);
|
|
102
|
+
delete storage[_path];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (options.pull === true) {
|
|
106
|
+
for (const _path of Object.keys(storage)) {
|
|
107
|
+
if (!fs.existsSync(_path) || options.force === true) {
|
|
108
|
+
if (options.force === true && fs.existsSync(_path)) fs.removeSync(_path);
|
|
109
|
+
await UnderpostFileStorage.API.pull(_path, options);
|
|
110
|
+
} else logger.warn(`Pull path already exists`, _path);
|
|
111
|
+
}
|
|
112
|
+
shellExec(`cd ${path} && git init && git add . && git commit -m "Base pull state"`);
|
|
113
|
+
} else {
|
|
114
|
+
const files =
|
|
115
|
+
options.git === true
|
|
116
|
+
? UnderpostRepository.API.getChangedFiles(path)
|
|
117
|
+
: await fs.readdir(path, { recursive: true });
|
|
118
|
+
for (const relativePath of files) {
|
|
119
|
+
const _path = path + '/' + relativePath;
|
|
120
|
+
if (fs.statSync(_path).isDirectory()) {
|
|
121
|
+
if (options.pull === true && !fs.existsSync(_path)) fs.mkdirSync(_path, { recursive: true });
|
|
122
|
+
continue;
|
|
123
|
+
} else if (!(_path in storage) || options.force === true) {
|
|
124
|
+
await UnderpostFileStorage.API.upload(_path, options);
|
|
125
|
+
if (storage) storage[_path] = {};
|
|
126
|
+
} else logger.warn('File already exists', _path);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
UnderpostFileStorage.API.writeStorageConf(storage, storageConf);
|
|
130
|
+
if (options.git === true) {
|
|
131
|
+
shellExec(`cd ${path} && git add .`);
|
|
132
|
+
shellExec(`underpost cmt ${path} feat`);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
/**
|
|
136
|
+
* @method callback
|
|
137
|
+
* @description Orchestrates file storage operations based on the provided options.
|
|
138
|
+
* This method handles file uploads, deletions, and recursive processing of directories.
|
|
139
|
+
* @param {string} path - The path to the file or directory to process.
|
|
140
|
+
* @param {object} [options] - An object containing options for the callback.
|
|
141
|
+
* @param {boolean} [options.rm=false] - Flag to remove files and directories.
|
|
142
|
+
* @param {boolean} [options.recursive=false] - Flag to process directories recursively.
|
|
143
|
+
* @param {string} [options.deployId=''] - The identifier for the deployment.
|
|
144
|
+
* @param {boolean} [options.force=false] - Flag to force file operations.
|
|
145
|
+
* @param {boolean} [options.pull=false] - Flag to pull files from storage.
|
|
146
|
+
* @param {boolean} [options.git=false] - Flag to use Git for file operations.
|
|
147
|
+
* @returns {Promise<void>} A promise that resolves when the callback is complete.
|
|
148
|
+
* @memberof UnderpostFileStorage
|
|
149
|
+
*/
|
|
150
|
+
async callback(
|
|
151
|
+
path,
|
|
152
|
+
options = { rm: false, recursive: false, deployId: '', force: false, pull: false, git: false },
|
|
153
|
+
) {
|
|
154
|
+
if (options.recursive === true || options.git === true)
|
|
155
|
+
return await UnderpostFileStorage.API.recursiveCallback(path, options);
|
|
156
|
+
if (options.pull === true) return await UnderpostFileStorage.API.pull(path, options);
|
|
157
|
+
if (options.rm === true) return await UnderpostFileStorage.API.delete(path, options);
|
|
158
|
+
return await UnderpostFileStorage.API.upload(path, options);
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* @method upload
|
|
162
|
+
* @description Uploads a file to Cloudinary.
|
|
163
|
+
* @param {string} path - The path to the file to upload.
|
|
164
|
+
* @param {object} [options] - An object containing options for the upload.
|
|
165
|
+
* @param {boolean} [options.force=false] - Flag to force file operations.
|
|
166
|
+
* @param {string} [options.storageFilePath=''] - The path to the storage configuration file.
|
|
167
|
+
* @returns {Promise<object>} A promise that resolves to the upload result.
|
|
168
|
+
* @memberof UnderpostFileStorage
|
|
169
|
+
*/
|
|
170
|
+
async upload(
|
|
171
|
+
path,
|
|
172
|
+
options = { rm: false, recursive: false, deployId: '', force: false, pull: false, storageFilePath: '' },
|
|
173
|
+
) {
|
|
174
|
+
UnderpostFileStorage.API.cloudinaryConfig();
|
|
175
|
+
const { storage, storageConf } = UnderpostFileStorage.API.getStorageConf(options);
|
|
176
|
+
// path = UnderpostFileStorage.API.file2Zip(path);
|
|
177
|
+
const uploadResult = await cloudinary.uploader
|
|
178
|
+
.upload(path, {
|
|
179
|
+
public_id: path,
|
|
180
|
+
resource_type: 'raw',
|
|
181
|
+
overwrite: options.force === true ? true : false,
|
|
182
|
+
})
|
|
183
|
+
.catch((error) => {
|
|
184
|
+
logger.error(error, { path, stack: error.stack });
|
|
185
|
+
});
|
|
186
|
+
logger.info('upload result', uploadResult);
|
|
187
|
+
if (storage) storage[path] = {};
|
|
188
|
+
UnderpostFileStorage.API.writeStorageConf(storage, storageConf);
|
|
189
|
+
return uploadResult;
|
|
190
|
+
},
|
|
191
|
+
/**
|
|
192
|
+
* @method pull
|
|
193
|
+
* @description Pulls a file from Cloudinary.
|
|
194
|
+
* @param {string} path - The path to the file to pull.
|
|
195
|
+
* @returns {Promise<void>} A promise that resolves when the file is pulled.
|
|
196
|
+
* @memberof UnderpostFileStorage
|
|
197
|
+
*/
|
|
198
|
+
async pull(path) {
|
|
199
|
+
UnderpostFileStorage.API.cloudinaryConfig();
|
|
200
|
+
const folder = dir.dirname(path);
|
|
201
|
+
if (!fs.existsSync(folder)) fs.mkdirSync(folder, { recursive: true });
|
|
202
|
+
const downloadResult = await cloudinary.utils.download_archive_url({
|
|
203
|
+
public_ids: [path],
|
|
204
|
+
resource_type: 'raw',
|
|
205
|
+
});
|
|
206
|
+
logger.info('download result', downloadResult);
|
|
207
|
+
await Downloader(downloadResult, path + '.zip');
|
|
208
|
+
path = UnderpostFileStorage.API.zip2File(path + '.zip');
|
|
209
|
+
fs.removeSync(path + '.zip');
|
|
210
|
+
},
|
|
211
|
+
async delete(path) {
|
|
212
|
+
UnderpostFileStorage.API.cloudinaryConfig();
|
|
213
|
+
const deleteResult = await cloudinary.api
|
|
214
|
+
.delete_resources([path], { type: 'upload', resource_type: 'raw' })
|
|
215
|
+
.catch((error) => {
|
|
216
|
+
logger.error(error, { path, stack: error.stack });
|
|
217
|
+
});
|
|
218
|
+
logger.info('delete result', deleteResult);
|
|
219
|
+
return deleteResult;
|
|
220
|
+
},
|
|
221
|
+
/**
|
|
222
|
+
* @method file2Zip
|
|
223
|
+
* @description Converts a file to a zip file.
|
|
224
|
+
* @param {string} path - The path to the file to convert.
|
|
225
|
+
* @returns {string} The path to the zip file.
|
|
226
|
+
* @memberof UnderpostFileStorage
|
|
227
|
+
*/
|
|
228
|
+
file2Zip(path) {
|
|
229
|
+
const zip = new AdmZip();
|
|
230
|
+
zip.addLocalFile(path, '/');
|
|
231
|
+
path = path + '.zip';
|
|
232
|
+
zip.writeZip(path);
|
|
233
|
+
return path;
|
|
234
|
+
},
|
|
235
|
+
/**
|
|
236
|
+
* @method zip2File
|
|
237
|
+
* @description Converts a zip file to a file.
|
|
238
|
+
* @param {string} path - The path to the zip file to convert.
|
|
239
|
+
* @returns {string} The path to the file.
|
|
240
|
+
* @memberof UnderpostFileStorage
|
|
241
|
+
*/
|
|
242
|
+
zip2File(path) {
|
|
243
|
+
const zip = new AdmZip(path);
|
|
244
|
+
path = path.replaceAll('.zip', '');
|
|
245
|
+
zip.extractEntryTo(
|
|
246
|
+
/*entry name*/ path.split('/').pop(),
|
|
247
|
+
/*target path*/ dir.dirname(path),
|
|
248
|
+
/*maintainEntryPath*/ false,
|
|
249
|
+
/*overwrite*/ true,
|
|
250
|
+
);
|
|
251
|
+
return path;
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export default UnderpostFileStorage;
|
package/src/cli/image.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image management module for pull, build, creation of docker images and loading them into Kubernetes clusters
|
|
3
|
+
* @module src/cli/image.js
|
|
4
|
+
* @namespace UnderpostImage
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import fs from 'fs-extra';
|
|
8
|
+
import dotenv from 'dotenv';
|
|
9
|
+
import { loggerFactory } from '../server/logger.js';
|
|
10
|
+
import Underpost from '../index.js';
|
|
11
|
+
import { getUnderpostRootPath } from '../server/conf.js';
|
|
12
|
+
import { shellExec } from '../server/process.js';
|
|
13
|
+
|
|
14
|
+
dotenv.config();
|
|
15
|
+
|
|
16
|
+
const logger = loggerFactory(import.meta);
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @class UnderpostImage
|
|
20
|
+
* @description Manages Docker image operations, including pulling, building, and loading images into Kubernetes clusters.
|
|
21
|
+
* This class provides a set of static methods to handle image operations, including pulling base images,
|
|
22
|
+
* building custom images, and loading them into specified Kubernetes clusters (Kind, Kubeadm, or K3s).
|
|
23
|
+
* @memberof UnderpostImage
|
|
24
|
+
*/
|
|
25
|
+
class UnderpostImage {
|
|
26
|
+
static API = {
|
|
27
|
+
dockerfile: {
|
|
28
|
+
/**
|
|
29
|
+
* @method pullBaseImages
|
|
30
|
+
* @description Pulls base images and builds a 'rockylinux9-underpost' image,
|
|
31
|
+
* then loads it into the specified Kubernetes cluster type (Kind, Kubeadm, or K3s).
|
|
32
|
+
* @param {object} options - Options for pulling and loading images.
|
|
33
|
+
* @param {boolean} [options.kindLoad=false] - If true, load image into Kind cluster.
|
|
34
|
+
* @param {boolean} [options.kubeadmLoad=false] - If true, load image into Kubeadm cluster.
|
|
35
|
+
* @param {boolean} [options.k3sLoad=false] - If true, load image into K3s cluster.
|
|
36
|
+
* @param {string} [options.path=false] - Path to the Dockerfile context.
|
|
37
|
+
* @param {string} [options.version=''] - Version tag for the image.
|
|
38
|
+
* @memberof UnderpostImage
|
|
39
|
+
*/
|
|
40
|
+
pullBaseImages(
|
|
41
|
+
options = {
|
|
42
|
+
kindLoad: false,
|
|
43
|
+
kubeadmLoad: false,
|
|
44
|
+
k3sLoad: false,
|
|
45
|
+
path: false,
|
|
46
|
+
version: '',
|
|
47
|
+
},
|
|
48
|
+
) {
|
|
49
|
+
// shellExec(`sudo podman pull docker.io/library/debian:buster`);
|
|
50
|
+
shellExec(`sudo podman pull docker.io/library/rockylinux:9`);
|
|
51
|
+
const IMAGE_NAME = `rockylinux9-underpost`;
|
|
52
|
+
const IMAGE_NAME_FULL = `${IMAGE_NAME}:${options.version ?? Underpost.version}`;
|
|
53
|
+
let LOAD_TYPE = '';
|
|
54
|
+
if (options.kindLoad === true) {
|
|
55
|
+
LOAD_TYPE = `--kind-load`;
|
|
56
|
+
} else if (options.kubeadmLoad === true) {
|
|
57
|
+
LOAD_TYPE = `--kubeadm-load`;
|
|
58
|
+
} else if (options.k3sLoad === true) {
|
|
59
|
+
// Handle K3s load type
|
|
60
|
+
LOAD_TYPE = `--k3s-load`;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
shellExec(
|
|
64
|
+
`underpost dockerfile-image-build --podman-save --reset --image-path=. --path ${
|
|
65
|
+
options.path ?? getUnderpostRootPath()
|
|
66
|
+
} --image-name=${IMAGE_NAME_FULL} ${LOAD_TYPE}`,
|
|
67
|
+
);
|
|
68
|
+
},
|
|
69
|
+
/**
|
|
70
|
+
* @method build
|
|
71
|
+
* @description Builds a Docker image using Podman, optionally saves it as a tar archive,
|
|
72
|
+
* and loads it into a specified Kubernetes cluster (Kind, Kubeadm, or K3s).
|
|
73
|
+
* @param {object} options - Options for building and loading images.
|
|
74
|
+
* @param {string} [options.path=''] - The path to the directory containing the Dockerfile.
|
|
75
|
+
* @param {string} [options.imageName=''] - The name and tag for the image (e.g., 'my-app:latest').
|
|
76
|
+
* @param {string} [options.imagePath=''] - Directory to save the image tar file.
|
|
77
|
+
* @param {string} [options.dockerfileName=''] - Name of the Dockerfile (defaults to 'Dockerfile').
|
|
78
|
+
* @param {boolean} [options.podmanSave=false] - If true, save the image as a tar archive using Podman.
|
|
79
|
+
* @param {boolean} [options.kindLoad=false] - If true, load the image archive into a Kind cluster.
|
|
80
|
+
* @param {boolean} [options.kubeadmLoad=false] - If true, load the image archive into a Kubeadm cluster (uses 'ctr').
|
|
81
|
+
* @param {boolean} [options.k3sLoad=false] - If true, load the image archive into a K3s cluster (uses 'k3s ctr').
|
|
82
|
+
* @param {boolean} [options.secrets=false] - If true, load secrets from the .env file for the build.
|
|
83
|
+
* @param {string} [options.secretsPath=''] - Custom path to the .env file for secrets.
|
|
84
|
+
* @param {boolean} [options.reset=false] - If true, perform a no-cache build.
|
|
85
|
+
* @memberof UnderpostImage
|
|
86
|
+
*/
|
|
87
|
+
build(
|
|
88
|
+
options = {
|
|
89
|
+
path: '',
|
|
90
|
+
imageName: '',
|
|
91
|
+
imagePath: '',
|
|
92
|
+
dockerfileName: '',
|
|
93
|
+
podmanSave: false,
|
|
94
|
+
kindLoad: false,
|
|
95
|
+
kubeadmLoad: false,
|
|
96
|
+
k3sLoad: false,
|
|
97
|
+
secrets: false,
|
|
98
|
+
secretsPath: '',
|
|
99
|
+
reset: false,
|
|
100
|
+
},
|
|
101
|
+
) {
|
|
102
|
+
const {
|
|
103
|
+
path,
|
|
104
|
+
imageName,
|
|
105
|
+
imagePath,
|
|
106
|
+
dockerfileName,
|
|
107
|
+
podmanSave,
|
|
108
|
+
secrets,
|
|
109
|
+
secretsPath,
|
|
110
|
+
kindLoad,
|
|
111
|
+
kubeadmLoad,
|
|
112
|
+
k3sLoad,
|
|
113
|
+
reset,
|
|
114
|
+
} = options;
|
|
115
|
+
const podManImg = `localhost/${imageName}`;
|
|
116
|
+
if (imagePath && typeof imagePath === 'string' && !fs.existsSync(imagePath))
|
|
117
|
+
fs.mkdirSync(imagePath, { recursive: true });
|
|
118
|
+
const tarFile = `${imagePath}/${imageName.replace(':', '_')}.tar`;
|
|
119
|
+
let secretsInput = ' ';
|
|
120
|
+
let secretDockerInput = '';
|
|
121
|
+
let cache = '';
|
|
122
|
+
if (secrets === true) {
|
|
123
|
+
const envObj = dotenv.parse(
|
|
124
|
+
fs.readFileSync(
|
|
125
|
+
secretsPath && typeof secretsPath === 'string' ? secretsPath : `${getNpmRootPath()}/underpost/.env`,
|
|
126
|
+
'utf8',
|
|
127
|
+
),
|
|
128
|
+
);
|
|
129
|
+
for (const key of Object.keys(envObj)) {
|
|
130
|
+
secretsInput += ` && export ${key}="${envObj[key]}" `; // Example: $(cat gitlab-token.txt)
|
|
131
|
+
secretDockerInput += ` --secret id=${key},env=${key} \ `;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (reset === true) cache += ' --rm --no-cache';
|
|
135
|
+
if (path && typeof path === 'string')
|
|
136
|
+
shellExec(
|
|
137
|
+
`cd ${path}${secretsInput}&& sudo podman build -f ./${
|
|
138
|
+
dockerfileName && typeof dockerfileName === 'string' ? dockerfileName : 'Dockerfile'
|
|
139
|
+
} -t ${imageName} --pull=never --cap-add=CAP_AUDIT_WRITE${cache}${secretDockerInput} --network host`,
|
|
140
|
+
);
|
|
141
|
+
|
|
142
|
+
if (podmanSave === true) shellExec(`podman save -o ${tarFile} ${podManImg}`);
|
|
143
|
+
if (kindLoad === true) shellExec(`sudo kind load image-archive ${tarFile}`);
|
|
144
|
+
if (kubeadmLoad === true) {
|
|
145
|
+
// Use 'ctr' for Kubeadm
|
|
146
|
+
shellExec(`sudo ctr -n k8s.io images import ${tarFile}`);
|
|
147
|
+
}
|
|
148
|
+
if (k3sLoad === true) {
|
|
149
|
+
// Use 'k3s ctr' for K3s
|
|
150
|
+
shellExec(`sudo k3s ctr images import ${tarFile}`);
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
export default UnderpostImage;
|