cyberia 3.2.9 → 3.2.22
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 +7 -0
- package/.github/workflows/engine-cyberia.ci.yml +14 -2
- package/.github/workflows/ghpkg.ci.yml +1 -0
- package/.github/workflows/npmpkg.ci.yml +10 -5
- 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 +363 -1
- package/CLI-HELP.md +975 -1061
- package/README.md +190 -348
- package/bin/build.js +102 -125
- package/bin/build.template.js +33 -0
- package/bin/cyberia.js +238 -56
- package/bin/deploy.js +16 -3
- package/bin/index.js +238 -56
- package/bump.config.js +26 -0
- package/conf.js +131 -24
- package/deployment.yaml +76 -2
- package/hardhat/package-lock.json +113 -144
- package/hardhat/package.json +4 -3
- 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 +76 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -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 +31 -19
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +81 -46
- package/scripts/link-local-underpost-cli.sh +6 -0
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/scripts/test-monitor.sh +250 -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 +458 -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 +291 -294
- package/src/cli/env.js +1 -4
- package/src/cli/fs.js +13 -3
- package/src/cli/image.js +58 -4
- package/src/cli/index.js +127 -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 +396 -9
- package/src/cli/release.js +355 -146
- package/src/cli/repository.js +169 -30
- package/src/cli/run.js +347 -117
- 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 +14 -10
- 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/ACTION-SYSTEM.md +55 -1
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +223 -361
- 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 +212 -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/QUEST-SYSTEM.md +23 -1
- 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 +130 -21
- package/src/grpc/cyberia/grpc-server.js +25 -57
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +10 -7
- package/src/runtime/cyberia-client/Dockerfile.dev +67 -0
- package/src/runtime/cyberia-server/Dockerfile +11 -6
- package/src/runtime/cyberia-server/Dockerfile.dev +47 -0
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/wp/Dockerfile +3 -3
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/auth.js +2 -2
- package/src/server/catalog-underpost.js +61 -0
- package/src/server/catalog.js +77 -0
- package/src/server/client-build-docs.js +1 -1
- package/src/server/client-build.js +94 -129
- package/src/server/conf.js +496 -135
- package/src/server/ipfs-client.js +5 -3
- package/src/server/process.js +180 -19
- package/src/server/proxy.js +9 -2
- package/src/server/runtime-status.js +235 -0
- package/src/server/runtime.js +1 -1
- package/src/server/start.js +44 -11
- 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/test/deploy-monitor.test.js +251 -0
- package/bin/file.js +0 -202
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/manifests/deployment/dd-test-development/deployment.yaml +0 -254
- package/manifests/deployment/dd-test-development/proxy.yaml +0 -102
- 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
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @namespace CyberiaObjectLayerService
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
|
-
import {
|
|
13
|
+
import { DataBaseProviderService } from '../../db/DataBaseProvider.js';
|
|
14
14
|
import { loggerFactory } from '../../server/logger.js';
|
|
15
15
|
import { ObjectLayerRenderFramesDto } from '../object-layer-render-frames/object-layer-render-frames.model.js';
|
|
16
16
|
import { FileFactory } from '../file/file.service.js';
|
|
@@ -149,9 +149,9 @@ class ObjectLayerService {
|
|
|
149
149
|
fs.writeFileSync(`${publicFolder}/metadata.json`, metadataContent);
|
|
150
150
|
|
|
151
151
|
// Build object layer data from the asset directory
|
|
152
|
-
const ObjectLayer =
|
|
152
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
153
153
|
const ObjectLayerRenderFrames =
|
|
154
|
-
|
|
154
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
155
155
|
|
|
156
156
|
const { objectLayerRenderFramesData, objectLayerData } =
|
|
157
157
|
await ObjectLayerEngine.buildObjectLayerDataFromDirectory({
|
|
@@ -183,9 +183,9 @@ class ObjectLayerService {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
// create object layer from body – cut-over consistency: stage all CIDs before writing to DB
|
|
186
|
-
const ObjectLayer =
|
|
186
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
187
187
|
const ObjectLayerRenderFrames =
|
|
188
|
-
|
|
188
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
189
189
|
|
|
190
190
|
const bodyData = { ...req.body };
|
|
191
191
|
if (!bodyData.data) bodyData.data = {};
|
|
@@ -270,7 +270,7 @@ class ObjectLayerService {
|
|
|
270
270
|
*/
|
|
271
271
|
static get = async (req, res, options) => {
|
|
272
272
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
273
|
-
const ObjectLayer =
|
|
273
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
274
274
|
|
|
275
275
|
// GET /search-item-ids?q=<partial> - Fast partial match search on data.item.id
|
|
276
276
|
if (req.path.startsWith('/search-item-ids')) {
|
|
@@ -360,8 +360,8 @@ class ObjectLayerService {
|
|
|
360
360
|
if (objectLayer.atlasSpriteSheetId) {
|
|
361
361
|
try {
|
|
362
362
|
const AtlasSpriteSheet =
|
|
363
|
-
|
|
364
|
-
const File =
|
|
363
|
+
DataBaseProviderService.getModel("AtlasSpriteSheet", options);
|
|
364
|
+
const File = DataBaseProviderService.getModel("File", options);
|
|
365
365
|
|
|
366
366
|
const atlasDoc = await AtlasSpriteSheet.findById(objectLayer.atlasSpriteSheetId);
|
|
367
367
|
|
|
@@ -451,7 +451,7 @@ class ObjectLayerService {
|
|
|
451
451
|
*/
|
|
452
452
|
static generateWebp = async (req, res, options) => {
|
|
453
453
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
454
|
-
const ObjectLayer =
|
|
454
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
455
455
|
|
|
456
456
|
// GET /generate-webp/:itemType/:itemId/:directionCode - Generate webp animation from PNG frames
|
|
457
457
|
const itemType = req.params.itemType;
|
|
@@ -515,7 +515,10 @@ class ObjectLayerService {
|
|
|
515
515
|
|
|
516
516
|
logger.info(`Executing command: ${cmd}`);
|
|
517
517
|
|
|
518
|
-
|
|
518
|
+
// silentOnError so we can build a domain-specific Error with the
|
|
519
|
+
// captured stderr/stdout context (callers want a friendly message,
|
|
520
|
+
// not a generic ShellExecError).
|
|
521
|
+
const result = shellExec(cmd, { silent: false, silentOnError: true });
|
|
519
522
|
|
|
520
523
|
if (result.code !== 0) {
|
|
521
524
|
throw new Error(`img2webp command failed: ${result.stderr || result.stdout}`);
|
|
@@ -586,7 +589,7 @@ class ObjectLayerService {
|
|
|
586
589
|
*/
|
|
587
590
|
static put = async (req, res, options) => {
|
|
588
591
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
589
|
-
const ObjectLayer =
|
|
592
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
590
593
|
|
|
591
594
|
// PUT /:id/frame-image/:itemType/:itemId/:directionCode - Update frame images for specific direction
|
|
592
595
|
if (req.path.includes('/frame-image/')) {
|
|
@@ -686,7 +689,7 @@ class ObjectLayerService {
|
|
|
686
689
|
fs.writeFileSync(`${publicFolder}/metadata.json`, metadataContent);
|
|
687
690
|
|
|
688
691
|
const ObjectLayerRenderFrames =
|
|
689
|
-
|
|
692
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
690
693
|
|
|
691
694
|
// Build object layer data from the asset directory
|
|
692
695
|
const { objectLayerRenderFramesData, objectLayerData } =
|
|
@@ -803,9 +806,9 @@ class ObjectLayerService {
|
|
|
803
806
|
*/
|
|
804
807
|
static delete = async (req, res, options) => {
|
|
805
808
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
806
|
-
const ObjectLayer =
|
|
809
|
+
const ObjectLayer = DataBaseProviderService.getModel("ObjectLayer", options);
|
|
807
810
|
const ObjectLayerRenderFrames =
|
|
808
|
-
|
|
811
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
809
812
|
|
|
810
813
|
if (req.params.id) {
|
|
811
814
|
// Load the full object layer so we can access all references
|
|
@@ -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 ObjectLayerRenderFramesController.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
7
|
+
class ObjectLayerRenderFramesRouter {
|
|
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 ObjectLayerRenderFramesController.post(req, res, options));
|
|
15
|
+
router.post(`/`, async (req, res) => await ObjectLayerRenderFramesController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`,
|
|
17
|
+
// options.authMiddleware,
|
|
18
|
+
async (req, res) => await ObjectLayerRenderFramesController.get(req, res, options),
|
|
19
|
+
);
|
|
20
|
+
router.get(`/`, async (req, res) => await ObjectLayerRenderFramesController.get(req, res, options));
|
|
21
|
+
router.put(`/:id`, async (req, res) => await ObjectLayerRenderFramesController.put(req, res, options));
|
|
22
|
+
router.put(`/`, async (req, res) => await ObjectLayerRenderFramesController.put(req, res, options));
|
|
23
|
+
router.delete(`/:id`, async (req, res) => await ObjectLayerRenderFramesController.delete(req, res, options));
|
|
24
|
+
router.delete(`/`, async (req, res) => await ObjectLayerRenderFramesController.delete(req, res, options));
|
|
25
|
+
return router;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
24
28
|
|
|
25
|
-
const ApiRouter = ObjectLayerRenderFramesRouter;
|
|
29
|
+
const ApiRouter = (options) => ObjectLayerRenderFramesRouter.router(options);
|
|
26
30
|
|
|
27
31
|
export { ApiRouter, ObjectLayerRenderFramesRouter };
|
|
@@ -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
|
|
|
@@ -8,13 +8,13 @@ class ObjectLayerRenderFramesService {
|
|
|
8
8
|
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
10
10
|
const ObjectLayerRenderFrames =
|
|
11
|
-
|
|
11
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
12
12
|
return await new ObjectLayerRenderFrames(req.body).save();
|
|
13
13
|
};
|
|
14
14
|
static get = async (req, res, options) => {
|
|
15
15
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
16
16
|
const ObjectLayerRenderFrames =
|
|
17
|
-
|
|
17
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
18
18
|
if (req.params.id) return await ObjectLayerRenderFrames.findById(req.params.id);
|
|
19
19
|
|
|
20
20
|
// Parse query parameters using DataQuery helper
|
|
@@ -31,13 +31,13 @@ class ObjectLayerRenderFramesService {
|
|
|
31
31
|
static put = async (req, res, options) => {
|
|
32
32
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
33
33
|
const ObjectLayerRenderFrames =
|
|
34
|
-
|
|
34
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
35
35
|
return await ObjectLayerRenderFrames.findByIdAndUpdate(req.params.id, req.body);
|
|
36
36
|
};
|
|
37
37
|
static delete = async (req, res, options) => {
|
|
38
38
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
39
39
|
const ObjectLayerRenderFrames =
|
|
40
|
-
|
|
40
|
+
DataBaseProviderService.getModel("ObjectLayerRenderFrames", options);
|
|
41
41
|
if (req.params.id) return await ObjectLayerRenderFrames.findByIdAndDelete(req.params.id);
|
|
42
42
|
else return await ObjectLayerRenderFrames.deleteMany();
|
|
43
43
|
};
|
|
@@ -4,18 +4,23 @@ 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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
class TestRouter {
|
|
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 TestController.post(req, res, options));
|
|
15
|
+
router.post(`/`, options.authMiddleware, async (req, res) => await TestController.post(req, res, options));
|
|
16
|
+
router.get(`/:id`, async (req, res) => await TestController.get(req, res, options));
|
|
17
|
+
router.get(`/`, async (req, res) => await TestController.get(req, res, options));
|
|
18
|
+
router.delete(`/:id`, async (req, res) => await TestController.delete(req, res, options));
|
|
19
|
+
router.delete(`/`, async (req, res) => await TestController.delete(req, res, options));
|
|
20
|
+
return router;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
|
|
19
|
-
const ApiRouter = TestRouter;
|
|
24
|
+
const ApiRouter = (options) => TestRouter.router(options);
|
|
20
25
|
|
|
21
26
|
export { ApiRouter, TestRouter };
|
package/src/api/types.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module src/api/types
|
|
3
|
+
* @description Shared type definitions for the Express router layer.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Injected dependencies and runtime configuration for every API router instance.
|
|
8
|
+
* Keyed per-host/path by the multi-tenant engine (see src/runtime/express/Express.js).
|
|
9
|
+
*
|
|
10
|
+
* @typedef {Object} RouterOptions
|
|
11
|
+
* @property {import('express').Application} app - Express application instance.
|
|
12
|
+
* @property {string} host - Per-runtime host identifier (e.g. "nexodev.org").
|
|
13
|
+
* @property {string} path - Per-runtime path prefix (e.g. "/" or "/cyberia").
|
|
14
|
+
* @property {string} apiPath - Computed base URL for the API layer.
|
|
15
|
+
* @property {string[]} origins - Allowed origins for CORS validation.
|
|
16
|
+
* @property {import('express').RequestHandler} authMiddleware - Dynamically generated JWT auth middleware (keyed by host+path).
|
|
17
|
+
* @property {Object} [db] - DataBaseProviderService configuration or instance reference.
|
|
18
|
+
* @property {Object} [mailer] - MailerProvider configuration or instance reference.
|
|
19
|
+
* @property {Object} [png] - Cached mailer image buffers (populated by UserRouter on first load).
|
|
20
|
+
* @property {Record<string, Buffer>} [png.buffer] - Map of image key to raw PNG buffer.
|
|
21
|
+
* @property {Function} [png.header] - Sets CORS/Content-Type response headers for PNG responses.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
export { };
|
|
@@ -22,12 +22,13 @@ const _guestTtlMs = () => {
|
|
|
22
22
|
*/
|
|
23
23
|
const buildGuestUser = (options) => {
|
|
24
24
|
const now = new Date().toISOString();
|
|
25
|
-
const
|
|
25
|
+
const objectId = new mongoose.Types.ObjectId().toString();
|
|
26
26
|
const role = 'guest';
|
|
27
|
+
const username = `${role}${objectId.slice(-5)}`;
|
|
27
28
|
return {
|
|
28
|
-
_id: `${role}${
|
|
29
|
-
username
|
|
30
|
-
email: `${
|
|
29
|
+
_id: `${role}${objectId}`,
|
|
30
|
+
username,
|
|
31
|
+
email: `${username}@${options.host || 'localhost'}`,
|
|
31
32
|
password: hashPassword(process.env.JWT_SECRET),
|
|
32
33
|
role,
|
|
33
34
|
emailConfirmed: false,
|