cyberia 3.2.9 → 3.2.12
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/.github/workflows/engine-cyberia.cd.yml +6 -0
- package/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +1 -0
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +213 -1
- package/CLI-HELP.md +92 -23
- package/README.md +190 -348
- package/bin/build.js +24 -8
- package/bin/build.template.js +187 -0
- package/bin/cyberia.js +229 -52
- package/bin/deploy.js +12 -2
- package/bin/index.js +229 -52
- package/bump.config.js +26 -0
- package/conf.js +130 -24
- package/deployment.yaml +4 -2
- package/hardhat/package-lock.json +113 -144
- package/hardhat/package.json +4 -3
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +27 -15
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +81 -46
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +16 -16
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +5 -5
- package/src/api/crypto/crypto.router.js +18 -12
- package/src/api/crypto/crypto.service.js +3 -3
- package/src/api/cyberia-action/cyberia-action.model.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +22 -18
- package/src/api/cyberia-action/cyberia-action.service.js +5 -5
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +6 -6
- package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
- package/src/api/cyberia-entity/cyberia-entity.service.js +5 -5
- package/src/api/cyberia-instance/cyberia-fallback-world.js +79 -4
- package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
- package/src/api/cyberia-instance/cyberia-instance.service.js +10 -10
- package/src/api/cyberia-instance/cyberia-world-generator.js +3 -3
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +14 -48
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +5 -5
- package/src/api/cyberia-map/cyberia-map.router.js +35 -30
- package/src/api/cyberia-map/cyberia-map.service.js +7 -7
- package/src/api/cyberia-quest/cyberia-quest.model.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +22 -18
- package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +22 -18
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +5 -5
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +5 -5
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +9 -7
- package/src/api/instance/instance.router.js +29 -24
- package/src/api/instance/instance.service.js +6 -6
- package/src/api/ipfs/ipfs.router.js +21 -16
- package/src/api/ipfs/ipfs.service.js +8 -8
- package/src/api/object-layer/object-layer.router.js +512 -507
- package/src/api/object-layer/object-layer.service.js +17 -14
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +5 -5
- package/src/api/test/test.router.js +17 -12
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +5 -4
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +100 -35
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +700 -232
- package/src/cli/db.js +59 -60
- package/src/cli/deploy.js +216 -137
- package/src/cli/fs.js +13 -3
- package/src/cli/index.js +80 -15
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +334 -140
- package/src/cli/repository.js +68 -23
- package/src/cli/run.js +193 -49
- package/src/cli/secrets.js +11 -2
- package/src/cli/test.js +9 -3
- package/src/client/Default.index.js +9 -3
- package/src/client/components/core/Auth.js +5 -0
- package/src/client/components/core/ClientEvents.js +76 -0
- package/src/client/components/core/EventBus.js +4 -0
- package/src/client/components/core/Modal.js +82 -41
- package/src/client/components/core/PanelForm.js +56 -52
- package/src/client/components/core/Worker.js +162 -363
- package/src/client/components/cyberia/MapEngineCyberia.js +1 -1
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +50 -410
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +114 -327
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +200 -222
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +203 -185
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +2 -2
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
- package/src/client/sw/core.sw.js +174 -112
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/grpc/cyberia/grpc-server.js +25 -57
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +24 -3
- package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
- package/src/runtime/cyberia-server/Dockerfile +29 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +1 -1
- package/src/server/client-build.js +94 -129
- package/src/server/conf.js +86 -83
- package/src/server/process.js +180 -19
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- package/src/server/start.js +17 -5
- package/src/server/valkey.js +2 -0
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/bin/file.js +0 -202
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -574
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -467
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
- /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
- /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
- /package/src/client/ssr/{pages → views}/Test.js +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# MAAS NAT + firewall helper
|
|
5
|
+
# - Enables IPv4 forwarding and masquerading for the MAAS/provisioning subnet
|
|
6
|
+
# - Opens the MAAS API on the uplink zone when requested
|
|
7
|
+
# - Opens provisioning and optional NFS services on the zone bound to MAAS_LAN_CIDR
|
|
8
|
+
#
|
|
9
|
+
# Usage examples:
|
|
10
|
+
# sudo MAAS_LAN_CIDR="192.168.1.0/24" PUBLIC_ZONE="public" ./maas-nat-firewalld.sh
|
|
11
|
+
# sudo NFS_MODE="v3" CONFIGURE_NFS_V3_PORTS="true" ./maas-nat-firewalld.sh
|
|
12
|
+
|
|
13
|
+
MAAS_LAN_CIDR="${MAAS_LAN_CIDR:-192.168.1.0/24}"
|
|
14
|
+
PUBLIC_ZONE="${PUBLIC_ZONE:-public}"
|
|
15
|
+
TRUSTED_ZONE="${TRUSTED_ZONE:-trusted}"
|
|
16
|
+
NFS_MODE="${NFS_MODE:-v4}" # v4 or v3
|
|
17
|
+
CONFIGURE_NFS_V3_PORTS="${CONFIGURE_NFS_V3_PORTS:-false}"
|
|
18
|
+
EXPOSE_MAAS_API_PUBLIC="${EXPOSE_MAAS_API_PUBLIC:-true}"
|
|
19
|
+
|
|
20
|
+
# Fixed NFSv3 ports (only used when CONFIGURE_NFS_V3_PORTS=true)
|
|
21
|
+
NFS_MOUNTD_PORT="${NFS_MOUNTD_PORT:-20048}"
|
|
22
|
+
NFS_STATD_PORT="${NFS_STATD_PORT:-32765}"
|
|
23
|
+
# Outgoing port must differ from the listen port; rpc.statd exits 255 if they match.
|
|
24
|
+
NFS_STATD_OUTGOING_PORT="${NFS_STATD_OUTGOING_PORT:-32766}"
|
|
25
|
+
NFS_LOCKD_PORT="${NFS_LOCKD_PORT:-32803}"
|
|
26
|
+
NFS_LOCKD_UDP_PORT="${NFS_LOCKD_UDP_PORT:-${NFS_LOCKD_PORT}}"
|
|
27
|
+
NFS_CONF_DROPIN="/etc/nfs.conf.d/99-maas-nfs-v3-ports.conf"
|
|
28
|
+
|
|
29
|
+
case "${NFS_MODE}" in
|
|
30
|
+
v3|v4) ;;
|
|
31
|
+
*)
|
|
32
|
+
echo "[ERROR] NFS_MODE must be 'v3' or 'v4'." >&2
|
|
33
|
+
exit 1
|
|
34
|
+
;;
|
|
35
|
+
esac
|
|
36
|
+
|
|
37
|
+
# Ensure the kernel NFS server is enabled and actually running. `exportfs -rav` only populates the
|
|
38
|
+
# export table; it does not start nfsd, and `systemctl try-restart` is a no-op when the unit is
|
|
39
|
+
# stopped. Without this, clients hang on mount because nothing listens on 2049/mountd.
|
|
40
|
+
ensure_nfs_server_running() {
|
|
41
|
+
if [[ "${NFS_MODE}" == "v3" ]]; then
|
|
42
|
+
# NFSv3 depends on the portmapper and the status monitor.
|
|
43
|
+
sudo systemctl enable --now rpcbind 2>/dev/null || true
|
|
44
|
+
sudo systemctl enable --now rpc-statd 2>/dev/null || true
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
local unit=""
|
|
48
|
+
for candidate in nfs-server nfs-kernel-server; do
|
|
49
|
+
if systemctl cat "${candidate}.service" >/dev/null 2>&1; then
|
|
50
|
+
unit="${candidate}"
|
|
51
|
+
break
|
|
52
|
+
fi
|
|
53
|
+
done
|
|
54
|
+
if [[ -z "${unit}" ]]; then
|
|
55
|
+
echo "[ERROR] No NFS server unit found (nfs-server/nfs-kernel-server). Install nfs-utils or nfs-kernel-server." >&2
|
|
56
|
+
return 1
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
echo "[INFO] Enabling and (re)starting ${unit} to apply exports and fixed ports..."
|
|
60
|
+
sudo systemctl enable "${unit}" 2>/dev/null || true
|
|
61
|
+
sudo systemctl restart "${unit}"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
echo "[INFO] Enabling firewalld..."
|
|
65
|
+
sudo systemctl enable --now firewalld
|
|
66
|
+
|
|
67
|
+
echo "[INFO] Enabling kernel forwarding..."
|
|
68
|
+
sudo tee /etc/sysctl.d/99-maas-nat.conf >/dev/null <<'EOF'
|
|
69
|
+
net.ipv4.ip_forward = 1
|
|
70
|
+
EOF
|
|
71
|
+
|
|
72
|
+
sudo sysctl --system >/dev/null
|
|
73
|
+
|
|
74
|
+
echo "[INFO] Allowing NAT for the MAAS LAN..."
|
|
75
|
+
sudo firewall-cmd --permanent --zone="${PUBLIC_ZONE}" --add-masquerade
|
|
76
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-source="${MAAS_LAN_CIDR}"
|
|
77
|
+
|
|
78
|
+
echo "[INFO] Opening MAAS services on the MAAS LAN zone..."
|
|
79
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port=5240/tcp
|
|
80
|
+
for service in dns dhcp tftp; do
|
|
81
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-service="${service}"
|
|
82
|
+
done
|
|
83
|
+
|
|
84
|
+
if [[ "${EXPOSE_MAAS_API_PUBLIC}" == "true" ]]; then
|
|
85
|
+
echo "[INFO] Opening MAAS API on the uplink zone..."
|
|
86
|
+
sudo firewall-cmd --permanent --zone="${PUBLIC_ZONE}" --add-port=5240/tcp
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
echo "[INFO] Opening NFS ports on the MAAS LAN zone..."
|
|
90
|
+
|
|
91
|
+
if [[ "${NFS_MODE}" == "v4" ]]; then
|
|
92
|
+
# NFSv4 normally needs only TCP 2049.
|
|
93
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port=2049/tcp
|
|
94
|
+
else
|
|
95
|
+
# NFSv3 side-band daemons need fixed ports for deterministic firewall rules.
|
|
96
|
+
if [[ "${CONFIGURE_NFS_V3_PORTS}" != "true" ]]; then
|
|
97
|
+
echo "[ERROR] NFSv3 requires CONFIGURE_NFS_V3_PORTS=true for consistent firewalld rules." >&2
|
|
98
|
+
echo "[ERROR] Re-run with CONFIGURE_NFS_V3_PORTS=true or switch to NFS_MODE=v4." >&2
|
|
99
|
+
exit 1
|
|
100
|
+
fi
|
|
101
|
+
|
|
102
|
+
echo "[INFO] Writing fixed NFSv3 port configuration..."
|
|
103
|
+
sudo install -d -m 0755 /etc/nfs.conf.d
|
|
104
|
+
sudo tee "${NFS_CONF_DROPIN}" >/dev/null <<EOF
|
|
105
|
+
[nfsd]
|
|
106
|
+
vers3=y
|
|
107
|
+
|
|
108
|
+
[mountd]
|
|
109
|
+
port=${NFS_MOUNTD_PORT}
|
|
110
|
+
|
|
111
|
+
[statd]
|
|
112
|
+
port=${NFS_STATD_PORT}
|
|
113
|
+
outgoing-port=${NFS_STATD_OUTGOING_PORT}
|
|
114
|
+
|
|
115
|
+
[lockd]
|
|
116
|
+
port=${NFS_LOCKD_PORT}
|
|
117
|
+
udp-port=${NFS_LOCKD_UDP_PORT}
|
|
118
|
+
EOF
|
|
119
|
+
|
|
120
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-service=rpc-bind
|
|
121
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port=2049/tcp
|
|
122
|
+
for proto in tcp udp; do
|
|
123
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_MOUNTD_PORT}/${proto}"
|
|
124
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_STATD_PORT}/${proto}"
|
|
125
|
+
# Outgoing port is the fixed source for SM_NOTIFY; peers need to reach it.
|
|
126
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_STATD_OUTGOING_PORT}/${proto}"
|
|
127
|
+
done
|
|
128
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_LOCKD_PORT}/tcp"
|
|
129
|
+
sudo firewall-cmd --permanent --zone="${TRUSTED_ZONE}" --add-port="${NFS_LOCKD_UDP_PORT}/udp"
|
|
130
|
+
fi
|
|
131
|
+
|
|
132
|
+
ensure_nfs_server_running
|
|
133
|
+
|
|
134
|
+
echo "[INFO] Reloading firewall..."
|
|
135
|
+
sudo firewall-cmd --reload
|
|
136
|
+
|
|
137
|
+
echo
|
|
138
|
+
echo "[INFO] Firewall status:"
|
|
139
|
+
sudo firewall-cmd --zone="${PUBLIC_ZONE}" --list-all
|
|
140
|
+
echo
|
|
141
|
+
echo "[INFO] MAAS LAN zone (${TRUSTED_ZONE}):"
|
|
142
|
+
sudo firewall-cmd --zone="${TRUSTED_ZONE}" --list-all
|
|
143
|
+
|
|
144
|
+
echo
|
|
145
|
+
echo "[INFO] MAAS NAT + firewall configuration completed."
|
|
@@ -4,39 +4,44 @@ import express from 'express';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
async (req, res) => await AtlasSpriteSheetController.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
7
|
+
class AtlasSpriteSheetRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(
|
|
15
|
+
`/generate/:id`,
|
|
16
|
+
options.authMiddleware,
|
|
17
|
+
async (req, res) => await AtlasSpriteSheetController.generate(req, res, options),
|
|
18
|
+
);
|
|
19
|
+
router.delete(
|
|
20
|
+
`/object-layer/:id`,
|
|
21
|
+
options.authMiddleware,
|
|
22
|
+
async (req, res) => await AtlasSpriteSheetController.deleteByObjectLayerId(req, res, options),
|
|
23
|
+
);
|
|
24
|
+
router.post(`/:id`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
|
|
25
|
+
router.post(`/`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.post(req, res, options));
|
|
26
|
+
router.get(`/blob/:itemKey`, async (req, res) => await AtlasSpriteSheetController.blob(req, res, options));
|
|
27
|
+
// Metadata endpoints: returns itemKey, atlasWidth, atlasHeight, cellPixelDim, frames (no fileId).
|
|
28
|
+
// Client fetches /metadata/:itemKey once, caches it, then fetches /blob/:itemKey for the PNG.
|
|
29
|
+
router.get(`/metadata/:itemKey`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
|
|
30
|
+
router.get(`/metadata`, async (req, res) => await AtlasSpriteSheetController.getMetadata(req, res, options));
|
|
31
|
+
router.get(
|
|
32
|
+
`/:id`,
|
|
33
|
+
// options.authMiddleware,
|
|
34
|
+
async (req, res) => await AtlasSpriteSheetController.get(req, res, options),
|
|
35
|
+
);
|
|
36
|
+
router.get(`/`, async (req, res) => await AtlasSpriteSheetController.get(req, res, options));
|
|
37
|
+
router.put(`/:id`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.put(req, res, options));
|
|
38
|
+
router.put(`/`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.put(req, res, options));
|
|
39
|
+
router.delete(`/:id`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.delete(req, res, options));
|
|
40
|
+
router.delete(`/`, options.authMiddleware, async (req, res) => await AtlasSpriteSheetController.delete(req, res, options));
|
|
41
|
+
return router;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
39
44
|
|
|
40
|
-
const ApiRouter = AtlasSpriteSheetRouter;
|
|
45
|
+
const ApiRouter = (options) => AtlasSpriteSheetRouter.router(options);
|
|
41
46
|
|
|
42
47
|
export { ApiRouter, AtlasSpriteSheetRouter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
2
|
import { loggerFactory } from '../../server/logger.js';
|
|
3
3
|
import { DataQuery } from '../../server/data-query.js';
|
|
4
4
|
import { AtlasSpriteSheetGenerator } from '../../server/atlas-sprite-sheet-generator.js';
|
|
@@ -55,9 +55,9 @@ class AtlasSpriteSheetService {
|
|
|
55
55
|
static blob = async (req, res, options) => {
|
|
56
56
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
57
57
|
const AtlasSpriteSheet =
|
|
58
|
-
|
|
58
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
59
59
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
60
|
-
const File =
|
|
60
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
61
61
|
|
|
62
62
|
const itemKey = req.params.itemKey;
|
|
63
63
|
const atlasDoc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': itemKey }).lean();
|
|
@@ -70,12 +70,12 @@ class AtlasSpriteSheetService {
|
|
|
70
70
|
};
|
|
71
71
|
static generate = async (req, res, options, generateOptions = {}) => {
|
|
72
72
|
/** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
|
|
73
|
-
const ObjectLayer =
|
|
73
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
74
74
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
75
|
-
const File =
|
|
75
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
76
76
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
77
77
|
const AtlasSpriteSheet =
|
|
78
|
-
|
|
78
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
79
79
|
|
|
80
80
|
let objectLayer = req.objectLayer;
|
|
81
81
|
|
|
@@ -195,12 +195,12 @@ class AtlasSpriteSheetService {
|
|
|
195
195
|
};
|
|
196
196
|
static deleteByObjectLayerId = async (req, res, options) => {
|
|
197
197
|
/** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
|
|
198
|
-
const ObjectLayer =
|
|
198
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
199
199
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
200
|
-
const File =
|
|
200
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
201
201
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
202
202
|
const AtlasSpriteSheet =
|
|
203
|
-
|
|
203
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
204
204
|
|
|
205
205
|
const objectLayer = await ObjectLayer.findById(req.params.id);
|
|
206
206
|
if (!objectLayer) {
|
|
@@ -255,13 +255,13 @@ class AtlasSpriteSheetService {
|
|
|
255
255
|
static post = async (req, res, options) => {
|
|
256
256
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
257
257
|
const AtlasSpriteSheet =
|
|
258
|
-
|
|
258
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
259
259
|
return await new AtlasSpriteSheet(req.body).save();
|
|
260
260
|
};
|
|
261
261
|
static get = async (req, res, options) => {
|
|
262
262
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
263
263
|
const AtlasSpriteSheet =
|
|
264
|
-
|
|
264
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
265
265
|
if (req.params.id)
|
|
266
266
|
return await AtlasSpriteSheet.findById(req.params.id)
|
|
267
267
|
.select(AtlasSpriteSheetDto.select.get())
|
|
@@ -287,10 +287,10 @@ class AtlasSpriteSheetService {
|
|
|
287
287
|
// Client fetches this once per itemKey, caches it, then fetches the PNG blob.
|
|
288
288
|
static getMetadata = async (req, res, options) => {
|
|
289
289
|
/** @type {import('../object-layer/object-layer.model.js').ObjectLayerModel} */
|
|
290
|
-
const ObjectLayer =
|
|
290
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
291
291
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
292
292
|
const AtlasSpriteSheet =
|
|
293
|
-
|
|
293
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
294
294
|
|
|
295
295
|
if (req.params.itemKey) {
|
|
296
296
|
const doc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': req.params.itemKey })
|
|
@@ -329,15 +329,15 @@ class AtlasSpriteSheetService {
|
|
|
329
329
|
static put = async (req, res, options) => {
|
|
330
330
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
331
331
|
const AtlasSpriteSheet =
|
|
332
|
-
|
|
332
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
333
333
|
return await AtlasSpriteSheet.findByIdAndUpdate(req.params.id, req.body);
|
|
334
334
|
};
|
|
335
335
|
static delete = async (req, res, options) => {
|
|
336
336
|
/** @type {import('./atlas-sprite-sheet.model.js').AtlasSpriteSheetModel} */
|
|
337
337
|
const AtlasSpriteSheet =
|
|
338
|
-
|
|
338
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
339
339
|
/** @type {import('../file/file.model.js').FileModel} */
|
|
340
|
-
const File =
|
|
340
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
341
341
|
|
|
342
342
|
if (req.params.id) {
|
|
343
343
|
const atlasDoc = await AtlasSpriteSheet.findById(req.params.id);
|
|
@@ -5,20 +5,25 @@ import express from 'express';
|
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
router
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
8
|
+
class CoreRouter {
|
|
9
|
+
/**
|
|
10
|
+
* @param {import('../types.js').RouterOptions} options
|
|
11
|
+
* @returns {import('express').Router}
|
|
12
|
+
*/
|
|
13
|
+
static router(options) {
|
|
14
|
+
const router = express.Router();
|
|
15
|
+
router.post(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
|
|
16
|
+
router.post(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.post(req, res, options));
|
|
17
|
+
router.get(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
|
|
18
|
+
router.get(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.get(req, res, options));
|
|
19
|
+
router.put(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
|
|
20
|
+
router.put(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.put(req, res, options));
|
|
21
|
+
router.delete(`/:id`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
|
|
22
|
+
router.delete(`/`, options.authMiddleware, adminGuard, async (req, res) => await CoreController.delete(req, res, options));
|
|
23
|
+
return router;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
21
26
|
|
|
22
|
-
const ApiRouter = CoreRouter;
|
|
27
|
+
const ApiRouter = (options) => CoreRouter.router(options);
|
|
23
28
|
|
|
24
29
|
export { ApiRouter, CoreRouter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
2
|
import { loggerFactory } from '../../server/logger.js';
|
|
3
3
|
import { shellExec } from '../../server/process.js';
|
|
4
4
|
|
|
@@ -7,22 +7,22 @@ const logger = loggerFactory(import.meta);
|
|
|
7
7
|
class CoreService {
|
|
8
8
|
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./core.model.js').CoreModel} */
|
|
10
|
-
const Core =
|
|
10
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
11
11
|
return await new Core(req.body).save();
|
|
12
12
|
};
|
|
13
13
|
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./core.model.js').CoreModel} */
|
|
15
|
-
const Core =
|
|
15
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
16
16
|
return await Core.findById(req.params.id);
|
|
17
17
|
};
|
|
18
18
|
static put = async (req, res, options) => {
|
|
19
19
|
/** @type {import('./core.model.js').CoreModel} */
|
|
20
|
-
const Core =
|
|
20
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
21
21
|
return await Core.findByIdAndUpdate(req.params.id, req.body);
|
|
22
22
|
};
|
|
23
23
|
static delete = async (req, res, options) => {
|
|
24
24
|
/** @type {import('./core.model.js').CoreModel} */
|
|
25
|
-
const Core =
|
|
25
|
+
const Core = DataBaseProviderService.getModel("Core", options);
|
|
26
26
|
return await Core.findByIdAndDelete(req.params.id);
|
|
27
27
|
};
|
|
28
28
|
}
|
|
@@ -1,20 +1,26 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import { CryptoController } from './crypto.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
+
|
|
4
5
|
const logger = loggerFactory(import.meta);
|
|
5
6
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
router
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
class CryptoRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(`/:id`, async (req, res) => await CryptoController.post(req, res, options));
|
|
15
|
+
router.post(`/`, options.authMiddleware, async (req, res) => await CryptoController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`, async (req, res) => await CryptoController.get(req, res, options));
|
|
17
|
+
router.get(`/`, async (req, res) => await CryptoController.get(req, res, options));
|
|
18
|
+
router.delete(`/:id`, async (req, res) => await CryptoController.delete(req, res, options));
|
|
19
|
+
router.delete(`/`, async (req, res) => await CryptoController.delete(req, res, options));
|
|
20
|
+
return router;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
17
23
|
|
|
18
|
-
const ApiRouter = CryptoRouter;
|
|
24
|
+
const ApiRouter = (options) => CryptoRouter.router(options);
|
|
19
25
|
|
|
20
26
|
export { ApiRouter, CryptoRouter };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import crypto from 'crypto';
|
|
3
|
-
import {
|
|
3
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
6
|
class CryptoService {
|
|
7
7
|
static post = async (req, res, options) => {
|
|
8
8
|
/** @type {import('./crypto.model.js').CryptoModel} */
|
|
9
|
-
const Crypto =
|
|
9
|
+
const Crypto = DataBaseProviderService.getModel("Crypto", options);
|
|
10
10
|
/** @type {import('../user/user.model.js').UserModel} */
|
|
11
|
-
const User =
|
|
11
|
+
const User = DataBaseProviderService.getModel("User", options);
|
|
12
12
|
|
|
13
13
|
switch (req.params.id) {
|
|
14
14
|
case 'verify': {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Schema, model } from 'mongoose';
|
|
2
|
-
import { CYBERIA_ACTION_TYPES } from '../../client/components/cyberia
|
|
2
|
+
import { CYBERIA_ACTION_TYPES } from '../../client/components/cyberia/SharedDefaultsCyberia.js';
|
|
3
3
|
|
|
4
4
|
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
5
5
|
|
|
@@ -4,24 +4,28 @@ import express from 'express';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
router
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
async (req, res) => await CyberiaActionController.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
class CyberiaActionRouter {
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('../types.js').RouterOptions} options
|
|
10
|
+
* @returns {import('express').Router}
|
|
11
|
+
*/
|
|
12
|
+
static router(options) {
|
|
13
|
+
const router = express.Router();
|
|
14
|
+
router.post(`/:id`, async (req, res) => await CyberiaActionController.post(req, res, options));
|
|
15
|
+
router.post(`/`, async (req, res) => await CyberiaActionController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`,
|
|
17
|
+
// options.authMiddleware,
|
|
18
|
+
async (req, res) => await CyberiaActionController.get(req, res, options),
|
|
19
|
+
);
|
|
20
|
+
router.get(`/`, async (req, res) => await CyberiaActionController.get(req, res, options));
|
|
21
|
+
router.put(`/:id`, async (req, res) => await CyberiaActionController.put(req, res, options));
|
|
22
|
+
router.put(`/`, async (req, res) => await CyberiaActionController.put(req, res, options));
|
|
23
|
+
router.delete(`/:id`, async (req, res) => await CyberiaActionController.delete(req, res, options));
|
|
24
|
+
router.delete(`/`, async (req, res) => await CyberiaActionController.delete(req, res, options));
|
|
25
|
+
return router;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
24
28
|
|
|
25
|
-
const ApiRouter = CyberiaActionRouter;
|
|
29
|
+
const ApiRouter = (options) => CyberiaActionRouter.router(options);
|
|
26
30
|
|
|
27
31
|
export { ApiRouter, CyberiaActionRouter };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
2
|
import { loggerFactory } from '../../server/logger.js';
|
|
3
3
|
import { DataQuery } from '../../server/data-query.js';
|
|
4
4
|
|
|
@@ -7,12 +7,12 @@ const logger = loggerFactory(import.meta);
|
|
|
7
7
|
class CyberiaActionService {
|
|
8
8
|
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
10
|
-
const CyberiaAction =
|
|
10
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
11
11
|
return await new CyberiaAction(req.body).save();
|
|
12
12
|
};
|
|
13
13
|
static get = async (req, res, options) => {
|
|
14
14
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
15
|
-
const CyberiaAction =
|
|
15
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
16
16
|
if (req.params.id) return await CyberiaAction.findById(req.params.id);
|
|
17
17
|
|
|
18
18
|
// Parse query parameters using DataQuery helper
|
|
@@ -28,12 +28,12 @@ class CyberiaActionService {
|
|
|
28
28
|
};
|
|
29
29
|
static put = async (req, res, options) => {
|
|
30
30
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
31
|
-
const CyberiaAction =
|
|
31
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
32
32
|
return await CyberiaAction.findByIdAndUpdate(req.params.id, req.body);
|
|
33
33
|
};
|
|
34
34
|
static delete = async (req, res, options) => {
|
|
35
35
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
36
|
-
const CyberiaAction =
|
|
36
|
+
const CyberiaAction = DataBaseProviderService.getModel("CyberiaAction", options);
|
|
37
37
|
if (req.params.id) return await CyberiaAction.findByIdAndDelete(req.params.id);
|
|
38
38
|
else return await CyberiaAction.deleteMany();
|
|
39
39
|
};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaClientHintsService } from './cyberia-client-hints.service.js';
|
|
3
|
+
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
|
|
6
|
+
class CyberiaClientHintsController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
|
+
try {
|
|
9
|
+
const result = await CyberiaClientHintsService.post(req, res, options);
|
|
10
|
+
return res.status(200).json({
|
|
11
|
+
status: 'success',
|
|
12
|
+
data: result,
|
|
13
|
+
});
|
|
14
|
+
} catch (error) {
|
|
15
|
+
logger.error(error, error.stack);
|
|
16
|
+
return res.status(400).json({
|
|
17
|
+
status: 'error',
|
|
18
|
+
message: error.message,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
|
+
try {
|
|
24
|
+
const { page, limit } = req.query;
|
|
25
|
+
const result = await CyberiaClientHintsService.get(
|
|
26
|
+
{ ...req, query: { ...req.query, page: parseInt(page), limit: parseInt(limit) } },
|
|
27
|
+
res,
|
|
28
|
+
options,
|
|
29
|
+
);
|
|
30
|
+
return res.status(200).json({
|
|
31
|
+
status: 'success',
|
|
32
|
+
data: result,
|
|
33
|
+
});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
logger.error(error, error.stack);
|
|
36
|
+
return res.status(400).json({
|
|
37
|
+
status: 'error',
|
|
38
|
+
message: error.message,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await CyberiaClientHintsService.put(req, res, options);
|
|
45
|
+
return res.status(200).json({
|
|
46
|
+
status: 'success',
|
|
47
|
+
data: result,
|
|
48
|
+
});
|
|
49
|
+
} catch (error) {
|
|
50
|
+
logger.error(error, error.stack);
|
|
51
|
+
return res.status(400).json({
|
|
52
|
+
status: 'error',
|
|
53
|
+
message: error.message,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await CyberiaClientHintsService.delete(req, res, options);
|
|
60
|
+
return res.status(200).json({
|
|
61
|
+
status: 'success',
|
|
62
|
+
data: result,
|
|
63
|
+
});
|
|
64
|
+
} catch (error) {
|
|
65
|
+
logger.error(error, error.stack);
|
|
66
|
+
return res.status(400).json({
|
|
67
|
+
status: 'error',
|
|
68
|
+
message: error.message,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export { CyberiaClientHintsController };
|