cyberia 3.2.12 → 3.2.70
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/.env.example +127 -68
- 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 +49 -0
- package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +48 -0
- package/.github/workflows/docker-image.cyberia-server.ci.yml +69 -0
- package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +69 -0
- package/.github/workflows/docker-image.engine-cyberia.ci.yml +52 -0
- package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +52 -0
- package/.github/workflows/engine-cyberia.cd.yml +34 -24
- package/.github/workflows/engine-cyberia.ci.yml +27 -5
- package/.github/workflows/ghpkg.ci.yml +89 -1
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +1 -1
- package/.github/workflows/npmpkg.ci.yml +19 -12
- package/.github/workflows/publish.ci.yml +2 -2
- package/.github/workflows/publish.cyberia.ci.yml +5 -16
- package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -8
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/CHANGELOG.md +451 -1
- package/CLI-HELP.md +1040 -1130
- package/Dockerfile +141 -43
- package/Dockerfile.dev +143 -0
- package/Dockerfile.test +165 -0
- package/README.md +1 -1
- package/baremetal/commission-workflows.json +1 -0
- package/bin/build.js +128 -136
- package/bin/build.template.js +25 -179
- package/bin/cyberia.js +1089 -188
- package/bin/deploy.js +6 -3
- package/bin/index.js +1089 -188
- package/bump.config.js +1 -0
- package/compose.env +131 -0
- package/conf.js +19 -1
- package/deployment.yaml +74 -2
- package/docker-compose.yml +316 -0
- package/hardhat/hardhat.config.js +2 -2
- package/hardhat/package-lock.json +620 -2041
- package/hardhat/package.json +7 -5
- package/hardhat/scripts/deployObjectLayerToken.js +18 -18
- package/hardhat/test/ObjectLayerToken.js +378 -274
- package/ipfs/configure-ipfs.sh +13 -0
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +74 -2
- package/manifests/deployment/dd-cyberia-development/grpc-service.yaml +17 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +32 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/mongodb/entrypoint.sh +76 -0
- package/nginx.conf +87 -0
- package/package.json +34 -22
- package/pv-pvc.yaml +32 -0
- package/scripts/disk-clean.sh +85 -60
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/rocky-kickstart.sh +877 -185
- package/scripts/rpmfusion-ffmpeg-setup.sh +26 -50
- package/scripts/test-monitor.sh +248 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +43 -7
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +17 -25
- package/src/api/cyberia-action/cyberia-action.controller.js +19 -0
- package/src/api/cyberia-action/cyberia-action.model.js +21 -29
- package/src/api/cyberia-action/cyberia-action.router.js +42 -7
- package/src/api/cyberia-action/cyberia-action.service.js +20 -4
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +58 -57
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +37 -6
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +8 -2
- package/src/api/cyberia-entity/cyberia-entity.router.js +39 -7
- package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +74 -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 +63 -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 +62 -10
- package/src/api/cyberia-instance/cyberia-instance.model.js +32 -2
- package/src/api/cyberia-instance/cyberia-instance.router.js +6 -6
- package/src/api/cyberia-instance/cyberia-world-generator.js +116 -3
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +3 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +39 -7
- package/src/api/cyberia-map/cyberia-map.router.js +21 -6
- package/src/api/cyberia-quest/cyberia-quest.controller.js +38 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +47 -7
- package/src/api/cyberia-quest/cyberia-quest.service.js +59 -4
- package/src/api/cyberia-saga/cyberia-saga.controller.js +74 -0
- package/src/api/cyberia-saga/cyberia-saga.model.js +59 -0
- package/src/api/cyberia-saga/cyberia-saga.router.js +63 -0
- package/src/api/cyberia-saga/cyberia-saga.service.js +42 -0
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +551 -122
- package/src/api/cyberia-skill/cyberia-skill.controller.js +74 -0
- package/src/api/cyberia-skill/cyberia-skill.model.js +50 -0
- package/src/api/cyberia-skill/cyberia-skill.router.js +63 -0
- package/src/api/cyberia-skill/cyberia-skill.service.js +42 -0
- package/src/api/ipfs/ipfs.service.js +28 -15
- package/src/api/object-layer/object-layer.router.js +25 -15
- package/src/api/object-layer/object-layer.service.js +15 -20
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +39 -7
- package/src/cli/baremetal.js +717 -16
- package/src/cli/cluster.js +80 -5
- package/src/cli/deploy.js +326 -292
- package/src/cli/docker-compose.js +648 -0
- package/src/cli/env.js +12 -6
- package/src/cli/fs.js +75 -30
- package/src/cli/image.js +187 -55
- package/src/cli/index.js +157 -6
- package/src/cli/kickstart.js +142 -20
- package/src/cli/monitor.js +387 -6
- package/src/cli/release.js +72 -15
- package/src/cli/repository.js +339 -40
- package/src/cli/run.js +678 -186
- package/src/cli/secrets.js +82 -48
- package/src/cli/ssh.js +234 -0
- package/src/cli/static.js +2 -2
- package/src/client/components/core/PanelForm.js +44 -44
- 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 +219 -13
- package/src/client/components/cyberia/MapEngineCyberia.js +154 -71
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +40 -63
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +34 -20
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +195 -4
- package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +66 -0
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +8 -0
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +8 -0
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +92 -20
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +272 -50
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +3 -3
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +39 -22
- package/src/client/public/cyberia-docs/CYBERIA-LORE.md +88 -0
- package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +394 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +28 -12
- package/src/client/public/cyberia-docs/CYBERIA.md +1 -1
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +27 -5
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- 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 +2 -2
- package/src/client/services/cyberia-map/cyberia-map.management.js +2 -2
- 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/object-layer/object-layer.management.js +6 -6
- package/src/{server → client-builder}/client-build-docs.js +15 -5
- package/src/{server → client-builder}/client-build-live.js +3 -3
- package/src/{server → client-builder}/client-build.js +25 -22
- package/src/{server → client-builder}/client-dev-server.js +3 -3
- package/src/{server → client-builder}/client-icons.js +2 -2
- package/src/{server → client-builder}/ssr.js +5 -5
- package/src/client.build.js +1 -3
- package/src/client.dev.js +1 -1
- package/src/db/mongo/MongoBootstrap.js +12 -12
- package/src/db/mongo/MongooseDB.js +2 -1
- package/src/grpc/cyberia/grpc-server.js +255 -70
- package/src/index.js +12 -1
- package/src/mailer/EmailRender.js +1 -1
- package/src/{server → projects/cyberia}/atlas-sprite-sheet-generator.js +2 -2
- package/src/{server → projects/cyberia}/besu-genesis-generator.js +3 -3
- package/src/projects/cyberia/catalog-cyberia.js +81 -0
- package/src/projects/cyberia/gemini-client.js +175 -0
- package/src/projects/cyberia/generate-saga.js +2107 -0
- package/src/{server → projects/cyberia}/ipfs-client.js +6 -4
- package/src/{server → projects/cyberia}/object-layer.js +12 -108
- package/src/{server → projects/cyberia}/semantic-layer-generator-floor.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator-resource.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator-skin.js +1 -1
- package/src/{server → projects/cyberia}/semantic-layer-generator.js +2 -2
- package/src/{server → projects/cyberia}/shape-generator.js +2 -2
- package/src/projects/underpost/catalog-underpost.js +60 -0
- package/src/runtime/cyberia-client/Dockerfile +31 -83
- package/src/runtime/cyberia-client/Dockerfile.dev +23 -30
- package/src/runtime/cyberia-server/Dockerfile +23 -42
- package/src/runtime/cyberia-server/Dockerfile.dev +20 -35
- package/src/runtime/engine-cyberia/Dockerfile +143 -0
- package/src/runtime/engine-cyberia/Dockerfile.dev +143 -0
- package/src/runtime/engine-cyberia/Dockerfile.test +165 -0
- package/src/runtime/engine-cyberia/compose.env +131 -0
- package/src/runtime/engine-cyberia/docker-compose.yml +316 -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 +87 -0
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/nginx/Nginx.js +250 -0
- package/src/runtime/wp/Dockerfile +3 -3
- package/src/server/catalog.js +72 -0
- package/src/server/conf.js +415 -60
- package/src/server/runtime-status.js +252 -0
- package/src/server/start.js +42 -11
- package/src/server.js +6 -2
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +267 -0
- package/test/shape-generator.test.js +7 -1
- package/typedoc.dd-cyberia.json +3 -1
- package/typedoc.json +3 -1
- package/manifests/deployment/dd-test-development/deployment.yaml +0 -256
- package/manifests/deployment/dd-test-development/proxy.yaml +0 -102
- /package/src/client/ssr/{Render.js → RootDocument.js} +0 -0
- /package/src/{server → client-builder}/client-formatted.js +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import { CyberiaActionController } from './cyberia-action.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
+
import { moderatorGuard, adminGuard } from '../../server/auth.js';
|
|
4
5
|
|
|
5
6
|
const logger = loggerFactory(import.meta);
|
|
6
7
|
|
|
@@ -11,17 +12,51 @@ class CyberiaActionRouter {
|
|
|
11
12
|
*/
|
|
12
13
|
static router(options) {
|
|
13
14
|
const router = express.Router();
|
|
14
|
-
router.post(
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
router.post(
|
|
16
|
+
`/:id`,
|
|
17
|
+
options.authMiddleware,
|
|
18
|
+
moderatorGuard,
|
|
19
|
+
async (req, res) => await CyberiaActionController.post(req, res, options),
|
|
20
|
+
);
|
|
21
|
+
router.post(
|
|
22
|
+
`/`,
|
|
23
|
+
options.authMiddleware,
|
|
24
|
+
moderatorGuard,
|
|
25
|
+
async (req, res) => await CyberiaActionController.post(req, res, options),
|
|
26
|
+
);
|
|
27
|
+
// Direct lookup by code — the client fetches an NPC's action metadata
|
|
28
|
+
// (label, dialogue map) by the action code the Go server sends over AOI.
|
|
29
|
+
router.get(`/code/:code`, async (req, res) => await CyberiaActionController.getByCode(req, res, options));
|
|
30
|
+
router.get(
|
|
31
|
+
`/:id`,
|
|
17
32
|
// options.authMiddleware,
|
|
18
33
|
async (req, res) => await CyberiaActionController.get(req, res, options),
|
|
19
34
|
);
|
|
20
35
|
router.get(`/`, async (req, res) => await CyberiaActionController.get(req, res, options));
|
|
21
|
-
router.put(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
36
|
+
router.put(
|
|
37
|
+
`/:id`,
|
|
38
|
+
options.authMiddleware,
|
|
39
|
+
moderatorGuard,
|
|
40
|
+
async (req, res) => await CyberiaActionController.put(req, res, options),
|
|
41
|
+
);
|
|
42
|
+
router.put(
|
|
43
|
+
`/`,
|
|
44
|
+
options.authMiddleware,
|
|
45
|
+
moderatorGuard,
|
|
46
|
+
async (req, res) => await CyberiaActionController.put(req, res, options),
|
|
47
|
+
);
|
|
48
|
+
router.delete(
|
|
49
|
+
`/:id`,
|
|
50
|
+
options.authMiddleware,
|
|
51
|
+
moderatorGuard,
|
|
52
|
+
async (req, res) => await CyberiaActionController.delete(req, res, options),
|
|
53
|
+
);
|
|
54
|
+
router.delete(
|
|
55
|
+
`/`,
|
|
56
|
+
options.authMiddleware,
|
|
57
|
+
adminGuard,
|
|
58
|
+
async (req, res) => await CyberiaActionController.delete(req, res, options),
|
|
59
|
+
);
|
|
25
60
|
return router;
|
|
26
61
|
}
|
|
27
62
|
}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
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
|
+
import { DefaultCyberiaActions } from '../cyberia-server-defaults/cyberia-server-defaults.js';
|
|
4
5
|
|
|
5
6
|
const logger = loggerFactory(import.meta);
|
|
6
7
|
|
|
7
8
|
class CyberiaActionService {
|
|
8
9
|
static post = async (req, res, options) => {
|
|
9
10
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
10
|
-
const CyberiaAction = DataBaseProviderService.getModel(
|
|
11
|
+
const CyberiaAction = DataBaseProviderService.getModel('CyberiaAction', options);
|
|
11
12
|
return await new CyberiaAction(req.body).save();
|
|
12
13
|
};
|
|
13
14
|
static get = async (req, res, options) => {
|
|
14
15
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
15
|
-
const CyberiaAction = DataBaseProviderService.getModel(
|
|
16
|
+
const CyberiaAction = DataBaseProviderService.getModel('CyberiaAction', options);
|
|
16
17
|
if (req.params.id) return await CyberiaAction.findById(req.params.id);
|
|
17
18
|
|
|
18
19
|
// Parse query parameters using DataQuery helper
|
|
@@ -26,14 +27,29 @@ class CyberiaActionService {
|
|
|
26
27
|
const totalPages = Math.ceil(total / limit);
|
|
27
28
|
return { data, total, page, totalPages };
|
|
28
29
|
};
|
|
30
|
+
static getByCode = async (req, res, options) => {
|
|
31
|
+
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
32
|
+
const CyberiaAction = DataBaseProviderService.getModel('CyberiaAction', options);
|
|
33
|
+
const { code } = req.params;
|
|
34
|
+
if (!code) throw new Error('code parameter is required');
|
|
35
|
+
const data = await CyberiaAction.findOne({ code }).lean();
|
|
36
|
+
if (data) return data;
|
|
37
|
+
// Fallback world delivers actions to the Go server from the canonical
|
|
38
|
+
// defaults without persisting them; serve those so the client can fetch the
|
|
39
|
+
// action's label + dialogue map by code. Quest OFFERS are NOT resolved here —
|
|
40
|
+
// the client locates offered quests via the cyberia-quest API by cell.
|
|
41
|
+
const fallback = DefaultCyberiaActions.find((a) => a.code === code);
|
|
42
|
+
if (fallback) return fallback;
|
|
43
|
+
throw new Error(`No action found for code: ${code}`);
|
|
44
|
+
};
|
|
29
45
|
static put = async (req, res, options) => {
|
|
30
46
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
31
|
-
const CyberiaAction = DataBaseProviderService.getModel(
|
|
47
|
+
const CyberiaAction = DataBaseProviderService.getModel('CyberiaAction', options);
|
|
32
48
|
return await CyberiaAction.findByIdAndUpdate(req.params.id, req.body);
|
|
33
49
|
};
|
|
34
50
|
static delete = async (req, res, options) => {
|
|
35
51
|
/** @type {import('./cyberia-action.model.js').CyberiaActionModel} */
|
|
36
|
-
const CyberiaAction = DataBaseProviderService.getModel(
|
|
52
|
+
const CyberiaAction = DataBaseProviderService.getModel('CyberiaAction', options);
|
|
37
53
|
if (req.params.id) return await CyberiaAction.findByIdAndDelete(req.params.id);
|
|
38
54
|
else return await CyberiaAction.deleteMany();
|
|
39
55
|
};
|
|
@@ -18,82 +18,83 @@
|
|
|
18
18
|
import { Schema, model } from 'mongoose';
|
|
19
19
|
|
|
20
20
|
const ColorRgbaSchema = new Schema(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
{
|
|
22
|
+
r: { type: Number, default: 0 },
|
|
23
|
+
g: { type: Number, default: 0 },
|
|
24
|
+
b: { type: Number, default: 0 },
|
|
25
|
+
a: { type: Number, default: 255 },
|
|
26
|
+
},
|
|
27
|
+
{ _id: false },
|
|
28
28
|
);
|
|
29
29
|
|
|
30
30
|
const PaletteEntrySchema = new Schema(
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
{
|
|
32
|
+
key: { type: String, required: true },
|
|
33
|
+
r: { type: Number, default: 0 },
|
|
34
|
+
g: { type: Number, default: 0 },
|
|
35
|
+
b: { type: Number, default: 0 },
|
|
36
|
+
a: { type: Number, default: 255 },
|
|
37
|
+
},
|
|
38
|
+
{ _id: false },
|
|
39
39
|
);
|
|
40
40
|
|
|
41
41
|
const StatusIconHintSchema = new Schema(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
{
|
|
43
|
+
id: { type: Number, required: true },
|
|
44
|
+
iconId: { type: String, default: '' },
|
|
45
|
+
bounce: { type: Boolean, default: false },
|
|
46
|
+
borderColor: { type: ColorRgbaSchema, default: () => ({ r: 100, g: 100, b: 100, a: 200 }) },
|
|
47
|
+
},
|
|
48
|
+
{ _id: false },
|
|
49
49
|
);
|
|
50
50
|
|
|
51
51
|
const EntityColorKeySchema = new Schema(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
{
|
|
53
|
+
entityType: { type: String, required: true },
|
|
54
|
+
colorKey: { type: String, required: true },
|
|
55
|
+
},
|
|
56
|
+
{ _id: false },
|
|
57
57
|
);
|
|
58
58
|
|
|
59
59
|
const CyberiaClientHintsSchema = new Schema(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
{
|
|
61
|
+
// Instance code this hint set is scoped to. Matches CyberiaInstance.code
|
|
62
|
+
// and CyberiaInstanceConf.instanceCode. Indexed and unique to make the
|
|
63
|
+
// service-layer cache a 1-to-1 keyed lookup.
|
|
64
|
+
code: { type: String, required: true, unique: true, index: true },
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
// Optional palette overrides. Keys not present here fall back to the
|
|
67
|
+
// client's compile-time defaults.
|
|
68
|
+
palette: { type: [PaletteEntrySchema], default: [] },
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
// Optional per-entity-type color-key overrides.
|
|
71
|
+
entityColorKeys: { type: [EntityColorKeySchema], default: [] },
|
|
72
72
|
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
// Optional status-icon visual overrides (id → iconId + borderColor).
|
|
74
|
+
statusIcons: { type: [StatusIconHintSchema], default: [] },
|
|
75
75
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
76
|
+
// Camera, viewport, and cell-sizing tunings — null/undefined means
|
|
77
|
+
// "use the SharedDefaultsCyberia.RENDER_DEFAULTS value".
|
|
78
|
+
cellSize: { type: Number, default: null },
|
|
79
|
+
defaultObjWidth: { type: Number, default: null },
|
|
80
|
+
defaultObjHeight: { type: Number, default: null },
|
|
81
|
+
cameraSmoothing: { type: Number, default: null },
|
|
82
|
+
cameraZoom: { type: Number, default: null },
|
|
83
|
+
defaultWidthScreenFactor: { type: Number, default: null },
|
|
84
|
+
defaultHeightScreenFactor: { type: Number, default: null },
|
|
85
|
+
interpolationMs: { type: Number, default: null },
|
|
86
|
+
devUi: { type: Boolean, default: null },
|
|
87
|
+
|
|
88
|
+
// Main UI font: TTF file name under engine assets/fonts/ (null = built-in
|
|
89
|
+
// raylib font) and a uniform text-size multiplier.
|
|
90
|
+
fontFamily: { type: String, default: null },
|
|
91
|
+
fontFactorSize: { type: Number, default: null },
|
|
92
|
+
},
|
|
93
|
+
{ timestamps: true },
|
|
89
94
|
);
|
|
90
95
|
|
|
91
96
|
const CyberiaClientHintsModel = model('CyberiaClientHints', CyberiaClientHintsSchema);
|
|
92
97
|
|
|
93
98
|
const ProviderSchema = CyberiaClientHintsSchema;
|
|
94
99
|
|
|
95
|
-
export {
|
|
96
|
-
CyberiaClientHintsSchema,
|
|
97
|
-
CyberiaClientHintsModel,
|
|
98
|
-
ProviderSchema,
|
|
99
|
-
};
|
|
100
|
+
export { CyberiaClientHintsSchema, CyberiaClientHintsModel, ProviderSchema };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import { CyberiaDialogueController } from './cyberia-dialogue.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
+
import { moderatorGuard, adminGuard } from '../../server/auth.js';
|
|
4
5
|
|
|
5
6
|
const logger = loggerFactory(import.meta);
|
|
6
7
|
|
|
@@ -11,8 +12,18 @@ class CyberiaDialogueRouter {
|
|
|
11
12
|
*/
|
|
12
13
|
static router(options) {
|
|
13
14
|
const router = express.Router();
|
|
14
|
-
router.post(
|
|
15
|
-
|
|
15
|
+
router.post(
|
|
16
|
+
`/:id`,
|
|
17
|
+
options.authMiddleware,
|
|
18
|
+
moderatorGuard,
|
|
19
|
+
async (req, res) => await CyberiaDialogueController.post(req, res, options),
|
|
20
|
+
);
|
|
21
|
+
router.post(
|
|
22
|
+
`/`,
|
|
23
|
+
options.authMiddleware,
|
|
24
|
+
moderatorGuard,
|
|
25
|
+
async (req, res) => await CyberiaDialogueController.post(req, res, options),
|
|
26
|
+
);
|
|
16
27
|
// Direct lookup by code — C client fetches dialogue by code (e.g. "default-lain")
|
|
17
28
|
router.get(`/code/:code`, async (req, res) => await CyberiaDialogueController.getByCode(req, res, options));
|
|
18
29
|
router.get(
|
|
@@ -21,10 +32,30 @@ class CyberiaDialogueRouter {
|
|
|
21
32
|
async (req, res) => await CyberiaDialogueController.get(req, res, options),
|
|
22
33
|
);
|
|
23
34
|
router.get(`/`, async (req, res) => await CyberiaDialogueController.get(req, res, options));
|
|
24
|
-
router.put(
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
35
|
+
router.put(
|
|
36
|
+
`/:id`,
|
|
37
|
+
options.authMiddleware,
|
|
38
|
+
moderatorGuard,
|
|
39
|
+
async (req, res) => await CyberiaDialogueController.put(req, res, options),
|
|
40
|
+
);
|
|
41
|
+
router.put(
|
|
42
|
+
`/`,
|
|
43
|
+
options.authMiddleware,
|
|
44
|
+
moderatorGuard,
|
|
45
|
+
async (req, res) => await CyberiaDialogueController.put(req, res, options),
|
|
46
|
+
);
|
|
47
|
+
router.delete(
|
|
48
|
+
`/:id`,
|
|
49
|
+
options.authMiddleware,
|
|
50
|
+
moderatorGuard,
|
|
51
|
+
async (req, res) => await CyberiaDialogueController.delete(req, res, options),
|
|
52
|
+
);
|
|
53
|
+
router.delete(
|
|
54
|
+
`/`,
|
|
55
|
+
options.authMiddleware,
|
|
56
|
+
adminGuard,
|
|
57
|
+
async (req, res) => await CyberiaDialogueController.delete(req, res, options),
|
|
58
|
+
);
|
|
28
59
|
return router;
|
|
29
60
|
}
|
|
30
61
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
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
|
+
import { DefaultCyberiaDialogues } from '../cyberia-server-defaults/cyberia-server-defaults.js';
|
|
4
5
|
|
|
5
6
|
const logger = loggerFactory(import.meta);
|
|
6
7
|
|
|
@@ -43,8 +44,13 @@ class CyberiaDialogueService {
|
|
|
43
44
|
const { code } = req.params;
|
|
44
45
|
if (!code) throw new Error('code parameter is required');
|
|
45
46
|
const data = await CyberiaDialogue.find({ code }).sort({ order: 1 }).lean();
|
|
46
|
-
if (
|
|
47
|
-
|
|
47
|
+
if (data.length) return data;
|
|
48
|
+
// Fallback world greetings/quest dialogue come from the canonical defaults
|
|
49
|
+
// without persisting them; serve those so action NPCs always have lines
|
|
50
|
+
// (and thus the dlg_complete grant handshake fires).
|
|
51
|
+
const fallback = DefaultCyberiaDialogues.filter((d) => d.code === code).sort((a, b) => a.order - b.order);
|
|
52
|
+
if (fallback.length) return fallback;
|
|
53
|
+
throw new Error(`No dialogue found for code: ${code}`);
|
|
48
54
|
};
|
|
49
55
|
}
|
|
50
56
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { loggerFactory } from '../../server/logger.js';
|
|
2
2
|
import { CyberiaEntityController } from './cyberia-entity.controller.js';
|
|
3
3
|
import express from 'express';
|
|
4
|
+
import { moderatorGuard, adminGuard } from '../../server/auth.js';
|
|
4
5
|
|
|
5
6
|
const logger = loggerFactory(import.meta);
|
|
6
7
|
|
|
@@ -11,17 +12,48 @@ class CyberiaEntityRouter {
|
|
|
11
12
|
*/
|
|
12
13
|
static router(options) {
|
|
13
14
|
const router = express.Router();
|
|
14
|
-
router.post(
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
router.post(
|
|
16
|
+
`/:id`,
|
|
17
|
+
options.authMiddleware,
|
|
18
|
+
moderatorGuard,
|
|
19
|
+
async (req, res) => await CyberiaEntityController.post(req, res, options),
|
|
20
|
+
);
|
|
21
|
+
router.post(
|
|
22
|
+
`/`,
|
|
23
|
+
options.authMiddleware,
|
|
24
|
+
moderatorGuard,
|
|
25
|
+
async (req, res) => await CyberiaEntityController.post(req, res, options),
|
|
26
|
+
);
|
|
27
|
+
router.get(
|
|
28
|
+
`/:id`,
|
|
17
29
|
// options.authMiddleware,
|
|
18
30
|
async (req, res) => await CyberiaEntityController.get(req, res, options),
|
|
19
31
|
);
|
|
20
32
|
router.get(`/`, async (req, res) => await CyberiaEntityController.get(req, res, options));
|
|
21
|
-
router.put(
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
33
|
+
router.put(
|
|
34
|
+
`/:id`,
|
|
35
|
+
options.authMiddleware,
|
|
36
|
+
moderatorGuard,
|
|
37
|
+
async (req, res) => await CyberiaEntityController.put(req, res, options),
|
|
38
|
+
);
|
|
39
|
+
router.put(
|
|
40
|
+
`/`,
|
|
41
|
+
options.authMiddleware,
|
|
42
|
+
moderatorGuard,
|
|
43
|
+
async (req, res) => await CyberiaEntityController.put(req, res, options),
|
|
44
|
+
);
|
|
45
|
+
router.delete(
|
|
46
|
+
`/:id`,
|
|
47
|
+
options.authMiddleware,
|
|
48
|
+
moderatorGuard,
|
|
49
|
+
async (req, res) => await CyberiaEntityController.delete(req, res, options),
|
|
50
|
+
);
|
|
51
|
+
router.delete(
|
|
52
|
+
`/`,
|
|
53
|
+
options.authMiddleware,
|
|
54
|
+
adminGuard,
|
|
55
|
+
async (req, res) => await CyberiaEntityController.delete(req, res, options),
|
|
56
|
+
);
|
|
25
57
|
return router;
|
|
26
58
|
}
|
|
27
59
|
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaEntityTypeDefaultService } from './cyberia-entity-type-default.service.js';
|
|
3
|
+
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
|
|
6
|
+
class CyberiaEntityTypeDefaultController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
|
+
try {
|
|
9
|
+
const result = await CyberiaEntityTypeDefaultService.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 CyberiaEntityTypeDefaultService.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 CyberiaEntityTypeDefaultService.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 CyberiaEntityTypeDefaultService.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 { CyberiaEntityTypeDefaultController };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Schema, model } from 'mongoose';
|
|
2
|
+
|
|
3
|
+
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
4
|
+
|
|
5
|
+
// CyberiaEntityTypeDefault — DB-backed, editable mirror of the per-entity-type
|
|
6
|
+
// item defaults that ship in cyberia-server-defaults.js (ENTITY_TYPE_DEFAULTS).
|
|
7
|
+
// A document binds an entity category (entityType) to the item ids the runtime
|
|
8
|
+
// rotates through by lifecycle state:
|
|
9
|
+
// liveItemIds — ObjectLayer item ids while the entity is alive.
|
|
10
|
+
// deadItemIds — ids swapped in on death / ghost state.
|
|
11
|
+
// dropItemIds — ids granted to the killer on depletion (resources).
|
|
12
|
+
// defaultObjectLayers — seed inventory rows ({ itemId, active, quantity }).
|
|
13
|
+
//
|
|
14
|
+
// Resolution rule (authoritative): defaults are looked up by the entity's ACTIVE
|
|
15
|
+
// itemId (usually the skin) — the system finds the document whose `liveItemIds`
|
|
16
|
+
// contains that itemId, then applies the document's deadItemIds / dropItemIds /
|
|
17
|
+
// defaultObjectLayers to drive what is shown as the entity's state changes.
|
|
18
|
+
//
|
|
19
|
+
// Resolution (subset matching): a document matches an entity when ALL of its
|
|
20
|
+
// `liveItemIds` are present in the entity's active item ids, and the MOST SPECIFIC
|
|
21
|
+
// match wins — the document requiring the largest item set. This lets the same
|
|
22
|
+
// skin map to different defaults by its full active set, e.g.
|
|
23
|
+
// { bot, liveItemIds:[purple, atlas_pistol_mk2], behavior:hostile }
|
|
24
|
+
// { bot, liveItemIds:[purple], behavior:passive }
|
|
25
|
+
// where a purple bot carrying the pistol is hostile and a bare purple bot is
|
|
26
|
+
// passive. The Go simulation (game/entity_defaults.go) implements the same rule.
|
|
27
|
+
//
|
|
28
|
+
// Invariants:
|
|
29
|
+
// - `entityType` is a label, not a unique key — a category appears in many
|
|
30
|
+
// documents.
|
|
31
|
+
// - There is NO per-itemId uniqueness: the same itemId may appear in the
|
|
32
|
+
// `liveItemIds` of many documents (different entity types, or the same type
|
|
33
|
+
// at different specificity levels). `liveItemIds` is indexed (non-unique
|
|
34
|
+
// multikey) only for fast membership lookups.
|
|
35
|
+
|
|
36
|
+
const ObjectLayerDefaultSchema = new Schema(
|
|
37
|
+
{
|
|
38
|
+
itemId: { type: String, required: true, trim: true },
|
|
39
|
+
active: { type: Boolean, default: false },
|
|
40
|
+
quantity: { type: Number, default: 0 },
|
|
41
|
+
},
|
|
42
|
+
{ _id: false },
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
const CyberiaEntityTypeDefaultSchema = new Schema(
|
|
46
|
+
{
|
|
47
|
+
entityType: { type: String, required: true, trim: true },
|
|
48
|
+
liveItemIds: { type: [{ type: String, trim: true }], index: true },
|
|
49
|
+
deadItemIds: [{ type: String, trim: true }],
|
|
50
|
+
dropItemIds: [{ type: String, trim: true }],
|
|
51
|
+
defaultObjectLayers: [ObjectLayerDefaultSchema],
|
|
52
|
+
// Canonical entity behavior bound to entities matched by liveItemIds (see
|
|
53
|
+
// SharedDefaultsCyberia.ENTITY_BEHAVIORS). Empty = let the runtime derive it
|
|
54
|
+
// (armed → hostile, else passive). The Go simulation resolves this with the
|
|
55
|
+
// same liveItemIds matching used for the live/dead/drop sets.
|
|
56
|
+
behavior: { type: String, trim: true },
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
timestamps: true,
|
|
60
|
+
},
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
const CyberiaEntityTypeDefaultModel = model('CyberiaEntityTypeDefault', CyberiaEntityTypeDefaultSchema);
|
|
64
|
+
|
|
65
|
+
const ProviderSchema = CyberiaEntityTypeDefaultSchema;
|
|
66
|
+
|
|
67
|
+
export { CyberiaEntityTypeDefaultSchema, CyberiaEntityTypeDefaultModel, ProviderSchema };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
2
|
+
import { CyberiaEntityTypeDefaultController } from './cyberia-entity-type-default.controller.js';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
import { moderatorGuard, adminGuard } from '../../server/auth.js';
|
|
5
|
+
|
|
6
|
+
const logger = loggerFactory(import.meta);
|
|
7
|
+
|
|
8
|
+
class CyberiaEntityTypeDefaultRouter {
|
|
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(
|
|
16
|
+
`/:id`,
|
|
17
|
+
options.authMiddleware,
|
|
18
|
+
moderatorGuard,
|
|
19
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.post(req, res, options),
|
|
20
|
+
);
|
|
21
|
+
router.post(
|
|
22
|
+
`/`,
|
|
23
|
+
options.authMiddleware,
|
|
24
|
+
moderatorGuard,
|
|
25
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.post(req, res, options),
|
|
26
|
+
);
|
|
27
|
+
router.get(
|
|
28
|
+
`/:id`,
|
|
29
|
+
// options.authMiddleware,
|
|
30
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.get(req, res, options),
|
|
31
|
+
);
|
|
32
|
+
router.get(`/`, async (req, res) => await CyberiaEntityTypeDefaultController.get(req, res, options));
|
|
33
|
+
router.put(
|
|
34
|
+
`/:id`,
|
|
35
|
+
options.authMiddleware,
|
|
36
|
+
moderatorGuard,
|
|
37
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.put(req, res, options),
|
|
38
|
+
);
|
|
39
|
+
router.put(
|
|
40
|
+
`/`,
|
|
41
|
+
options.authMiddleware,
|
|
42
|
+
moderatorGuard,
|
|
43
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.put(req, res, options),
|
|
44
|
+
);
|
|
45
|
+
router.delete(
|
|
46
|
+
`/:id`,
|
|
47
|
+
options.authMiddleware,
|
|
48
|
+
moderatorGuard,
|
|
49
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.delete(req, res, options),
|
|
50
|
+
);
|
|
51
|
+
router.delete(
|
|
52
|
+
`/`,
|
|
53
|
+
options.authMiddleware,
|
|
54
|
+
adminGuard,
|
|
55
|
+
async (req, res) => await CyberiaEntityTypeDefaultController.delete(req, res, options),
|
|
56
|
+
);
|
|
57
|
+
return router;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const ApiRouter = (options) => CyberiaEntityTypeDefaultRouter.router(options);
|
|
62
|
+
|
|
63
|
+
export { ApiRouter, CyberiaEntityTypeDefaultRouter };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
2
|
+
import { loggerFactory } from '../../server/logger.js';
|
|
3
|
+
import { DataQuery } from '../../server/data-query.js';
|
|
4
|
+
|
|
5
|
+
const logger = loggerFactory(import.meta);
|
|
6
|
+
|
|
7
|
+
class CyberiaEntityTypeDefaultService {
|
|
8
|
+
// No per-itemId uniqueness: resolution is by subset containment (most-specific
|
|
9
|
+
// match wins), so the same itemId may appear in many documents — e.g.
|
|
10
|
+
// [purple, atlas_pistol_mk2]→hostile alongside [purple]→passive. See the model.
|
|
11
|
+
|
|
12
|
+
static post = async (req, res, options) => {
|
|
13
|
+
/** @type {import('./cyberia-entity-type-default.model.js').CyberiaEntityTypeDefaultModel} */
|
|
14
|
+
const CyberiaEntityTypeDefault = DataBaseProviderService.getModel('CyberiaEntityTypeDefault', options);
|
|
15
|
+
return await new CyberiaEntityTypeDefault(req.body).save();
|
|
16
|
+
};
|
|
17
|
+
static get = async (req, res, options) => {
|
|
18
|
+
/** @type {import('./cyberia-entity-type-default.model.js').CyberiaEntityTypeDefaultModel} */
|
|
19
|
+
const CyberiaEntityTypeDefault = DataBaseProviderService.getModel('CyberiaEntityTypeDefault', options);
|
|
20
|
+
if (req.params.id) return await CyberiaEntityTypeDefault.findById(req.params.id);
|
|
21
|
+
|
|
22
|
+
// Parse query parameters using DataQuery helper
|
|
23
|
+
const { query, sort, skip, limit, page } = DataQuery.parse(req.query);
|
|
24
|
+
|
|
25
|
+
const [data, total] = await Promise.all([
|
|
26
|
+
CyberiaEntityTypeDefault.find(query).sort(sort).limit(limit).skip(skip),
|
|
27
|
+
CyberiaEntityTypeDefault.countDocuments(query),
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
const totalPages = Math.ceil(total / limit);
|
|
31
|
+
return { data, total, page, totalPages };
|
|
32
|
+
};
|
|
33
|
+
static put = async (req, res, options) => {
|
|
34
|
+
/** @type {import('./cyberia-entity-type-default.model.js').CyberiaEntityTypeDefaultModel} */
|
|
35
|
+
const CyberiaEntityTypeDefault = DataBaseProviderService.getModel('CyberiaEntityTypeDefault', options);
|
|
36
|
+
return await CyberiaEntityTypeDefault.findByIdAndUpdate(req.params.id, req.body);
|
|
37
|
+
};
|
|
38
|
+
static delete = async (req, res, options) => {
|
|
39
|
+
/** @type {import('./cyberia-entity-type-default.model.js').CyberiaEntityTypeDefaultModel} */
|
|
40
|
+
const CyberiaEntityTypeDefault = DataBaseProviderService.getModel('CyberiaEntityTypeDefault', options);
|
|
41
|
+
if (req.params.id) return await CyberiaEntityTypeDefault.findByIdAndDelete(req.params.id);
|
|
42
|
+
else return await CyberiaEntityTypeDefault.deleteMany();
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { CyberiaEntityTypeDefaultService };
|