@underpostnet/cyberia 3.2.80
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dockerignore +14 -0
- package/.env.example +144 -0
- package/.github/workflows/cyberia-client.cd.yml +40 -0
- package/.github/workflows/cyberia-server.cd.yml +40 -0
- package/.github/workflows/docker-image.cyberia-client.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +70 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +71 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +71 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +53 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +53 -0
- package/.github/workflows/engine-cyberia.cd.yml +157 -0
- package/.github/workflows/engine-cyberia.ci.yml +125 -0
- package/.github/workflows/ghpkg.ci.yml +160 -0
- package/.github/workflows/gitlab.ci.yml +20 -0
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +126 -0
- package/.github/workflows/publish.ci.yml +87 -0
- package/.github/workflows/publish.cyberia.ci.yml +79 -0
- package/.github/workflows/pwa-microservices-template-page.cd.yml +65 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +33 -0
- package/.github/workflows/release.cd.yml +46 -0
- package/.nycrc +9 -0
- package/.prettierignore +12 -0
- package/.prettierrc +9 -0
- package/.vscode/extensions.json +10 -0
- package/.vscode/settings.json +26 -0
- package/CHANGELOG.md +2516 -0
- package/CLI-HELP.md +1099 -0
- package/Dockerfile +161 -0
- package/Dockerfile.dev +161 -0
- package/Dockerfile.test +165 -0
- package/LICENSE +21 -0
- package/README.md +259 -0
- package/baremetal/commission-workflows.json +211 -0
- package/baremetal/packer-workflows.json +24 -0
- package/bin/build.js +261 -0
- package/bin/build.template.js +33 -0
- package/bin/cyberia.js +5627 -0
- package/bin/deploy.js +1547 -0
- package/bin/index.js +5627 -0
- package/bump.config.js +27 -0
- package/compose.env +144 -0
- package/conf.js +952 -0
- package/deployment.yaml +418 -0
- package/docker-compose.yml +434 -0
- package/examples/static-page/README.md +150 -0
- package/examples/static-page/ssr-components/CustomPage.js +554 -0
- package/examples/static-page/static-config-example.json +57 -0
- package/hardhat/.env.example +31 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/.gitkeep +0 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +2871 -0
- package/hardhat/package.json +43 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +696 -0
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/ipfs/configure-ipfs.sh +13 -0
- package/jsconfig.json +9 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +48 -0
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +48 -0
- package/manifests/deployment/adminer/deployment.yaml +32 -0
- package/manifests/deployment/adminer/kustomization.yaml +7 -0
- package/manifests/deployment/adminer/service.yaml +13 -0
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +418 -0
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +189 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +164 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +163 -0
- package/manifests/deployment/dd-default-development/proxy.yaml +46 -0
- package/manifests/deployment/fastapi/backend-deployment.yml +120 -0
- package/manifests/deployment/fastapi/backend-service.yml +19 -0
- package/manifests/deployment/fastapi/frontend-deployment.yml +54 -0
- package/manifests/deployment/fastapi/frontend-service.yml +15 -0
- package/manifests/deployment/fastapi/initial_data.sh +8 -0
- package/manifests/deployment/kafka/deployment.yaml +67 -0
- package/manifests/deployment/mongo-express/deployment.yaml +62 -0
- package/manifests/deployment/phpmyadmin/deployment.yaml +54 -0
- package/manifests/deployment/playwright/deployment.yaml +52 -0
- package/manifests/deployment/spark/spark-pi-py.yaml +20 -0
- package/manifests/deployment/tensorflow/tf-gpu-test.yaml +63 -0
- package/manifests/envoy-service-nodeport.yaml +22 -0
- package/manifests/grafana/deployment.yaml +64 -0
- package/manifests/grafana/kustomization.yaml +7 -0
- package/manifests/grafana/pvc.yaml +12 -0
- package/manifests/grafana/service.yaml +14 -0
- package/manifests/grafana/storage-class.yaml +9 -0
- package/manifests/ipfs/configmap.yaml +64 -0
- package/manifests/ipfs/headless-service.yaml +35 -0
- package/manifests/ipfs/kustomization.yaml +8 -0
- package/manifests/ipfs/statefulset.yaml +149 -0
- package/manifests/ipfs/storage-class.yaml +9 -0
- package/manifests/kind-config-dev.yaml +20 -0
- package/manifests/kind-config.yaml +12 -0
- package/manifests/kubeadm-calico-config.yaml +14 -0
- package/manifests/letsencrypt-prod.yaml +14 -0
- package/manifests/lxd/lxd-admin-profile.yaml +26 -0
- package/manifests/lxd/lxd-preseed.yaml +30 -0
- package/manifests/mariadb/kustomization.yaml +9 -0
- package/manifests/mariadb/pv.yaml +12 -0
- package/manifests/mariadb/pvc.yaml +10 -0
- package/manifests/mariadb/service.yaml +10 -0
- package/manifests/mariadb/statefulset.yaml +56 -0
- package/manifests/mariadb/storage-class.yaml +10 -0
- package/manifests/mongodb/headless-service.yaml +10 -0
- package/manifests/mongodb/kustomization.yaml +11 -0
- package/manifests/mongodb/pv-pvc.yaml +59 -0
- package/manifests/mongodb/statefulset.yaml +113 -0
- package/manifests/mongodb/storage-class.yaml +9 -0
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +9 -0
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +19 -0
- package/manifests/mongodb-4.4/service-deployment.yaml +61 -0
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/mysql/kustomization.yaml +7 -0
- package/manifests/mysql/pv-pvc.yaml +27 -0
- package/manifests/mysql/statefulset.yaml +55 -0
- package/manifests/postgresql/configmap.yaml +9 -0
- package/manifests/postgresql/kustomization.yaml +10 -0
- package/manifests/postgresql/pv.yaml +15 -0
- package/manifests/postgresql/pvc.yaml +13 -0
- package/manifests/postgresql/service.yaml +10 -0
- package/manifests/postgresql/statefulset.yaml +37 -0
- package/manifests/prometheus/deployment.yaml +82 -0
- package/manifests/pv-pvc-dd.yaml +34 -0
- package/manifests/valkey/kustomization.yaml +7 -0
- package/manifests/valkey/service.yaml +10 -0
- package/manifests/valkey/statefulset.yaml +37 -0
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +128 -0
- package/nodemon.json +6 -0
- package/package.json +101 -0
- package/packer/images/Rocky9Amd64/Makefile +62 -0
- package/packer/images/Rocky9Amd64/QUICKSTART.md +113 -0
- package/packer/images/Rocky9Amd64/README.md +122 -0
- package/packer/images/Rocky9Amd64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Amd64/rocky9.pkr.hcl +164 -0
- package/packer/images/Rocky9Arm64/Makefile +69 -0
- package/packer/images/Rocky9Arm64/README.md +122 -0
- package/packer/images/Rocky9Arm64/http/rocky9.ks.pkrtpl.hcl +114 -0
- package/packer/images/Rocky9Arm64/rocky9.pkr.hcl +171 -0
- package/packer/scripts/fuse-nbd +64 -0
- package/packer/scripts/fuse-tar-root +63 -0
- package/proxy.yaml +189 -0
- package/pv-pvc.yaml +164 -0
- package/scripts/device-scan.sh +65 -0
- package/scripts/disk-clean.sh +182 -0
- package/scripts/disk-devices.sh +13 -0
- package/scripts/gen-fqdns.sh +14 -0
- package/scripts/gpu-diag.sh +19 -0
- package/scripts/ip-info.sh +118 -0
- package/scripts/ipxe-setup.sh +200 -0
- package/scripts/k3s-node-setup.sh +124 -0
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/lxd-vm-setup.sh +208 -0
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/maas-setup.sh +135 -0
- package/scripts/maas-upload-boot-resource.sh +183 -0
- package/scripts/nat-iptables.sh +111 -0
- package/scripts/nvim.sh +91 -0
- package/scripts/packer-init-vars-file.sh +40 -0
- package/scripts/packer-setup.sh +289 -0
- package/scripts/ports-ls.sh +33 -0
- package/scripts/quick-tftp.sh +19 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/scripts/rocky-kickstart.sh +986 -0
- package/scripts/rocky-pwa.sh +200 -0
- package/scripts/rocky-setup.sh +106 -0
- package/scripts/rpmfusion-ffmpeg-setup.sh +32 -0
- package/scripts/ssl.sh +170 -0
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +30 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +155 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +39 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +382 -0
- package/src/api/core/core.controller.js +8 -0
- package/src/api/core/core.model.js +11 -0
- package/src/api/core/core.router.js +23 -0
- package/src/api/core/core.service.js +30 -0
- package/src/api/crypto/crypto.controller.js +10 -0
- package/src/api/crypto/crypto.model.js +23 -0
- package/src/api/crypto/crypto.router.js +23 -0
- package/src/api/crypto/crypto.service.js +64 -0
- package/src/api/cyberia-action/cyberia-action.controller.js +8 -0
- package/src/api/cyberia-action/cyberia-action.model.js +79 -0
- package/src/api/cyberia-action/cyberia-action.router.js +21 -0
- package/src/api/cyberia-action/cyberia-action.service.js +58 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +27 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +100 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +70 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +8 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +20 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +57 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +6 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +25 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +17 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +6 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +67 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -0
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +46 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +337 -0
- package/src/api/cyberia-instance/cyberia-instance-boot.service.js +57 -0
- package/src/api/cyberia-instance/cyberia-instance-map.service.js +583 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +42 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +117 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +75 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +190 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +260 -0
- package/src/api/cyberia-instance/cyberia-world-generator.js +618 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +6 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +200 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +17 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +46 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +6 -0
- package/src/api/cyberia-map/cyberia-map.model.js +33 -0
- package/src/api/cyberia-map/cyberia-map.router.js +19 -0
- package/src/api/cyberia-map/cyberia-map.service.js +76 -0
- package/src/api/cyberia-quest/cyberia-quest.controller.js +9 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +26 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +97 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +6 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +21 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/cyberia-saga/cyberia-saga.controller.js +6 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +17 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +1076 -0
- package/src/api/cyberia-skill/cyberia-skill.controller.js +6 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +17 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/default/default.controller.js +6 -0
- package/src/api/default/default.model.js +20 -0
- package/src/api/default/default.router.js +21 -0
- package/src/api/default/default.service.js +42 -0
- package/src/api/document/document.controller.js +9 -0
- package/src/api/document/document.model.js +95 -0
- package/src/api/document/document.router.js +32 -0
- package/src/api/document/document.service.js +633 -0
- package/src/api/file/file.controller.js +15 -0
- package/src/api/file/file.model.js +127 -0
- package/src/api/file/file.ref.json +39 -0
- package/src/api/file/file.router.js +36 -0
- package/src/api/file/file.service.js +499 -0
- package/src/api/instance/instance.controller.js +8 -0
- package/src/api/instance/instance.model.js +34 -0
- package/src/api/instance/instance.router.js +27 -0
- package/src/api/instance/instance.service.js +75 -0
- package/src/api/ipfs/ipfs.controller.js +8 -0
- package/src/api/ipfs/ipfs.model.js +77 -0
- package/src/api/ipfs/ipfs.router.js +26 -0
- package/src/api/ipfs/ipfs.service.js +145 -0
- package/src/api/object-layer/object-layer.controller.js +18 -0
- package/src/api/object-layer/object-layer.model.js +200 -0
- package/src/api/object-layer/object-layer.router.js +729 -0
- package/src/api/object-layer/object-layer.service.js +894 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +6 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +93 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +17 -0
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +46 -0
- package/src/api/test/test.controller.js +14 -0
- package/src/api/test/test.model.js +14 -0
- package/src/api/test/test.router.js +23 -0
- package/src/api/test/test.service.js +35 -0
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +100 -0
- package/src/api/user/postman_collection.json +216 -0
- package/src/api/user/user.build.js +16 -0
- package/src/api/user/user.controller.js +35 -0
- package/src/api/user/user.model.js +142 -0
- package/src/api/user/user.router.js +367 -0
- package/src/api/user/user.service.js +582 -0
- package/src/api.js +23 -0
- package/src/cli/baremetal.js +3947 -0
- package/src/cli/cloud-init.js +673 -0
- package/src/cli/cluster.js +1395 -0
- package/src/cli/db.js +1533 -0
- package/src/cli/deploy.js +1542 -0
- package/src/cli/docker-compose.js +802 -0
- package/src/cli/env.js +177 -0
- package/src/cli/fs.js +380 -0
- package/src/cli/image.js +389 -0
- package/src/cli/index.js +1059 -0
- package/src/cli/ipfs.js +182 -0
- package/src/cli/kickstart.js +271 -0
- package/src/cli/kubectl.js +214 -0
- package/src/cli/lxd.js +1232 -0
- package/src/cli/monitor.js +659 -0
- package/src/cli/release.js +595 -0
- package/src/cli/repository.js +1969 -0
- package/src/cli/run.js +3326 -0
- package/src/cli/secrets.js +151 -0
- package/src/cli/ssh.js +975 -0
- package/src/cli/static.js +653 -0
- package/src/cli/system.js +332 -0
- package/src/cli/test.js +176 -0
- package/src/client/Cryptokoyn.index.js +30 -0
- package/src/client/CyberiaPortal.index.js +31 -0
- package/src/client/Default.index.js +77 -0
- package/src/client/Itemledger.index.js +35 -0
- package/src/client/Underpost.index.js +31 -0
- package/src/client/components/core/404.js +20 -0
- package/src/client/components/core/500.js +20 -0
- package/src/client/components/core/Account.js +630 -0
- package/src/client/components/core/AgGrid.js +238 -0
- package/src/client/components/core/Alert.js +76 -0
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/Auth.js +353 -0
- package/src/client/components/core/Badge.js +26 -0
- package/src/client/components/core/Blockchain.js +41 -0
- package/src/client/components/core/Blog.js +9 -0
- package/src/client/components/core/BtnIcon.js +109 -0
- package/src/client/components/core/CalendarCore.js +437 -0
- package/src/client/components/core/Chat.js +62 -0
- package/src/client/components/core/ClientEvents.js +163 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/CommonJs.js +1014 -0
- package/src/client/components/core/Content.js +349 -0
- package/src/client/components/core/Css.js +1134 -0
- package/src/client/components/core/CssCore.js +881 -0
- package/src/client/components/core/D3Chart.js +44 -0
- package/src/client/components/core/Docs.js +478 -0
- package/src/client/components/core/DropDown.js +321 -0
- package/src/client/components/core/EventBus.js +96 -0
- package/src/client/components/core/EventsUI.js +130 -0
- package/src/client/components/core/FileExplorer.js +1406 -0
- package/src/client/components/core/FullScreen.js +201 -0
- package/src/client/components/core/Input.js +537 -0
- package/src/client/components/core/Keyboard.js +80 -0
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +152 -0
- package/src/client/components/core/LogIn.js +212 -0
- package/src/client/components/core/LogOut.js +72 -0
- package/src/client/components/core/Logger.js +22 -0
- package/src/client/components/core/Modal.js +2956 -0
- package/src/client/components/core/NotificationManager.js +80 -0
- package/src/client/components/core/Pagination.js +252 -0
- package/src/client/components/core/Panel.js +1308 -0
- package/src/client/components/core/PanelForm.js +915 -0
- package/src/client/components/core/Polyhedron.js +947 -0
- package/src/client/components/core/PublicProfile.js +895 -0
- package/src/client/components/core/Recover.js +211 -0
- package/src/client/components/core/Responsive.js +146 -0
- package/src/client/components/core/RichText.js +33 -0
- package/src/client/components/core/Router.js +523 -0
- package/src/client/components/core/Scroll.js +76 -0
- package/src/client/components/core/SearchBox.js +1007 -0
- package/src/client/components/core/SignUp.js +153 -0
- package/src/client/components/core/SocketIo.js +163 -0
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +161 -0
- package/src/client/components/core/ToggleSwitch.js +89 -0
- package/src/client/components/core/ToolTip.js +78 -0
- package/src/client/components/core/Translate.js +694 -0
- package/src/client/components/core/Validator.js +140 -0
- package/src/client/components/core/VanillaJs.js +485 -0
- package/src/client/components/core/Wallet.js +95 -0
- package/src/client/components/core/WebComponent.js +44 -0
- package/src/client/components/core/Webhook.js +58 -0
- package/src/client/components/core/Worker.js +313 -0
- package/src/client/components/core/windowGetDimensions.js +269 -0
- package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +352 -0
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +212 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +12 -0
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +16 -0
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +11 -0
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +6 -0
- package/src/client/components/cyberia/ActionEngineCyberia.js +1867 -0
- package/src/client/components/cyberia/EntityEngineCyberia.js +585 -0
- package/src/client/components/cyberia/InstanceEngineCyberia.js +1088 -0
- package/src/client/components/cyberia/InstanceSelectionView.js +900 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1976 -0
- package/src/client/components/cyberia/ObjectLayerEngine.js +1540 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +2420 -0
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +1522 -0
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +528 -0
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +772 -0
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +254 -0
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +21 -0
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +518 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +72 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +16 -0
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +13 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +6 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +48 -0
- package/src/client/components/default/AppShellDefault.js +765 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/CommonDefault.js +29 -0
- package/src/client/components/default/CssDefault.js +27 -0
- package/src/client/components/default/LogInDefault.js +16 -0
- package/src/client/components/default/LogOutDefault.js +12 -0
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +16 -0
- package/src/client/components/default/SignUpDefault.js +11 -0
- package/src/client/components/default/SocketIoDefault.js +6 -0
- package/src/client/components/default/TranslateDefault.js +7 -0
- package/src/client/components/itemledger/AppShellItemledger.js +353 -0
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/CssItemledger.js +212 -0
- package/src/client/components/itemledger/LogInItemledger.js +17 -0
- package/src/client/components/itemledger/LogOutItemledger.js +12 -0
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +16 -0
- package/src/client/components/itemledger/SignUpItemledger.js +11 -0
- package/src/client/components/itemledger/SocketIoItemledger.js +6 -0
- package/src/client/components/itemledger/TranslateItemledger.js +7 -0
- package/src/client/components/underpost/AppShellUnderpost.js +691 -0
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/CssUnderpost.js +281 -0
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
- package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
- package/src/client/components/underpost/LabGalleryUnderpost.js +79 -0
- package/src/client/components/underpost/LogInUnderpost.js +25 -0
- package/src/client/components/underpost/LogOutUnderpost.js +17 -0
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +16 -0
- package/src/client/components/underpost/SignUpUnderpost.js +11 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +6 -0
- package/src/client/components/underpost/TranslateUnderpost.js +10 -0
- package/src/client/public/cryptokoyn/assets/banner/koyn-social.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/logo/cryptokoyn.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-192x192.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-256x256.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-36x36.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-48x48.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/android-chrome-96x96.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/apple-touch-icon.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-16x16.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/favicon-32x32.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-144x144.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-150x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x150.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-310x310.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/mstile-70x70.png +0 -0
- package/src/client/public/cryptokoyn/assets/splash/safari-pinned-tab.svg +42 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/favicon.ico +0 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +148 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +307 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +309 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +341 -0
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +84 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +294 -0
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +242 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +309 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +228 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +740 -0
- package/src/client/public/default/android-chrome-144x144.png +0 -0
- package/src/client/public/default/android-chrome-192x192.png +0 -0
- package/src/client/public/default/android-chrome-256x256.png +0 -0
- package/src/client/public/default/android-chrome-36x36.png +0 -0
- package/src/client/public/default/android-chrome-384x384.png +0 -0
- package/src/client/public/default/android-chrome-48x48.png +0 -0
- package/src/client/public/default/android-chrome-512x512.png +0 -0
- package/src/client/public/default/android-chrome-72x72.png +0 -0
- package/src/client/public/default/android-chrome-96x96.png +0 -0
- package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/default/apple-touch-icon.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/default/assets/background/dark.jpg +0 -0
- package/src/client/public/default/assets/background/dark.svg +557 -0
- package/src/client/public/default/assets/background/white.jpg +0 -0
- package/src/client/public/default/assets/background/white0-min.jpg +0 -0
- package/src/client/public/default/assets/background/white0.jpg +0 -0
- package/src/client/public/default/assets/logo/base-icon.png +0 -0
- package/src/client/public/default/assets/logo/underpost.gif +0 -0
- package/src/client/public/default/assets/mailer/api-user-check.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-default-avatar.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-invalid-token.png +0 -0
- package/src/client/public/default/assets/mailer/api-user-recover.png +0 -0
- package/src/client/public/default/browserconfig.xml +12 -0
- package/src/client/public/default/favicon-16x16.png +0 -0
- package/src/client/public/default/favicon-32x32.png +0 -0
- package/src/client/public/default/favicon-48x48.png +0 -0
- package/src/client/public/default/favicon.ico +0 -0
- package/src/client/public/default/manifest.webmanifest +69 -0
- package/src/client/public/default/mstile-144x144.png +0 -0
- package/src/client/public/default/mstile-150x150.png +0 -0
- package/src/client/public/default/mstile-310x150.png +0 -0
- package/src/client/public/default/mstile-310x310.png +0 -0
- package/src/client/public/default/mstile-70x70.png +0 -0
- package/src/client/public/default/safari-pinned-tab.svg +24 -0
- package/src/client/public/default/site.webmanifest +69 -0
- package/src/client/public/default/sitemap +148 -0
- package/src/client/public/default/yandex-browser-50x50.png +0 -0
- package/src/client/public/default/yandex-browser-manifest.json +9 -0
- package/src/client/public/doc/favicon.ico +0 -0
- package/src/client/public/doc/sitemap +148 -0
- package/src/client/public/itemledger/android-chrome-144x144.png +0 -0
- package/src/client/public/itemledger/android-chrome-192x192.png +0 -0
- package/src/client/public/itemledger/android-chrome-256x256.png +0 -0
- package/src/client/public/itemledger/android-chrome-36x36.png +0 -0
- package/src/client/public/itemledger/android-chrome-384x384.png +0 -0
- package/src/client/public/itemledger/android-chrome-48x48.png +0 -0
- package/src/client/public/itemledger/android-chrome-512x512.png +0 -0
- package/src/client/public/itemledger/android-chrome-72x72.png +0 -0
- package/src/client/public/itemledger/android-chrome-96x96.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-1024x1024.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-114x114.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-120x120.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-144x144.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-152x152.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-167x167.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-180x180.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-57x57.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-60x60.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-72x72.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-76x76.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon-precomposed.png +0 -0
- package/src/client/public/itemledger/apple-touch-icon.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1125x2436.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1136x640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1170x2532.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1179x2556.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2208.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1242x2688.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1284x2778.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1290x2796.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1334x750.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1488x2266.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1536x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1620x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1640x2160.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2224.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1668x2388.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-1792x828.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x1536.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2048x2732.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1620.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2160x1640.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2208x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2224x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2266x1488.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2388x1668.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2436x1125.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2532x1170.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2556x1179.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2688x1242.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2732x2048.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2778x1284.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-2796x1290.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-640x1136.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-750x1334.png +0 -0
- package/src/client/public/itemledger/apple-touch-startup-image-828x1792.png +0 -0
- package/src/client/public/itemledger/assets/logo/base-icon.png +0 -0
- package/src/client/public/itemledger/browserconfig.xml +12 -0
- package/src/client/public/itemledger/favicon-16x16.png +0 -0
- package/src/client/public/itemledger/favicon-32x32.png +0 -0
- package/src/client/public/itemledger/favicon-48x48.png +0 -0
- package/src/client/public/itemledger/favicon.ico +0 -0
- package/src/client/public/itemledger/manifest.webmanifest +69 -0
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/mstile-144x144.png +0 -0
- package/src/client/public/itemledger/mstile-150x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x150.png +0 -0
- package/src/client/public/itemledger/mstile-310x310.png +0 -0
- package/src/client/public/itemledger/mstile-70x70.png +0 -0
- package/src/client/public/itemledger/sitemap +148 -0
- package/src/client/public/itemledger/yandex-browser-50x50.png +0 -0
- package/src/client/public/itemledger/yandex-browser-manifest.json +9 -0
- package/src/client/public/test/favicon.ico +0 -0
- package/src/client/public/test/sitemap +148 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +137 -0
- package/src/client/services/core/core.service.js +309 -0
- package/src/client/services/crypto/crypto.service.js +68 -0
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +99 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +99 -0
- package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +99 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +137 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +99 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +120 -0
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/cyberia-saga/cyberia-saga.service.js +99 -0
- package/src/client/services/cyberia-skill/cyberia-skill.service.js +99 -0
- package/src/client/services/default/default.management.js +1015 -0
- package/src/client/services/default/default.service.js +99 -0
- package/src/client/services/document/document.service.js +134 -0
- package/src/client/services/file/file.service.js +94 -0
- package/src/client/services/instance/instance.management.js +78 -0
- package/src/client/services/instance/instance.service.js +107 -0
- package/src/client/services/ipfs/ipfs.service.js +118 -0
- package/src/client/services/object-layer/object-layer.management.js +414 -0
- package/src/client/services/object-layer/object-layer.service.js +208 -0
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +99 -0
- package/src/client/services/test/test.service.js +68 -0
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +51 -0
- package/src/client/services/user/user.service.js +106 -0
- package/src/client/ssr/RootDocument.js +237 -0
- package/src/client/ssr/body/404.js +77 -0
- package/src/client/ssr/body/500.js +76 -0
- package/src/client/ssr/body/CacheControl.js +117 -0
- package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/DefaultSplashScreen.js +97 -0
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +90 -0
- package/src/client/ssr/head/CryptokoynScripts.js +4 -0
- package/src/client/ssr/head/Css.js +241 -0
- package/src/client/ssr/head/CyberiaPortalScripts.js +6 -0
- package/src/client/ssr/head/DefaultScripts.js +6 -0
- package/src/client/ssr/head/ItemledgerScripts.js +4 -0
- package/src/client/ssr/head/Microdata.js +11 -0
- package/src/client/ssr/head/Production.js +1 -0
- package/src/client/ssr/head/Pwa.js +146 -0
- package/src/client/ssr/head/PwaItemledger.js +197 -0
- package/src/client/ssr/head/Seo.js +15 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +20 -0
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +16 -0
- package/src/client/ssr/views/Cyberia404.js +328 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +1070 -0
- package/src/client/ssr/views/Maintenance.js +64 -0
- package/src/client/ssr/views/NoNetworkConnection.js +68 -0
- package/src/client/ssr/views/Test.js +199 -0
- package/src/client/sw/core.sw.js +274 -0
- package/src/client-builder/client-build-docs.js +493 -0
- package/src/client-builder/client-build-live.js +100 -0
- package/src/client-builder/client-build.js +1092 -0
- package/src/client-builder/client-dev-server.js +88 -0
- package/src/client-builder/client-formatted.js +170 -0
- package/src/client-builder/client-icons.js +108 -0
- package/src/client-builder/ssr.js +124 -0
- package/src/client.build.js +17 -0
- package/src/client.dev.js +21 -0
- package/src/db/DataBaseProvider.js +213 -0
- package/src/db/mariadb/MariaDB.js +72 -0
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +199 -0
- package/src/grpc/cyberia/grpc-server.js +162 -0
- package/src/index.js +357 -0
- package/src/mailer/EmailRender.js +116 -0
- package/src/mailer/MailerProvider.js +213 -0
- package/src/projects/cyberia/atlas-sprite-sheet-generator.js +413 -0
- package/src/projects/cyberia/besu-genesis-generator.js +1630 -0
- package/src/projects/cyberia/catalog-cyberia.js +90 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2137 -0
- package/src/projects/cyberia/hot-reload-trigger.js +163 -0
- package/src/projects/cyberia/instance-data.js +719 -0
- package/src/projects/cyberia/ipfs-client.js +599 -0
- package/src/projects/cyberia/map-preview-generator.js +304 -0
- package/src/projects/cyberia/object-layer.js +978 -0
- package/src/projects/cyberia/semantic-layer-generator-floor.js +319 -0
- package/src/projects/cyberia/semantic-layer-generator-resource.js +259 -0
- package/src/projects/cyberia/semantic-layer-generator-skin.js +1164 -0
- package/src/projects/cyberia/semantic-layer-generator.js +753 -0
- package/src/projects/cyberia/shape-generator.js +1060 -0
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/proxy.js +19 -0
- package/src/runtime/cyberia-client/Dockerfile +49 -0
- package/src/runtime/cyberia-client/Dockerfile.dev +75 -0
- package/src/runtime/cyberia-server/Dockerfile +43 -0
- package/src/runtime/cyberia-server/Dockerfile.dev +56 -0
- package/src/runtime/engine-cyberia/Dockerfile +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +161 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +144 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +434 -0
- package/src/runtime/engine-cyberia/ipfs/configure-ipfs.sh +13 -0
- package/src/runtime/engine-cyberia/mongodb/entrypoint.sh +76 -0
- package/src/runtime/engine-cyberia/nginx.conf +128 -0
- package/src/runtime/express/Dockerfile +45 -0
- package/src/runtime/express/Express.js +285 -0
- package/src/runtime/lampp/Dockerfile +62 -0
- package/src/runtime/lampp/Lampp.js +359 -0
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +62 -0
- package/src/runtime/wp/Wp.js +642 -0
- package/src/server/auth.js +713 -0
- package/src/server/backup.js +102 -0
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +2316 -0
- package/src/server/cron.js +476 -0
- package/src/server/crypto.js +210 -0
- package/src/server/data-query.js +461 -0
- package/src/server/dns.js +553 -0
- package/src/server/downloader.js +73 -0
- package/src/server/logger.js +229 -0
- package/src/server/middlewares.js +152 -0
- package/src/server/peer.js +75 -0
- package/src/server/process.js +299 -0
- package/src/server/proxy.js +139 -0
- package/src/server/runtime-status.js +252 -0
- package/src/server/runtime.js +183 -0
- package/src/server/start.js +272 -0
- package/src/server/tls.js +254 -0
- package/src/server/valkey.js +201 -0
- package/src/server.js +25 -0
- package/src/ws/IoInterface.js +129 -0
- package/src/ws/IoServer.js +68 -0
- package/src/ws/core/channels/core.ws.chat.js +68 -0
- package/src/ws/core/channels/core.ws.mailer.js +116 -0
- package/src/ws/core/channels/core.ws.stream.js +90 -0
- package/src/ws/core/core.ws.connection.js +41 -0
- package/src/ws/core/core.ws.emit.js +37 -0
- package/src/ws/core/core.ws.server.js +44 -0
- package/src/ws/default/channels/default.ws.main.js +57 -0
- package/src/ws/default/default.ws.connection.js +35 -0
- package/src/ws/default/default.ws.emit.js +14 -0
- package/src/ws/default/default.ws.server.js +39 -0
- package/test/api.test.js +53 -0
- package/test/crypto.test.js +117 -0
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +463 -0
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +31 -0
- package/typedoc.json +31 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File model and schema definitions for MongoDB/Mongoose.
|
|
3
|
+
* Provides the File schema, model, and Data Transfer Object (DTO) for file operations.
|
|
4
|
+
*
|
|
5
|
+
* @module src/api/file/file.model.js
|
|
6
|
+
* @namespace FileModelServer
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { Schema, model } from 'mongoose';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Mongoose schema definition for File documents.
|
|
13
|
+
* @type {Schema}
|
|
14
|
+
* @memberof FileModelServer
|
|
15
|
+
*/
|
|
16
|
+
const FileSchema = new Schema({
|
|
17
|
+
name: { type: String, required: true },
|
|
18
|
+
data: { type: Buffer, required: true },
|
|
19
|
+
size: { type: Number },
|
|
20
|
+
encoding: { type: String, default: 'utf-8' },
|
|
21
|
+
tempFilePath: { type: String },
|
|
22
|
+
truncated: { type: Boolean },
|
|
23
|
+
mimetype: { type: String },
|
|
24
|
+
md5: { type: String },
|
|
25
|
+
cid: { type: String },
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Mongoose model for File documents.
|
|
30
|
+
* @type {import('mongoose').Model}
|
|
31
|
+
* @memberof FileModelServer
|
|
32
|
+
*/
|
|
33
|
+
const FileModel = model('File', FileSchema);
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Provider schema alias for File schema.
|
|
37
|
+
* Used for database provider compatibility.
|
|
38
|
+
* @type {Schema}
|
|
39
|
+
* @memberof FileModelServer
|
|
40
|
+
*/
|
|
41
|
+
const ProviderSchema = FileSchema;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* File Data Transfer Object (DTO) for the model layer.
|
|
45
|
+
* Provides core transformation methods for file documents including metadata extraction,
|
|
46
|
+
* full document conversion, and filename normalization utilities.
|
|
47
|
+
* @namespace FileModelServer.FileModelDto
|
|
48
|
+
* @memberof FileModelServer
|
|
49
|
+
*/
|
|
50
|
+
class FileModelDto {
|
|
51
|
+
/**
|
|
52
|
+
* Returns file metadata only (no buffer data).
|
|
53
|
+
* Used for list responses and API integration.
|
|
54
|
+
* @function toMetadata
|
|
55
|
+
* @memberof FileModelServer.FileModelDto
|
|
56
|
+
* @param {Object} file - File document from database.
|
|
57
|
+
* @returns {Object|null} File metadata object, or null if file is falsy.
|
|
58
|
+
*/
|
|
59
|
+
static toMetadata = (file) => {
|
|
60
|
+
if (!file) return null;
|
|
61
|
+
return {
|
|
62
|
+
_id: file._id,
|
|
63
|
+
name: file.name || '',
|
|
64
|
+
mimetype: file.mimetype || 'application/octet-stream',
|
|
65
|
+
size: file.size || 0,
|
|
66
|
+
md5: file.md5 || '',
|
|
67
|
+
cid: file.cid || '',
|
|
68
|
+
createdAt: file.createdAt,
|
|
69
|
+
updatedAt: file.updatedAt,
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Returns file with complete data.
|
|
75
|
+
* Used only when explicitly requested (e.g., file/blob endpoint).
|
|
76
|
+
* @function toFull
|
|
77
|
+
* @memberof FileModelServer.FileModelDto
|
|
78
|
+
* @param {Object} file - File document from database.
|
|
79
|
+
* @returns {Object|null} Complete file object with buffer data, or null if file is falsy.
|
|
80
|
+
*/
|
|
81
|
+
static toFull = (file) => {
|
|
82
|
+
if (!file) return null;
|
|
83
|
+
return {
|
|
84
|
+
_id: file._id,
|
|
85
|
+
name: file.name || '',
|
|
86
|
+
mimetype: file.mimetype || 'application/octet-stream',
|
|
87
|
+
size: file.size || 0,
|
|
88
|
+
md5: file.md5 || '',
|
|
89
|
+
cid: file.cid || '',
|
|
90
|
+
data: file.data,
|
|
91
|
+
encoding: file.encoding || 'utf-8',
|
|
92
|
+
createdAt: file.createdAt,
|
|
93
|
+
updatedAt: file.updatedAt,
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Transforms array of files to metadata only.
|
|
99
|
+
* @function toMetadataArray
|
|
100
|
+
* @memberof FileModelServer.FileModelDto
|
|
101
|
+
* @param {Array} files - Array of file documents.
|
|
102
|
+
* @returns {Array} Array of file metadata objects.
|
|
103
|
+
*/
|
|
104
|
+
static toMetadataArray = (files) => {
|
|
105
|
+
if (!Array.isArray(files)) return [];
|
|
106
|
+
return files.map((file) => FileModelDto.toMetadata(file));
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Ensures UTF-8 encoding for filenames.
|
|
111
|
+
* Fixes issues with special characters (e.g., ñ, é, ü).
|
|
112
|
+
* @function normalizeFilename
|
|
113
|
+
* @memberof FileModelServer.FileModelDto
|
|
114
|
+
* @param {string} filename - Raw filename from upload.
|
|
115
|
+
* @returns {string} UTF-8 encoded filename.
|
|
116
|
+
*/
|
|
117
|
+
static normalizeFilename = (filename) => {
|
|
118
|
+
if (!filename) return '';
|
|
119
|
+
// Ensure string and normalize to UTF-8
|
|
120
|
+
let normalized = String(filename);
|
|
121
|
+
// Replace any incorrectly encoded sequences
|
|
122
|
+
normalized = Buffer.from(normalized, 'utf8').toString('utf8');
|
|
123
|
+
return normalized;
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { FileSchema, FileModel, ProviderSchema, FileModelDto };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"api": "atlas-sprite-sheet",
|
|
4
|
+
"model": {
|
|
5
|
+
"fileId": true
|
|
6
|
+
}
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"api": "company",
|
|
10
|
+
"model": {
|
|
11
|
+
"logo": true
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"api": "cyberia-instance",
|
|
16
|
+
"model": {
|
|
17
|
+
"thumbnail": true
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"api": "cyberia-map",
|
|
22
|
+
"model": {
|
|
23
|
+
"thumbnail": true
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"api": "document",
|
|
28
|
+
"model": {
|
|
29
|
+
"fileId": true,
|
|
30
|
+
"mdFileId": true
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"api": "user",
|
|
35
|
+
"model": {
|
|
36
|
+
"profileImageId": true
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
]
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { adminGuard } from '../../server/auth.js';
|
|
3
|
+
import { FileController } from './file.controller.js';
|
|
4
|
+
|
|
5
|
+
class FileRouter {
|
|
6
|
+
/**
|
|
7
|
+
* authenticated writes, admin-only deletes.
|
|
8
|
+
* @param {import('../types.js').RouterOptions} options
|
|
9
|
+
* @returns {import('express').Router}
|
|
10
|
+
*/
|
|
11
|
+
static router(options) {
|
|
12
|
+
const router = express.Router();
|
|
13
|
+
router.post(`/:id`, options.authMiddleware, async (req, res) => await FileController.post(req, res, options));
|
|
14
|
+
router.post(`/`, options.authMiddleware, async (req, res) => await FileController.post(req, res, options));
|
|
15
|
+
router.get(`/blob/:id`, async (req, res) => await FileController.get(req, res, options));
|
|
16
|
+
router.get(`/:id`, async (req, res) => await FileController.get(req, res, options));
|
|
17
|
+
router.get(`/`, async (req, res) => await FileController.get(req, res, options));
|
|
18
|
+
router.delete(
|
|
19
|
+
`/:id`,
|
|
20
|
+
options.authMiddleware,
|
|
21
|
+
adminGuard,
|
|
22
|
+
async (req, res) => await FileController.delete(req, res, options),
|
|
23
|
+
);
|
|
24
|
+
router.delete(
|
|
25
|
+
`/`,
|
|
26
|
+
options.authMiddleware,
|
|
27
|
+
adminGuard,
|
|
28
|
+
async (req, res) => await FileController.delete(req, res, options),
|
|
29
|
+
);
|
|
30
|
+
return router;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const ApiRouter = (options) => FileRouter.router(options);
|
|
35
|
+
|
|
36
|
+
export { ApiRouter, FileRouter };
|
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File service module for handling file uploads, retrieval, and deletion.
|
|
3
|
+
* Provides REST API handlers for file operations with MongoDB storage.
|
|
4
|
+
*
|
|
5
|
+
* @module src/api/file/file.service.js
|
|
6
|
+
* @namespace FileServiceServer
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
10
|
+
import { getBearerToken, jwtVerify } from '../../server/auth.js';
|
|
11
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
12
|
+
import crypto from 'crypto';
|
|
13
|
+
import { Types } from 'mongoose';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Logger instance for this module.
|
|
17
|
+
* @type {Function}
|
|
18
|
+
* @memberof FileServiceServer
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
const logger = loggerFactory(import.meta);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* File Data Transfer Object (DTO) for the service layer.
|
|
25
|
+
* Provides API-specific transformation methods for file documents including
|
|
26
|
+
* metadata selection queries and response formatting for REST endpoints.
|
|
27
|
+
* @namespace FileServiceServer.FileServiceDto
|
|
28
|
+
* @memberof FileServiceServer
|
|
29
|
+
*/
|
|
30
|
+
class FileServiceDto {
|
|
31
|
+
/**
|
|
32
|
+
* Returns file metadata only (no buffer data).
|
|
33
|
+
* Used for list responses and API integration.
|
|
34
|
+
* @function toMetadata
|
|
35
|
+
* @memberof FileServiceServer.FileServiceDto
|
|
36
|
+
* @param {Object} file - File document from database.
|
|
37
|
+
* @returns {Object|null} File metadata object, or null if file is falsy.
|
|
38
|
+
*/
|
|
39
|
+
static toMetadata = (file) => {
|
|
40
|
+
if (!file) return null;
|
|
41
|
+
return {
|
|
42
|
+
_id: file._id,
|
|
43
|
+
name: file.name || '',
|
|
44
|
+
mimetype: file.mimetype || 'application/octet-stream',
|
|
45
|
+
size: file.size || 0,
|
|
46
|
+
md5: file.md5 || '',
|
|
47
|
+
cid: file.cid || '',
|
|
48
|
+
createdAt: file.createdAt,
|
|
49
|
+
updatedAt: file.updatedAt,
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Transforms array of files to metadata only.
|
|
55
|
+
* @function toMetadataArray
|
|
56
|
+
* @memberof FileServiceServer.FileServiceDto
|
|
57
|
+
* @param {Array} files - Array of file documents.
|
|
58
|
+
* @returns {Array} Array of file metadata objects.
|
|
59
|
+
*/
|
|
60
|
+
static toMetadataArray = (files) => {
|
|
61
|
+
if (!Array.isArray(files)) return [];
|
|
62
|
+
return files.map((file) => FileServiceDto.toMetadata(file));
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Ensures UTF-8 encoding for filenames.
|
|
67
|
+
* Fixes issues with special characters (e.g., ñ, é, ü).
|
|
68
|
+
* @function normalizeFilename
|
|
69
|
+
* @memberof FileServiceServer.FileServiceDto
|
|
70
|
+
* @param {string} filename - Raw filename from upload.
|
|
71
|
+
* @returns {string} UTF-8 encoded filename.
|
|
72
|
+
*/
|
|
73
|
+
static normalizeFilename = (filename) => {
|
|
74
|
+
if (!filename) return '';
|
|
75
|
+
// Ensure string and normalize to UTF-8
|
|
76
|
+
let normalized = String(filename);
|
|
77
|
+
// Replace any incorrectly encoded sequences
|
|
78
|
+
normalized = Buffer.from(normalized, 'utf8').toString('utf8');
|
|
79
|
+
return normalized;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Get select fields for metadata-only queries.
|
|
84
|
+
* Excludes the 'data' buffer field.
|
|
85
|
+
* @function metadataSelect
|
|
86
|
+
* @memberof FileServiceServer.FileServiceDto
|
|
87
|
+
* @returns {string} Space-separated list of field names for metadata selection.
|
|
88
|
+
*/
|
|
89
|
+
static metadataSelect = () => {
|
|
90
|
+
return '_id name mimetype size encoding md5 cid createdAt updatedAt';
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* File Factory for file extraction, upload, and creation utilities.
|
|
96
|
+
* @namespace FileServiceServer.FileFactory
|
|
97
|
+
* @memberof FileServiceServer
|
|
98
|
+
*/
|
|
99
|
+
class FileFactory {
|
|
100
|
+
/**
|
|
101
|
+
* Extract files from request.
|
|
102
|
+
* Handles both standard 'file' field and custom fields.
|
|
103
|
+
* @function filesExtract
|
|
104
|
+
* @memberof FileServiceServer.FileFactory
|
|
105
|
+
* @param {Object} req - Express request object with files.
|
|
106
|
+
* @returns {Array} Array of extracted file objects.
|
|
107
|
+
*/
|
|
108
|
+
static filesExtract = (req) => {
|
|
109
|
+
const files = [];
|
|
110
|
+
if (!req.files || Object.keys(req.files).length === 0) {
|
|
111
|
+
return files;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Handle standard 'file' field
|
|
115
|
+
if (Array.isArray(req.files.file)) {
|
|
116
|
+
for (const file of req.files.file) {
|
|
117
|
+
files.push(file);
|
|
118
|
+
}
|
|
119
|
+
} else if (req.files.file) {
|
|
120
|
+
files.push(req.files.file);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Handle all other fields (like direction codes)
|
|
124
|
+
for (const keyFile of Object.keys(req.files)) {
|
|
125
|
+
if (keyFile === 'file') continue; // Already handled above
|
|
126
|
+
|
|
127
|
+
const fileOrFiles = req.files[keyFile];
|
|
128
|
+
if (Array.isArray(fileOrFiles)) {
|
|
129
|
+
// Multiple files with same field name
|
|
130
|
+
for (const file of fileOrFiles) {
|
|
131
|
+
if (file && file.data) {
|
|
132
|
+
files.push(file);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
} else if (fileOrFiles && fileOrFiles.data) {
|
|
136
|
+
// Single file
|
|
137
|
+
files.push(fileOrFiles);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return files;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Upload files to database with UTF-8 encoding.
|
|
146
|
+
* @async
|
|
147
|
+
* @function upload
|
|
148
|
+
* @memberof FileServiceServer.FileFactory
|
|
149
|
+
* @param {Object} req - Express request object with files.
|
|
150
|
+
* @param {import('mongoose').Model} File - Mongoose File model.
|
|
151
|
+
* @returns {Promise<Array>} Array of uploaded file metadata objects.
|
|
152
|
+
*/
|
|
153
|
+
static async upload(req, File) {
|
|
154
|
+
const results = FileFactory.filesExtract(req);
|
|
155
|
+
let index = -1;
|
|
156
|
+
|
|
157
|
+
for (let file of results) {
|
|
158
|
+
// Normalize filename to ensure UTF-8 encoding
|
|
159
|
+
file.name = FileServiceDto.normalizeFilename(file.name);
|
|
160
|
+
file.encoding = 'utf-8';
|
|
161
|
+
|
|
162
|
+
// Save file to database
|
|
163
|
+
file = await new File(file).save();
|
|
164
|
+
index++;
|
|
165
|
+
|
|
166
|
+
// Retrieve metadata-only response
|
|
167
|
+
const [result] = await File.find({
|
|
168
|
+
_id: file._id,
|
|
169
|
+
}).select(FileServiceDto.metadataSelect());
|
|
170
|
+
|
|
171
|
+
results[index] = result;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
return results;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Convert string to hexadecimal.
|
|
179
|
+
* @function hex
|
|
180
|
+
* @memberof FileServiceServer.FileFactory
|
|
181
|
+
* @param {string} [raw=''] - Raw string to convert.
|
|
182
|
+
* @returns {string} Hexadecimal representation of the string.
|
|
183
|
+
*/
|
|
184
|
+
static hex = (raw = '') => {
|
|
185
|
+
return Buffer.from(raw, 'utf8').toString('hex');
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Get MIME type from file path based on extension.
|
|
190
|
+
* @function getMymeTypeFromPath
|
|
191
|
+
* @memberof FileServiceServer.FileFactory
|
|
192
|
+
* @param {string} path - File path or filename with extension.
|
|
193
|
+
* @returns {string} MIME type string.
|
|
194
|
+
*/
|
|
195
|
+
static getMymeTypeFromPath = (path) => {
|
|
196
|
+
const ext = String(path || '')
|
|
197
|
+
.toLowerCase()
|
|
198
|
+
.split('.')
|
|
199
|
+
.pop();
|
|
200
|
+
const mimeTypes = {
|
|
201
|
+
png: 'image/png',
|
|
202
|
+
jpg: 'image/jpeg',
|
|
203
|
+
jpeg: 'image/jpeg',
|
|
204
|
+
gif: 'image/gif',
|
|
205
|
+
svg: 'image/svg+xml',
|
|
206
|
+
webp: 'image/webp',
|
|
207
|
+
pdf: 'application/pdf',
|
|
208
|
+
md: 'text/markdown',
|
|
209
|
+
txt: 'text/plain',
|
|
210
|
+
json: 'application/json',
|
|
211
|
+
};
|
|
212
|
+
return mimeTypes[ext] || 'application/octet-stream';
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Create file object with proper encoding.
|
|
217
|
+
* @function create
|
|
218
|
+
* @memberof FileServiceServer.FileFactory
|
|
219
|
+
* @param {Buffer} [data=Buffer.from([])] - File data buffer.
|
|
220
|
+
* @param {string} [name=''] - File name.
|
|
221
|
+
* @returns {Object} File object with name, data, size, encoding, mimetype, and md5.
|
|
222
|
+
*/
|
|
223
|
+
static create = (data = Buffer.from([]), name = '') => {
|
|
224
|
+
const normalizedName = FileServiceDto.normalizeFilename(name);
|
|
225
|
+
|
|
226
|
+
return {
|
|
227
|
+
name: normalizedName,
|
|
228
|
+
data: data,
|
|
229
|
+
size: data.length,
|
|
230
|
+
encoding: 'utf-8',
|
|
231
|
+
tempFilePath: '',
|
|
232
|
+
truncated: false,
|
|
233
|
+
mimetype: FileFactory.getMymeTypeFromPath(normalizedName),
|
|
234
|
+
md5: crypto.createHash('md5').update(data).digest('hex'),
|
|
235
|
+
cid: undefined,
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* File cleanup utilities for preventing orphaned files.
|
|
242
|
+
* These utilities help maintain database integrity by automatically removing
|
|
243
|
+
* orphaned file records when references are changed or deleted in documents.
|
|
244
|
+
* @namespace FileServiceServer.FileCleanup
|
|
245
|
+
* @memberof FileServiceServer
|
|
246
|
+
*/
|
|
247
|
+
class FileCleanup {
|
|
248
|
+
/**
|
|
249
|
+
* Clean up old file references when document fields are updated.
|
|
250
|
+
* Deletes old files that are being replaced by new file IDs.
|
|
251
|
+
* @async
|
|
252
|
+
* @function cleanupReplacedFiles
|
|
253
|
+
* @memberof FileServiceServer.FileCleanup
|
|
254
|
+
* @param {Object} options - Cleanup options.
|
|
255
|
+
* @param {Object} options.oldDoc - Original document with old file references.
|
|
256
|
+
* @param {Object} options.newData - New data containing updated file references.
|
|
257
|
+
* @param {Array<string>} options.fileFields - Array of field names that contain file IDs (e.g., ['fileId', 'mdFileId']).
|
|
258
|
+
* @param {import('mongoose').Model} options.File - Mongoose File model.
|
|
259
|
+
* @returns {Promise<Array>} Array of deleted file IDs.
|
|
260
|
+
*/
|
|
261
|
+
static cleanupReplacedFiles = async ({ oldDoc, newData, fileFields, File }) => {
|
|
262
|
+
const deletedFileIds = [];
|
|
263
|
+
|
|
264
|
+
for (const field of fileFields) {
|
|
265
|
+
const oldFileId = oldDoc[field];
|
|
266
|
+
const newFileId = newData[field];
|
|
267
|
+
|
|
268
|
+
// If field has old file and new data changes or removes it
|
|
269
|
+
// newFileId === null means client explicitly wants to remove the file
|
|
270
|
+
// newFileId === undefined means field was not included in request (no change)
|
|
271
|
+
if (oldFileId && newFileId !== undefined && (newFileId === null || String(oldFileId) !== String(newFileId))) {
|
|
272
|
+
try {
|
|
273
|
+
const file = await File.findOne({ _id: oldFileId });
|
|
274
|
+
if (file) {
|
|
275
|
+
await File.findByIdAndDelete(oldFileId);
|
|
276
|
+
deletedFileIds.push(oldFileId);
|
|
277
|
+
logger.info(`Cleaned up orphaned file: ${oldFileId} from field: ${field}`);
|
|
278
|
+
}
|
|
279
|
+
} catch (err) {
|
|
280
|
+
logger.error(`Failed to cleanup file ${oldFileId} from field ${field}:`, err);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return deletedFileIds;
|
|
286
|
+
};
|
|
287
|
+
|
|
288
|
+
/**
|
|
289
|
+
* Delete all files referenced in a document.
|
|
290
|
+
* Used when deleting an entire document.
|
|
291
|
+
* This method removes all files associated with the document before
|
|
292
|
+
* the document itself is deleted, preventing orphaned file records.
|
|
293
|
+
* @async
|
|
294
|
+
* @function deleteDocumentFiles
|
|
295
|
+
* @memberof FileServiceServer.FileCleanup
|
|
296
|
+
* @param {Object} options - Deletion options.
|
|
297
|
+
* @param {Object} options.doc - Document containing file references.
|
|
298
|
+
* @param {Array<string>} options.fileFields - Array of field names that contain file IDs.
|
|
299
|
+
* @param {import('mongoose').Model} options.File - Mongoose File model.
|
|
300
|
+
* @returns {Promise<Array>} Array of deleted file IDs.
|
|
301
|
+
*/
|
|
302
|
+
static deleteDocumentFiles = async ({ doc, fileFields, File }) => {
|
|
303
|
+
const deletedFileIds = [];
|
|
304
|
+
|
|
305
|
+
for (const field of fileFields) {
|
|
306
|
+
const fileId = doc[field];
|
|
307
|
+
|
|
308
|
+
if (fileId) {
|
|
309
|
+
try {
|
|
310
|
+
const file = await File.findOne({ _id: fileId });
|
|
311
|
+
if (file) {
|
|
312
|
+
await File.findByIdAndDelete(fileId);
|
|
313
|
+
deletedFileIds.push(fileId);
|
|
314
|
+
logger.info(`Deleted file: ${fileId} from field: ${field}`);
|
|
315
|
+
}
|
|
316
|
+
} catch (err) {
|
|
317
|
+
logger.error(`Failed to delete file ${fileId} from field ${field}:`, err);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return deletedFileIds;
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* File Service for handling REST API file operations.
|
|
328
|
+
* @namespace FileServiceServer.FileService
|
|
329
|
+
* @memberof FileServiceServer
|
|
330
|
+
*/
|
|
331
|
+
class FileService {
|
|
332
|
+
/**
|
|
333
|
+
* POST - Upload files.
|
|
334
|
+
* Returns metadata-only response (no buffer data).
|
|
335
|
+
* @async
|
|
336
|
+
* @function post
|
|
337
|
+
* @memberof FileServiceServer.FileService
|
|
338
|
+
* @param {Object} req - Express request object.
|
|
339
|
+
* @param {Object} res - Express response object.
|
|
340
|
+
* @param {Object} options - Request options containing host and path.
|
|
341
|
+
* @returns {Promise<Array>} Array of uploaded file metadata objects.
|
|
342
|
+
*/
|
|
343
|
+
static post = async (req, res, options) => {
|
|
344
|
+
// Check that user is authenticated and not a guest
|
|
345
|
+
if (!req.auth || !req.auth.user || req.auth.user.role === 'guest') {
|
|
346
|
+
throw new Error('Authentication required. Guest users cannot upload files.');
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/** @type {import('./file.model.js').FileModel} */
|
|
350
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
351
|
+
|
|
352
|
+
const uploadedFiles = await FileFactory.upload(req, File);
|
|
353
|
+
return FileServiceDto.toMetadataArray(uploadedFiles);
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
/**
|
|
357
|
+
* GET - Retrieve files.
|
|
358
|
+
* Returns metadata-only for regular GET.
|
|
359
|
+
* Returns buffer data for /blob endpoint.
|
|
360
|
+
* Authorization: Check if file belongs to a public document or user owns the document.
|
|
361
|
+
* @async
|
|
362
|
+
* @function get
|
|
363
|
+
* @memberof FileServiceServer.FileService
|
|
364
|
+
* @param {Object} req - Express request object.
|
|
365
|
+
* @param {Object} res - Express response object.
|
|
366
|
+
* @param {Object} options - Request options containing host and path.
|
|
367
|
+
* @returns {Promise<Array|Buffer>} Array of file metadata objects or Buffer for blob endpoint.
|
|
368
|
+
* @throws {Error} If file not found or user not authorized.
|
|
369
|
+
*/
|
|
370
|
+
static get = async (req, res, options) => {
|
|
371
|
+
/** @type {import('./file.model.js').FileModel} */
|
|
372
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
373
|
+
/** @type {import('../document/document.model.js').DocumentModel} */
|
|
374
|
+
const Document = DataBaseProviderService.getModel("Document", options);
|
|
375
|
+
/** @type {import('../user/user.model.js').User} */
|
|
376
|
+
const User = DataBaseProviderService.getModel("User", options);
|
|
377
|
+
|
|
378
|
+
const isFileAuthorized = async (fileId) => {
|
|
379
|
+
try {
|
|
380
|
+
// Find document that references this file
|
|
381
|
+
const doc = await Document.findOne({
|
|
382
|
+
$or: [{ fileId: new Types.ObjectId(fileId) }, { mdFileId: new Types.ObjectId(fileId) }],
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
// If file not in any document, allow access
|
|
386
|
+
if (!doc) return true;
|
|
387
|
+
|
|
388
|
+
// If document has 'public' tag, allow all access
|
|
389
|
+
if (doc.isPublic) return true;
|
|
390
|
+
|
|
391
|
+
// Otherwise, user must be authenticated and own the document
|
|
392
|
+
// Try bearer token first
|
|
393
|
+
const token = getBearerToken(req);
|
|
394
|
+
if (token) {
|
|
395
|
+
try {
|
|
396
|
+
const payload = jwtVerify(token, options);
|
|
397
|
+
const user = await User.findOne({ _id: payload._id }).lean();
|
|
398
|
+
if (user && String(doc.userId) === String(user._id)) return true;
|
|
399
|
+
} catch (bearerErr) {
|
|
400
|
+
logger.warn('Bearer token verification failed, trying cookie session fallback:', bearerErr.message);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
// Fallback: check cookie-based session (refreshToken cookie)
|
|
405
|
+
const refreshToken = req.cookies?.refreshToken;
|
|
406
|
+
if (refreshToken) {
|
|
407
|
+
try {
|
|
408
|
+
const user = await User.findOne({ 'activeSessions.tokenHash': refreshToken }).lean();
|
|
409
|
+
if (user) {
|
|
410
|
+
const session = user.activeSessions.find((s) => s.tokenHash === refreshToken);
|
|
411
|
+
if (session && (!session.expiresAt || session.expiresAt >= new Date())) {
|
|
412
|
+
return String(doc.userId) === String(user._id);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
} catch (cookieErr) {
|
|
416
|
+
logger.warn('Cookie session verification failed:', cookieErr.message);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
return false;
|
|
421
|
+
} catch (err) {
|
|
422
|
+
console.log(err);
|
|
423
|
+
logger.error('Authorization check failed:', err);
|
|
424
|
+
return false;
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
// Handle blob endpoint - return raw buffer data
|
|
429
|
+
if (req.path.startsWith('/blob') && req.params.id) {
|
|
430
|
+
// Check authorization
|
|
431
|
+
const authorized = await isFileAuthorized(req.params.id);
|
|
432
|
+
if (!authorized) {
|
|
433
|
+
throw new Error('Unauthorized');
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
const file = await File.findOne({ _id: req.params.id });
|
|
437
|
+
|
|
438
|
+
if (!file) {
|
|
439
|
+
throw new Error('File not found');
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
// Set proper content type and return buffer
|
|
443
|
+
res.set('Content-Type', file.mimetype || 'application/octet-stream');
|
|
444
|
+
res.set('Content-Length', file.size || 0);
|
|
445
|
+
res.set('Content-Disposition', `inline; filename="${encodeURIComponent(file.name)}"`);
|
|
446
|
+
|
|
447
|
+
// Return Buffer directly (not JSON)
|
|
448
|
+
return Buffer.from(file.data);
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
// Handle regular GET - return metadata only
|
|
452
|
+
switch (req.params.id) {
|
|
453
|
+
case 'all': {
|
|
454
|
+
const files = await File.find().select(FileServiceDto.metadataSelect());
|
|
455
|
+
return FileServiceDto.toMetadataArray(files);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
default: {
|
|
459
|
+
// Check authorization
|
|
460
|
+
const authorized = await isFileAuthorized(req.params.id);
|
|
461
|
+
if (!authorized) {
|
|
462
|
+
throw new Error('Unauthorized');
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const files = await File.find({
|
|
466
|
+
_id: req.params.id,
|
|
467
|
+
}).select(FileServiceDto.metadataSelect());
|
|
468
|
+
|
|
469
|
+
return FileServiceDto.toMetadataArray(files);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* DELETE - Remove files.
|
|
476
|
+
* @async
|
|
477
|
+
* @function delete
|
|
478
|
+
* @memberof FileServiceServer.FileService
|
|
479
|
+
* @param {Object} req - Express request object.
|
|
480
|
+
* @param {Object} res - Express response object.
|
|
481
|
+
* @param {Object} options - Request options containing host and path.
|
|
482
|
+
* @returns {Promise<Object>} Deleted file metadata object.
|
|
483
|
+
* @throws {Error} If file not found.
|
|
484
|
+
*/
|
|
485
|
+
static delete = async (req, res, options) => {
|
|
486
|
+
/** @type {import('./file.model.js').FileModel} */
|
|
487
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
488
|
+
|
|
489
|
+
const result = await File.findByIdAndDelete(req.params.id);
|
|
490
|
+
|
|
491
|
+
if (!result) {
|
|
492
|
+
throw new Error('File not found');
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
return FileServiceDto.toMetadata(result);
|
|
496
|
+
};
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
export { FileService, FileFactory, FileServiceDto, FileCleanup };
|