cyberia 3.2.22 → 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 +33 -24
- package/.github/workflows/engine-cyberia.ci.yml +13 -3
- package/.github/workflows/ghpkg.ci.yml +88 -1
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +1 -1
- package/.github/workflows/npmpkg.ci.yml +10 -7
- 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 +301 -1
- package/CLI-HELP.md +71 -6
- 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 +31 -0
- package/bin/cyberia.js +1080 -184
- package/bin/deploy.js +2 -2
- package/bin/index.js +1080 -184
- package/bump.config.js +1 -0
- package/compose.env +131 -0
- package/conf.js +18 -1
- package/deployment.yaml +2 -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 +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +2 -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 +31 -19
- package/pv-pvc.yaml +32 -0
- package/scripts/disk-clean.sh +85 -60
- package/scripts/kubeadm-node-setup.sh +317 -0
- package/scripts/rocky-kickstart.sh +877 -185
- package/scripts/rpmfusion-ffmpeg-setup.sh +26 -50
- package/scripts/test-monitor.sh +3 -5
- 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 -129
- 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 +127 -11
- package/src/cli/docker-compose.js +648 -0
- package/src/cli/env.js +11 -2
- package/src/cli/fs.js +75 -30
- package/src/cli/image.js +129 -51
- package/src/cli/index.js +110 -6
- package/src/cli/kickstart.js +142 -20
- package/src/cli/release.js +46 -4
- package/src/cli/repository.js +238 -33
- package/src/cli/run.js +520 -114
- 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/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 +45 -27
- 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 +8 -1
- package/src/client/public/cyberia-docs/CYBERIA.md +1 -1
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +5 -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/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 +2 -2
- 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/{server → projects/underpost}/catalog-underpost.js +1 -2
- package/src/runtime/cyberia-client/Dockerfile +27 -61
- package/src/runtime/cyberia-client/Dockerfile.dev +20 -12
- package/src/runtime/cyberia-server/Dockerfile +21 -20
- package/src/runtime/cyberia-server/Dockerfile.dev +17 -8
- 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/server/catalog.js +9 -14
- package/src/server/conf.js +3 -6
- package/src/server/runtime-status.js +18 -1
- package/src/server/start.js +12 -2
- package/src/server.js +6 -2
- package/test/cyberia-instance-conf-defaults.test.js +140 -0
- package/test/deploy-monitor.test.js +26 -10
- package/test/shape-generator.test.js +7 -1
- package/typedoc.dd-cyberia.json +3 -1
- package/typedoc.json +3 -1
- /package/src/client/ssr/{Render.js → RootDocument.js} +0 -0
- /package/src/{server → client-builder}/client-formatted.js +0 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Auth } from '../../components/core/Auth.js';
|
|
2
|
+
import { loggerFactory } from '../../components/core/Logger.js';
|
|
3
|
+
import { getApiBaseUrl, headersFactory, payloadFactory, buildQueryUrl } from '../core/core.service.js';
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
logger.info('Load service');
|
|
6
|
+
const endpoint = 'cyberia-saga';
|
|
7
|
+
class CyberiaSagaService {
|
|
8
|
+
static post = (options = { id: '', body: {} }) =>
|
|
9
|
+
new Promise((resolve, reject) =>
|
|
10
|
+
fetch(getApiBaseUrl({ id: options.id, endpoint }), {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: headersFactory(),
|
|
13
|
+
credentials: 'include',
|
|
14
|
+
body: payloadFactory(options.body),
|
|
15
|
+
})
|
|
16
|
+
.then(async (res) => {
|
|
17
|
+
return await res.json();
|
|
18
|
+
})
|
|
19
|
+
.then((res) => {
|
|
20
|
+
logger.info(res);
|
|
21
|
+
return resolve(res);
|
|
22
|
+
})
|
|
23
|
+
.catch((error) => {
|
|
24
|
+
logger.error(error);
|
|
25
|
+
return reject(error);
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
static put = (options = { id: '', body: {} }) =>
|
|
29
|
+
new Promise((resolve, reject) =>
|
|
30
|
+
fetch(getApiBaseUrl({ id: options.id, endpoint }), {
|
|
31
|
+
method: 'PUT',
|
|
32
|
+
headers: headersFactory(),
|
|
33
|
+
credentials: 'include',
|
|
34
|
+
body: payloadFactory(options.body),
|
|
35
|
+
})
|
|
36
|
+
.then(async (res) => {
|
|
37
|
+
return await res.json();
|
|
38
|
+
})
|
|
39
|
+
.then((res) => {
|
|
40
|
+
logger.info(res);
|
|
41
|
+
return resolve(res);
|
|
42
|
+
})
|
|
43
|
+
.catch((error) => {
|
|
44
|
+
logger.error(error);
|
|
45
|
+
return reject(error);
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
static get = (options = {}) => {
|
|
49
|
+
const { id, page, limit, filterModel, sortModel, sort, asc, order } = options;
|
|
50
|
+
const url = buildQueryUrl(getApiBaseUrl({ id, endpoint }), {
|
|
51
|
+
page,
|
|
52
|
+
limit,
|
|
53
|
+
filterModel,
|
|
54
|
+
sortModel,
|
|
55
|
+
sort,
|
|
56
|
+
asc,
|
|
57
|
+
order,
|
|
58
|
+
});
|
|
59
|
+
return new Promise((resolve, reject) =>
|
|
60
|
+
fetch(url.toString(), {
|
|
61
|
+
method: 'GET',
|
|
62
|
+
headers: headersFactory(),
|
|
63
|
+
credentials: 'include',
|
|
64
|
+
})
|
|
65
|
+
.then(async (res) => {
|
|
66
|
+
return await res.json();
|
|
67
|
+
})
|
|
68
|
+
.then((res) => {
|
|
69
|
+
logger.info(res);
|
|
70
|
+
return resolve(res);
|
|
71
|
+
})
|
|
72
|
+
.catch((error) => {
|
|
73
|
+
logger.error(error);
|
|
74
|
+
return reject(error);
|
|
75
|
+
}),
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
static delete = (options = { id: '', body: {} }) =>
|
|
79
|
+
new Promise((resolve, reject) =>
|
|
80
|
+
fetch(getApiBaseUrl({ id: options.id, endpoint }), {
|
|
81
|
+
method: 'DELETE',
|
|
82
|
+
headers: headersFactory(),
|
|
83
|
+
credentials: 'include',
|
|
84
|
+
body: payloadFactory(options.body),
|
|
85
|
+
})
|
|
86
|
+
.then(async (res) => {
|
|
87
|
+
return await res.json();
|
|
88
|
+
})
|
|
89
|
+
.then((res) => {
|
|
90
|
+
logger.info(res);
|
|
91
|
+
return resolve(res);
|
|
92
|
+
})
|
|
93
|
+
.catch((error) => {
|
|
94
|
+
logger.error(error);
|
|
95
|
+
return reject(error);
|
|
96
|
+
}),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
export { CyberiaSagaService };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Auth } from '../../components/core/Auth.js';
|
|
2
|
+
import { loggerFactory } from '../../components/core/Logger.js';
|
|
3
|
+
import { getApiBaseUrl, headersFactory, payloadFactory, buildQueryUrl } from '../core/core.service.js';
|
|
4
|
+
const logger = loggerFactory(import.meta);
|
|
5
|
+
logger.info('Load service');
|
|
6
|
+
const endpoint = 'cyberia-skill';
|
|
7
|
+
class CyberiaSkillService {
|
|
8
|
+
static post = (options = { id: '', body: {} }) =>
|
|
9
|
+
new Promise((resolve, reject) =>
|
|
10
|
+
fetch(getApiBaseUrl({ id: options.id, endpoint }), {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: headersFactory(),
|
|
13
|
+
credentials: 'include',
|
|
14
|
+
body: payloadFactory(options.body),
|
|
15
|
+
})
|
|
16
|
+
.then(async (res) => {
|
|
17
|
+
return await res.json();
|
|
18
|
+
})
|
|
19
|
+
.then((res) => {
|
|
20
|
+
logger.info(res);
|
|
21
|
+
return resolve(res);
|
|
22
|
+
})
|
|
23
|
+
.catch((error) => {
|
|
24
|
+
logger.error(error);
|
|
25
|
+
return reject(error);
|
|
26
|
+
}),
|
|
27
|
+
);
|
|
28
|
+
static put = (options = { id: '', body: {} }) =>
|
|
29
|
+
new Promise((resolve, reject) =>
|
|
30
|
+
fetch(getApiBaseUrl({ id: options.id, endpoint }), {
|
|
31
|
+
method: 'PUT',
|
|
32
|
+
headers: headersFactory(),
|
|
33
|
+
credentials: 'include',
|
|
34
|
+
body: payloadFactory(options.body),
|
|
35
|
+
})
|
|
36
|
+
.then(async (res) => {
|
|
37
|
+
return await res.json();
|
|
38
|
+
})
|
|
39
|
+
.then((res) => {
|
|
40
|
+
logger.info(res);
|
|
41
|
+
return resolve(res);
|
|
42
|
+
})
|
|
43
|
+
.catch((error) => {
|
|
44
|
+
logger.error(error);
|
|
45
|
+
return reject(error);
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
static get = (options = {}) => {
|
|
49
|
+
const { id, page, limit, filterModel, sortModel, sort, asc, order } = options;
|
|
50
|
+
const url = buildQueryUrl(getApiBaseUrl({ id, endpoint }), {
|
|
51
|
+
page,
|
|
52
|
+
limit,
|
|
53
|
+
filterModel,
|
|
54
|
+
sortModel,
|
|
55
|
+
sort,
|
|
56
|
+
asc,
|
|
57
|
+
order,
|
|
58
|
+
});
|
|
59
|
+
return new Promise((resolve, reject) =>
|
|
60
|
+
fetch(url.toString(), {
|
|
61
|
+
method: 'GET',
|
|
62
|
+
headers: headersFactory(),
|
|
63
|
+
credentials: 'include',
|
|
64
|
+
})
|
|
65
|
+
.then(async (res) => {
|
|
66
|
+
return await res.json();
|
|
67
|
+
})
|
|
68
|
+
.then((res) => {
|
|
69
|
+
logger.info(res);
|
|
70
|
+
return resolve(res);
|
|
71
|
+
})
|
|
72
|
+
.catch((error) => {
|
|
73
|
+
logger.error(error);
|
|
74
|
+
return reject(error);
|
|
75
|
+
}),
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
static delete = (options = { id: '', body: {} }) =>
|
|
79
|
+
new Promise((resolve, reject) =>
|
|
80
|
+
fetch(getApiBaseUrl({ id: options.id, endpoint }), {
|
|
81
|
+
method: 'DELETE',
|
|
82
|
+
headers: headersFactory(),
|
|
83
|
+
credentials: 'include',
|
|
84
|
+
body: payloadFactory(options.body),
|
|
85
|
+
})
|
|
86
|
+
.then(async (res) => {
|
|
87
|
+
return await res.json();
|
|
88
|
+
})
|
|
89
|
+
.then((res) => {
|
|
90
|
+
logger.info(res);
|
|
91
|
+
return resolve(res);
|
|
92
|
+
})
|
|
93
|
+
.catch((error) => {
|
|
94
|
+
logger.error(error);
|
|
95
|
+
return reject(error);
|
|
96
|
+
}),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
export { CyberiaSkillService };
|
|
@@ -283,10 +283,10 @@ class ObjectLayerManagement {
|
|
|
283
283
|
{
|
|
284
284
|
field: 'data.item.id',
|
|
285
285
|
headerName: 'Item ID',
|
|
286
|
-
editable: role
|
|
286
|
+
editable: commonModeratorGuard(role),
|
|
287
287
|
},
|
|
288
|
-
{ field: 'data.item.type', headerName: 'Item Type', editable: role
|
|
289
|
-
{ field: 'data.item.description', headerName: 'Description', flex: 1, editable: role
|
|
288
|
+
{ field: 'data.item.type', headerName: 'Item Type', editable: commonModeratorGuard(role) },
|
|
289
|
+
{ field: 'data.item.description', headerName: 'Description', flex: 1, editable: commonModeratorGuard(role) },
|
|
290
290
|
{
|
|
291
291
|
field: 'data.ledger.type',
|
|
292
292
|
headerName: 'Ledger Type',
|
|
@@ -306,7 +306,7 @@ class ObjectLayerManagement {
|
|
|
306
306
|
},
|
|
307
307
|
{
|
|
308
308
|
field: 'data.render.cid',
|
|
309
|
-
headerName: '
|
|
309
|
+
headerName: 'render CID',
|
|
310
310
|
width: 160,
|
|
311
311
|
cellRenderer: AtlasCidRenderer,
|
|
312
312
|
editable: false,
|
|
@@ -315,7 +315,7 @@ class ObjectLayerManagement {
|
|
|
315
315
|
},
|
|
316
316
|
{
|
|
317
317
|
field: 'data.render.metadataCid',
|
|
318
|
-
headerName: '
|
|
318
|
+
headerName: 'render Metadata CID',
|
|
319
319
|
width: 160,
|
|
320
320
|
cellRenderer: MetadataCidRenderer,
|
|
321
321
|
editable: false,
|
|
@@ -369,7 +369,7 @@ class ObjectLayerManagement {
|
|
|
369
369
|
serviceId,
|
|
370
370
|
entity: 'object-layer',
|
|
371
371
|
permissions: {
|
|
372
|
-
add:
|
|
372
|
+
add: commonModeratorGuard(role),
|
|
373
373
|
remove: false,
|
|
374
374
|
reload: commonUserGuard(role),
|
|
375
375
|
},
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Module for building project documentation (JSDoc, Swagger, Coverage).
|
|
5
|
-
* @module src/
|
|
5
|
+
* @module src/client-builder/client-build-docs.js
|
|
6
6
|
* @namespace clientBuildDocs
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import fs from 'fs-extra';
|
|
10
|
-
import { shellExec } from '
|
|
11
|
-
import { loggerFactory } from '
|
|
10
|
+
import { shellExec } from '../server/process.js';
|
|
11
|
+
import { loggerFactory } from '../server/logger.js';
|
|
12
12
|
import { JSONweb } from './client-formatted.js';
|
|
13
13
|
import { ssrFactory } from './ssr.js';
|
|
14
14
|
|
|
@@ -396,10 +396,20 @@ const buildCoverage = async ({ docs, docsDestination }) => {
|
|
|
396
396
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
397
397
|
if (pkg.scripts && pkg.scripts.coverage) {
|
|
398
398
|
logger.info('generating coverage report', coveragePath);
|
|
399
|
-
|
|
399
|
+
try {
|
|
400
|
+
await shellExec(`cd ${coveragePath} && npm run coverage`, { silent: true });
|
|
401
|
+
} catch (err) {
|
|
402
|
+
logger.warn('coverage generation failed (non-fatal), skipping:', err.message);
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
400
405
|
} else if (pkg.scripts && pkg.scripts.test) {
|
|
401
406
|
logger.info('generating coverage via test', coveragePath);
|
|
402
|
-
|
|
407
|
+
try {
|
|
408
|
+
await shellExec(`cd ${coveragePath} && npm test`, { silent: true, silentOnError: true });
|
|
409
|
+
} catch (err) {
|
|
410
|
+
logger.warn('coverage generation failed (non-fatal), skipping:', err.message);
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
403
413
|
}
|
|
404
414
|
}
|
|
405
415
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Module for live building client-side code
|
|
3
|
-
* @module src/
|
|
3
|
+
* @module src/client-builder/client-build-live.js
|
|
4
4
|
* @namespace clientLiveBuild
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import fs from 'fs-extra';
|
|
8
|
-
import { Config, loadConf, readConfJson } from '
|
|
9
|
-
import { loggerFactory } from '
|
|
8
|
+
import { Config, loadConf, readConfJson } from '../server/conf.js';
|
|
9
|
+
import { loggerFactory } from '../server/logger.js';
|
|
10
10
|
import { buildClient } from './client-build.js';
|
|
11
11
|
|
|
12
12
|
const logger = loggerFactory(import.meta);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Manages the client-side build process, including full builds and incremental builds.
|
|
3
|
-
* @module
|
|
3
|
+
* @module src/client-builder/client-build.js
|
|
4
4
|
* @namespace clientBuild
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -8,18 +8,18 @@
|
|
|
8
8
|
|
|
9
9
|
import fs from 'fs-extra';
|
|
10
10
|
import { transformClientJs, JSONweb } from './client-formatted.js';
|
|
11
|
-
import { loggerFactory } from '
|
|
11
|
+
import { loggerFactory } from '../server/logger.js';
|
|
12
12
|
import {
|
|
13
13
|
getCapVariableName,
|
|
14
14
|
newInstance,
|
|
15
15
|
orderArrayFromAttrInt,
|
|
16
16
|
uniqueArray,
|
|
17
17
|
} from '../client/components/core/CommonJs.js';
|
|
18
|
-
import { readConfJson } from '
|
|
18
|
+
import { readConfJson } from '../server/conf.js';
|
|
19
19
|
import { minify } from 'html-minifier-terser';
|
|
20
20
|
import AdmZip from 'adm-zip';
|
|
21
21
|
import * as dir from 'path';
|
|
22
|
-
import { shellExec } from '
|
|
22
|
+
import { shellExec } from '../server/process.js';
|
|
23
23
|
import { SitemapStream, streamToPromise } from 'sitemap';
|
|
24
24
|
import { Readable } from 'stream';
|
|
25
25
|
import { buildIcons } from './client-icons.js';
|
|
@@ -751,8 +751,9 @@ const buildClient = async (
|
|
|
751
751
|
)
|
|
752
752
|
)
|
|
753
753
|
for (const view of views) {
|
|
754
|
-
const buildPath = `${
|
|
755
|
-
|
|
754
|
+
const buildPath = `${
|
|
755
|
+
rootClientPath[rootClientPath.length - 1] === '/' ? rootClientPath.slice(0, -1) : rootClientPath
|
|
756
|
+
}${view.path === '/' ? view.path : `${view.path}/`}`;
|
|
756
757
|
|
|
757
758
|
if (!fs.existsSync(buildPath)) fs.mkdirSync(buildPath, { recursive: true });
|
|
758
759
|
|
|
@@ -768,8 +769,9 @@ const buildClient = async (
|
|
|
768
769
|
fs.writeFileSync(`${buildPath}${buildId}.js`, jsSrc, 'utf8');
|
|
769
770
|
const title = metadata.title ? metadata.title : title;
|
|
770
771
|
|
|
771
|
-
const canonicalURL = `https://${host}${path}${
|
|
772
|
-
}
|
|
772
|
+
const canonicalURL = `https://${host}${path}${
|
|
773
|
+
view.path === '/' ? (path === '/' ? '' : '/') : path === '/' ? `${view.path.slice(1)}/` : `${view.path}/`
|
|
774
|
+
}`;
|
|
773
775
|
|
|
774
776
|
let ssrHeadComponents = ``;
|
|
775
777
|
let ssrBodyComponents = ``;
|
|
@@ -903,12 +905,12 @@ const buildClient = async (
|
|
|
903
905
|
`${buildPath}index.html`,
|
|
904
906
|
minifyBuild
|
|
905
907
|
? await minify(htmlSrc, {
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
908
|
+
minifyCSS: true,
|
|
909
|
+
minifyJS: true,
|
|
910
|
+
collapseBooleanAttributes: true,
|
|
911
|
+
collapseInlineTagWhitespace: true,
|
|
912
|
+
collapseWhitespace: true,
|
|
913
|
+
})
|
|
912
914
|
: htmlSrc,
|
|
913
915
|
'utf8',
|
|
914
916
|
);
|
|
@@ -997,8 +999,9 @@ Sitemap: ${sitemapBaseUrl}/sitemap.xml`,
|
|
|
997
999
|
renderApi: { JSONweb },
|
|
998
1000
|
});
|
|
999
1001
|
|
|
1000
|
-
const buildPath = `${
|
|
1001
|
-
|
|
1002
|
+
const buildPath = `${
|
|
1003
|
+
rootClientPath[rootClientPath.length - 1] === '/' ? rootClientPath.slice(0, -1) : rootClientPath
|
|
1004
|
+
}${view.path === '/' ? view.path : `${view.path}/`}`;
|
|
1002
1005
|
|
|
1003
1006
|
const indexUrl = buildIndexUrl(view.path);
|
|
1004
1007
|
if (view.offlineDefault) {
|
|
@@ -1018,12 +1021,12 @@ Sitemap: ${sitemapBaseUrl}/sitemap.xml`,
|
|
|
1018
1021
|
buildHtmlPath,
|
|
1019
1022
|
minifyBuild
|
|
1020
1023
|
? await minify(htmlSrc, {
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1024
|
+
minifyCSS: true,
|
|
1025
|
+
minifyJS: true,
|
|
1026
|
+
collapseBooleanAttributes: true,
|
|
1027
|
+
collapseInlineTagWhitespace: true,
|
|
1028
|
+
collapseWhitespace: true,
|
|
1029
|
+
})
|
|
1027
1030
|
: htmlSrc,
|
|
1028
1031
|
'utf8',
|
|
1029
1032
|
);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Module for creating a client-side development server
|
|
3
|
-
* @module src/
|
|
3
|
+
* @module src/client-builder/client-dev-server.js
|
|
4
4
|
* @namespace clientDevServer
|
|
5
5
|
*/
|
|
6
6
|
import fs from 'fs-extra';
|
|
7
7
|
import nodemon from 'nodemon';
|
|
8
8
|
import dotenv from 'dotenv';
|
|
9
|
-
import { shellExec } from '
|
|
10
|
-
import { loggerFactory } from '
|
|
9
|
+
import { shellExec } from '../server/process.js';
|
|
10
|
+
import { loggerFactory } from '../server/logger.js';
|
|
11
11
|
import Underpost from '../index.js';
|
|
12
12
|
|
|
13
13
|
const logger = loggerFactory(import.meta);
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Module for building client-side icons
|
|
3
|
-
* @module src/
|
|
3
|
+
* @module src/client-builder/client-icons.js
|
|
4
4
|
* @namespace clientIcons
|
|
5
5
|
*/
|
|
6
6
|
import { favicons } from 'favicons';
|
|
7
|
-
import { loggerFactory } from '
|
|
7
|
+
import { loggerFactory } from '../server/logger.js';
|
|
8
8
|
import fs from 'fs-extra';
|
|
9
9
|
import { getCapVariableName } from '../client/components/core/CommonJs.js';
|
|
10
10
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Module for managing server side rendering
|
|
3
|
-
* @module src/
|
|
3
|
+
* @module src/client-builder/ssr.js
|
|
4
4
|
* @namespace ServerSideRendering
|
|
5
5
|
*/
|
|
6
6
|
|
|
@@ -10,19 +10,19 @@ import vm from 'node:vm';
|
|
|
10
10
|
import Underpost from '../index.js';
|
|
11
11
|
|
|
12
12
|
import { srcFormatted, JSONweb } from './client-formatted.js';
|
|
13
|
-
import { loggerFactory } from '
|
|
14
|
-
import { getRootDirectory } from '
|
|
13
|
+
import { loggerFactory } from '../server/logger.js';
|
|
14
|
+
import { getRootDirectory } from '../server/process.js';
|
|
15
15
|
|
|
16
16
|
const logger = loggerFactory(import.meta);
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Creates a server-side rendering component function from a given file path.
|
|
20
20
|
* It reads the component file, formats it, and executes it in a sandboxed Node.js VM context to extract the component.
|
|
21
|
-
* @param {string} [componentPath='./src/client/ssr/
|
|
21
|
+
* @param {string} [componentPath='./src/client/ssr/RootDocument.js'] - The path to the SSR component file.
|
|
22
22
|
* @returns {Promise<Function>} A promise that resolves to the SSR component function.
|
|
23
23
|
* @memberof ServerSideRendering
|
|
24
24
|
*/
|
|
25
|
-
const ssrFactory = async (componentPath = `./src/client/ssr/
|
|
25
|
+
const ssrFactory = async (componentPath = `./src/client/ssr/RootDocument.js`) => {
|
|
26
26
|
const context = { SrrComponent: () => {}, npm_package_version: Underpost.version };
|
|
27
27
|
vm.createContext(context);
|
|
28
28
|
vm.runInContext(await srcFormatted(fs.readFileSync(componentPath, 'utf8')), context);
|
package/src/client.build.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { loggerFactory } from './server/logger.js';
|
|
7
7
|
import { Config } from './server/conf.js';
|
|
8
8
|
import { ProcessController } from './server/process.js';
|
|
9
|
-
import { clientLiveBuild } from './
|
|
9
|
+
import { clientLiveBuild } from './client-builder/client-build-live.js';
|
|
10
10
|
|
|
11
11
|
await Config.build();
|
|
12
12
|
|
|
@@ -15,5 +15,3 @@ const logger = loggerFactory(import.meta);
|
|
|
15
15
|
await logger.setUpInfo();
|
|
16
16
|
|
|
17
17
|
await clientLiveBuild();
|
|
18
|
-
|
|
19
|
-
// ProcessController.init(logger);
|
package/src/client.dev.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { loggerFactory } from './server/logger.js';
|
|
7
7
|
import { ProcessController } from './server/process.js';
|
|
8
8
|
import { Config, buildClientStaticConf } from './server/conf.js';
|
|
9
|
-
import { createClientDevServer } from './
|
|
9
|
+
import { createClientDevServer } from './client-builder/client-dev-server.js';
|
|
10
10
|
|
|
11
11
|
const logger = loggerFactory(import.meta);
|
|
12
12
|
|
|
@@ -290,19 +290,16 @@ class MongoBootstrap {
|
|
|
290
290
|
* @returns {Promise<number>} Number of pods that failed to become ready (0 = all good).
|
|
291
291
|
*/
|
|
292
292
|
static async waitForPods(namespace, replicaCount) {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
const failed = results.filter((r) => !r.ready).map((r) => `${MONGODB_STATEFULSET_NAME}-${r.index}`);
|
|
302
|
-
if (failed.length > 0) {
|
|
303
|
-
logger.error('MongoDB pods did not become ready', { failed });
|
|
293
|
+
let failedCount = 0;
|
|
294
|
+
for (let i = 0; i < replicaCount; i++) {
|
|
295
|
+
const podName = `${MONGODB_STATEFULSET_NAME}-${i}`;
|
|
296
|
+
const result = shellExec(`kubectl wait --for=condition=Ready pod/${podName} -n ${namespace} --timeout=60s`);
|
|
297
|
+
if (result.code !== 0) {
|
|
298
|
+
logger.error(`Pod ${podName} did not become ready`);
|
|
299
|
+
failedCount++;
|
|
300
|
+
}
|
|
304
301
|
}
|
|
305
|
-
return
|
|
302
|
+
return failedCount;
|
|
306
303
|
}
|
|
307
304
|
|
|
308
305
|
/**
|
|
@@ -620,6 +617,9 @@ class MongoBootstrap {
|
|
|
620
617
|
process.env.DB_PASSWORD ||
|
|
621
618
|
readTrimmedFile('./engine-private/mongodb-password');
|
|
622
619
|
|
|
620
|
+
// Ensure the pod is ready before querying
|
|
621
|
+
shellExec(`kubectl wait --for=condition=Ready pod/${podName} -n ${namespace} --timeout=60s`);
|
|
622
|
+
|
|
623
623
|
const evalExpr = 'rs.status().members.filter(m=>m.stateStr=="PRIMARY").map(m=>m.name)';
|
|
624
624
|
|
|
625
625
|
const cli = disableAuth ? 'mongo' : 'mongosh';
|