cyberia 3.2.9 → 3.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/engine-cyberia.cd.yml +6 -0
- package/.github/workflows/npmpkg.ci.yml +1 -0
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +1 -0
- package/.vscode/extensions.json +9 -9
- package/.vscode/settings.json +20 -4
- package/CHANGELOG.md +213 -1
- package/CLI-HELP.md +92 -23
- package/README.md +190 -348
- package/bin/build.js +24 -8
- package/bin/build.template.js +187 -0
- package/bin/cyberia.js +229 -52
- package/bin/deploy.js +12 -2
- package/bin/index.js +229 -52
- package/bump.config.js +26 -0
- package/conf.js +130 -24
- package/deployment.yaml +4 -2
- package/hardhat/package-lock.json +113 -144
- package/hardhat/package.json +4 -3
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -2
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
- package/manifests/kind-config-dev.yaml +8 -0
- package/manifests/lxd/lxd-admin-profile.yaml +12 -3
- package/manifests/mongodb/pv-pvc.yaml +44 -8
- package/manifests/mongodb/statefulset.yaml +55 -68
- package/manifests/mongodb-4.4/headless-service.yaml +10 -0
- package/manifests/mongodb-4.4/kustomization.yaml +3 -1
- package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
- package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
- package/manifests/mongodb-4.4/statefulset.yaml +79 -0
- package/manifests/mongodb-4.4/storage-class.yaml +9 -0
- package/manifests/valkey/statefulset.yaml +1 -1
- package/manifests/valkey/valkey-nodeport.yaml +17 -0
- package/package.json +27 -15
- package/scripts/ipxe-setup.sh +52 -49
- package/scripts/k3s-node-setup.sh +81 -46
- package/scripts/lxd-vm-setup.sh +193 -8
- package/scripts/maas-nat-firewalld.sh +145 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +16 -16
- package/src/api/core/core.router.js +19 -14
- package/src/api/core/core.service.js +5 -5
- package/src/api/crypto/crypto.router.js +18 -12
- package/src/api/crypto/crypto.service.js +3 -3
- package/src/api/cyberia-action/cyberia-action.model.js +1 -1
- package/src/api/cyberia-action/cyberia-action.router.js +22 -18
- package/src/api/cyberia-action/cyberia-action.service.js +5 -5
- package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
- package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +6 -6
- package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
- package/src/api/cyberia-entity/cyberia-entity.service.js +5 -5
- package/src/api/cyberia-instance/cyberia-fallback-world.js +79 -4
- package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
- package/src/api/cyberia-instance/cyberia-instance.service.js +10 -10
- package/src/api/cyberia-instance/cyberia-world-generator.js +3 -3
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +14 -48
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +5 -5
- package/src/api/cyberia-map/cyberia-map.router.js +35 -30
- package/src/api/cyberia-map/cyberia-map.service.js +7 -7
- package/src/api/cyberia-quest/cyberia-quest.model.js +1 -1
- package/src/api/cyberia-quest/cyberia-quest.router.js +22 -18
- package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +22 -18
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +5 -5
- package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
- package/src/api/default/default.router.js +22 -18
- package/src/api/default/default.service.js +5 -5
- package/src/api/document/document.router.js +28 -23
- package/src/api/document/document.service.js +100 -23
- package/src/api/file/file.router.js +19 -13
- package/src/api/file/file.service.js +9 -7
- package/src/api/instance/instance.router.js +29 -24
- package/src/api/instance/instance.service.js +6 -6
- package/src/api/ipfs/ipfs.router.js +21 -16
- package/src/api/ipfs/ipfs.service.js +8 -8
- package/src/api/object-layer/object-layer.router.js +512 -507
- package/src/api/object-layer/object-layer.service.js +17 -14
- package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +5 -5
- package/src/api/test/test.router.js +17 -12
- package/src/api/types.js +24 -0
- package/src/api/user/guest.service.js +5 -4
- package/src/api/user/user.router.js +297 -288
- package/src/api/user/user.service.js +100 -35
- package/src/cli/baremetal.js +132 -101
- package/src/cli/cluster.js +700 -232
- package/src/cli/db.js +59 -60
- package/src/cli/deploy.js +216 -137
- package/src/cli/fs.js +13 -3
- package/src/cli/index.js +80 -15
- package/src/cli/ipfs.js +4 -6
- package/src/cli/kubectl.js +4 -1
- package/src/cli/lxd.js +1099 -223
- package/src/cli/monitor.js +9 -3
- package/src/cli/release.js +334 -140
- package/src/cli/repository.js +68 -23
- package/src/cli/run.js +193 -49
- package/src/cli/secrets.js +11 -2
- package/src/cli/test.js +9 -3
- package/src/client/Default.index.js +9 -3
- package/src/client/components/core/Auth.js +5 -0
- package/src/client/components/core/ClientEvents.js +76 -0
- package/src/client/components/core/EventBus.js +4 -0
- package/src/client/components/core/Modal.js +82 -41
- package/src/client/components/core/PanelForm.js +56 -52
- package/src/client/components/core/Worker.js +162 -363
- package/src/client/components/cyberia/MapEngineCyberia.js +1 -1
- package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +50 -410
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +114 -327
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +200 -222
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +203 -185
- package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +2 -2
- package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
- package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
- package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
- package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
- package/src/client/sw/core.sw.js +174 -112
- package/src/db/DataBaseProvider.js +115 -15
- package/src/db/mariadb/MariaDB.js +2 -1
- package/src/db/mongo/MongoBootstrap.js +657 -0
- package/src/db/mongo/MongooseDB.js +129 -21
- package/src/grpc/cyberia/grpc-server.js +25 -57
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +24 -3
- package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
- package/src/runtime/cyberia-server/Dockerfile +29 -4
- package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
- package/src/runtime/express/Express.js +2 -2
- package/src/runtime/wp/Wp.js +8 -5
- package/src/server/auth.js +2 -2
- package/src/server/client-build-docs.js +1 -1
- package/src/server/client-build.js +94 -129
- package/src/server/conf.js +86 -83
- package/src/server/process.js +180 -19
- package/src/server/proxy.js +9 -2
- package/src/server/runtime.js +1 -1
- package/src/server/start.js +17 -5
- package/src/server/valkey.js +2 -0
- package/src/ws/IoInterface.js +16 -16
- package/src/ws/core/channels/core.ws.chat.js +11 -11
- package/src/ws/core/channels/core.ws.mailer.js +29 -29
- package/src/ws/core/channels/core.ws.stream.js +19 -19
- package/src/ws/core/core.ws.connection.js +8 -8
- package/src/ws/core/core.ws.server.js +6 -5
- package/src/ws/default/channels/default.ws.main.js +10 -10
- package/src/ws/default/default.ws.connection.js +4 -4
- package/src/ws/default/default.ws.server.js +4 -3
- package/bin/file.js +0 -202
- package/bin/vs.js +0 -74
- package/bin/zed.js +0 -84
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -574
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -467
- package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
- package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
- package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
- /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
- /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
- /package/src/client/ssr/{pages → views}/Test.js +0 -0
package/src/cli/repository.js
CHANGED
|
@@ -924,8 +924,6 @@ class UnderpostRepository {
|
|
|
924
924
|
shellExec(`cd ${privateRepoPath} && underpost pull . ${process.env.GITHUB_USERNAME}/${privateRepoName}`, {
|
|
925
925
|
silent: true,
|
|
926
926
|
});
|
|
927
|
-
shellExec(`underpost run secret`);
|
|
928
|
-
shellExec(`underpost run underpost-config`);
|
|
929
927
|
const packageJsonDeploy = JSON.parse(fs.readFileSync(`./engine-private/conf/${deployId}/package.json`, 'utf8'));
|
|
930
928
|
const packageJsonEngine = JSON.parse(fs.readFileSync(`./package.json`, 'utf8'));
|
|
931
929
|
if (packageJsonDeploy.version !== packageJsonEngine.version) {
|
|
@@ -1008,11 +1006,14 @@ Prevent build private config repo.`,
|
|
|
1008
1006
|
const host = 'default.net';
|
|
1009
1007
|
const path = '/';
|
|
1010
1008
|
DefaultConf.server[host][path].valkey = {
|
|
1011
|
-
port: 6379,
|
|
1012
|
-
host: '
|
|
1009
|
+
port: 'env:VALKEY_PORT:int:6379',
|
|
1010
|
+
host: 'env:VALKEY_HOST:127.0.0.1',
|
|
1013
1011
|
};
|
|
1014
|
-
|
|
1015
|
-
DefaultConf.server[host][path].db.
|
|
1012
|
+
DefaultConf.server[host][path].db.host = 'env:DB_HOST:mongodb://127.0.0.1:27017';
|
|
1013
|
+
DefaultConf.server[host][path].db.replicaSet = 'env:DB_REPLICA_SET:rs0';
|
|
1014
|
+
DefaultConf.server[host][path].db.authSource = 'env:DB_AUTH_SOURCE:admin';
|
|
1015
|
+
DefaultConf.server[host][path].db.user = 'env:DB_USER:';
|
|
1016
|
+
DefaultConf.server[host][path].db.password = 'env:DB_PASSWORD:';
|
|
1016
1017
|
defaultConf = true;
|
|
1017
1018
|
break;
|
|
1018
1019
|
}
|
|
@@ -1048,9 +1049,9 @@ Prevent build private config repo.`,
|
|
|
1048
1049
|
*/
|
|
1049
1050
|
clean(options = { paths: [''] }) {
|
|
1050
1051
|
for (const path of options.paths) {
|
|
1051
|
-
shellExec(`cd ${path} && git reset`, { silent: true });
|
|
1052
|
-
shellExec(`cd ${path} && git checkout .`, { silent: true });
|
|
1053
|
-
shellExec(`cd ${path} && git clean -f -d`, { silent: true });
|
|
1052
|
+
shellExec(`cd ${path} && git reset`, { silentOnError: true, silent: true, disableLog: true });
|
|
1053
|
+
shellExec(`cd ${path} && git checkout .`, { silentOnError: true, silent: true, disableLog: true });
|
|
1054
|
+
shellExec(`cd ${path} && git clean -f -d`, { silentOnError: true, silent: true, disableLog: true });
|
|
1054
1055
|
}
|
|
1055
1056
|
},
|
|
1056
1057
|
|
|
@@ -1104,7 +1105,7 @@ Prevent build private config repo.`,
|
|
|
1104
1105
|
|
|
1105
1106
|
try {
|
|
1106
1107
|
// Fetch directory contents recursively
|
|
1107
|
-
const copiedFiles = await this.
|
|
1108
|
+
const copiedFiles = await this.fetchAndCopyGitHubDirectory({
|
|
1108
1109
|
apiUrl,
|
|
1109
1110
|
targetPath,
|
|
1110
1111
|
basePath: directoryPath,
|
|
@@ -1140,7 +1141,7 @@ Prevent build private config repo.`,
|
|
|
1140
1141
|
* @returns {Promise<array>} Array of copied file paths.
|
|
1141
1142
|
* @memberof UnderpostRepository
|
|
1142
1143
|
*/
|
|
1143
|
-
async
|
|
1144
|
+
async fetchAndCopyGitHubDirectory(options) {
|
|
1144
1145
|
const { apiUrl, targetPath, basePath, branch } = options;
|
|
1145
1146
|
const copiedFiles = [];
|
|
1146
1147
|
|
|
@@ -1175,14 +1176,12 @@ Prevent build private config repo.`,
|
|
|
1175
1176
|
|
|
1176
1177
|
logger.info(`Found ${contents.length} items in directory: ${basePath}`);
|
|
1177
1178
|
|
|
1178
|
-
// Process each item in the directory
|
|
1179
1179
|
for (const item of contents) {
|
|
1180
1180
|
const itemTargetPath = `${targetPath}/${item.name}`;
|
|
1181
1181
|
|
|
1182
1182
|
if (item.type === 'file') {
|
|
1183
1183
|
logger.info(`Downloading file: ${item.path}`);
|
|
1184
1184
|
|
|
1185
|
-
// Download file content
|
|
1186
1185
|
const fileResponse = await fetch(item.download_url);
|
|
1187
1186
|
if (!fileResponse.ok) {
|
|
1188
1187
|
logger.error(`Failed to download: ${item.download_url}`);
|
|
@@ -1192,16 +1191,14 @@ Prevent build private config repo.`,
|
|
|
1192
1191
|
const fileContent = await fileResponse.text();
|
|
1193
1192
|
fs.writeFileSync(itemTargetPath, fileContent);
|
|
1194
1193
|
|
|
1195
|
-
logger.info(
|
|
1194
|
+
logger.info(`Saved: ${itemTargetPath}`);
|
|
1196
1195
|
copiedFiles.push(itemTargetPath);
|
|
1197
1196
|
} else if (item.type === 'dir') {
|
|
1198
|
-
logger.info(
|
|
1197
|
+
logger.info(`Processing directory: ${item.path}`);
|
|
1199
1198
|
|
|
1200
|
-
// Create subdirectory
|
|
1201
1199
|
fs.mkdirSync(itemTargetPath, { recursive: true });
|
|
1202
1200
|
|
|
1203
|
-
|
|
1204
|
-
const subFiles = await this._fetchAndCopyGitHubDirectory({
|
|
1201
|
+
const subFiles = await this.fetchAndCopyGitHubDirectory({
|
|
1205
1202
|
apiUrl: item.url,
|
|
1206
1203
|
targetPath: itemTargetPath,
|
|
1207
1204
|
basePath: item.path,
|
|
@@ -1209,7 +1206,7 @@ Prevent build private config repo.`,
|
|
|
1209
1206
|
});
|
|
1210
1207
|
|
|
1211
1208
|
copiedFiles.push(...subFiles);
|
|
1212
|
-
logger.info(
|
|
1209
|
+
logger.info(`Completed directory: ${item.path} (${subFiles.length} files)`);
|
|
1213
1210
|
} else {
|
|
1214
1211
|
logger.warn(`Skipping unknown item type '${item.type}': ${item.path}`);
|
|
1215
1212
|
}
|
|
@@ -1295,7 +1292,7 @@ Prevent build private config repo.`,
|
|
|
1295
1292
|
},
|
|
1296
1293
|
/**
|
|
1297
1294
|
* Checks whether a remote Git repository URL is reachable.
|
|
1298
|
-
* Uses `
|
|
1295
|
+
* Uses `silentOnError` so a non-reachable remote returns false instead of throwing.
|
|
1299
1296
|
* Injects `GITHUB_TOKEN` into GitHub HTTPS URLs when available.
|
|
1300
1297
|
* @param {string} url - Full HTTPS clone URL to test (e.g. "https://github.com/org/repo.git").
|
|
1301
1298
|
* @returns {boolean} `true` when the remote responded with at least one ref hash.
|
|
@@ -1305,10 +1302,11 @@ Prevent build private config repo.`,
|
|
|
1305
1302
|
if (!url) return false;
|
|
1306
1303
|
const authUrl = Underpost.repo.resolveAuthUrl(url);
|
|
1307
1304
|
// GIT_TERMINAL_PROMPT=0 prevents git from hanging on credential prompts inside containers.
|
|
1308
|
-
const raw = shellExec(`GIT_TERMINAL_PROMPT=0 git ls-remote "${authUrl}" HEAD 2>&1
|
|
1305
|
+
const raw = shellExec(`GIT_TERMINAL_PROMPT=0 git ls-remote "${authUrl}" HEAD 2>&1`, {
|
|
1309
1306
|
stdout: true,
|
|
1310
1307
|
silent: true,
|
|
1311
1308
|
disableLog: true,
|
|
1309
|
+
silentOnError: true,
|
|
1312
1310
|
});
|
|
1313
1311
|
logger.info('isRemoteRepo', { url, raw: (raw || '').slice(0, 120) });
|
|
1314
1312
|
return typeof raw === 'string' && /^[0-9a-f]{40}\t/m.test(raw);
|
|
@@ -1380,11 +1378,12 @@ Prevent build private config repo.`,
|
|
|
1380
1378
|
}
|
|
1381
1379
|
shellExec(`cd "${repoPath}" && git config user.name '${gitUsername}'`);
|
|
1382
1380
|
shellExec(`cd "${repoPath}" && git config user.email '${gitEmail}'`);
|
|
1383
|
-
|
|
1381
|
+
shellExec(`cd "${repoPath}" && git config core.filemode false`);
|
|
1384
1382
|
if (origin) {
|
|
1385
|
-
const currentRemote = shellExec(`cd "${repoPath}" && git remote get-url origin
|
|
1383
|
+
const currentRemote = shellExec(`cd "${repoPath}" && git remote get-url origin`, {
|
|
1386
1384
|
stdout: true,
|
|
1387
1385
|
silent: true,
|
|
1386
|
+
silentOnError: true,
|
|
1388
1387
|
}).trim();
|
|
1389
1388
|
if (!currentRemote) {
|
|
1390
1389
|
shellExec(`cd "${repoPath}" && git remote add origin "${origin}"`);
|
|
@@ -1608,6 +1607,52 @@ Prevent build private config repo.`,
|
|
|
1608
1607
|
logger.info('engine-private in /home/dd removed');
|
|
1609
1608
|
}
|
|
1610
1609
|
},
|
|
1610
|
+
|
|
1611
|
+
/**
|
|
1612
|
+
* Resolves the GitHub repository for a given instance runtime by scanning
|
|
1613
|
+
* every `conf.instances.json` listed in `./engine-private/deploy/dd.router`.
|
|
1614
|
+
*
|
|
1615
|
+
* Resolution order:
|
|
1616
|
+
* 1. If `runtime` is falsy, returns `${GITHUB_USERNAME}/engine`.
|
|
1617
|
+
* 2. Iterates each deploy ID found in `dd.router` and looks for an instance
|
|
1618
|
+
* whose `runtime` field matches the supplied value.
|
|
1619
|
+
* 3. When a match is found, returns `instance.metadata.repository`.
|
|
1620
|
+
* 4. Falls back to `${GITHUB_USERNAME}/engine` when no match is found.
|
|
1621
|
+
*
|
|
1622
|
+
* @param {string} [runtime=''] - The runtime identifier to look up (e.g. `'cyberia-server'`, `'cyberia-client'`).
|
|
1623
|
+
* @returns {string} The resolved `owner/repo` string.
|
|
1624
|
+
* @memberof UnderpostRepository
|
|
1625
|
+
*/
|
|
1626
|
+
resolveInstanceRepo(runtime = '') {
|
|
1627
|
+
const fallback = `${process.env.GITHUB_USERNAME}/engine`;
|
|
1628
|
+
if (!runtime) return fallback;
|
|
1629
|
+
const ddRouter = './engine-private/deploy/dd.router';
|
|
1630
|
+
const deployIds = fs.existsSync(ddRouter)
|
|
1631
|
+
? fs
|
|
1632
|
+
.readFileSync(ddRouter, 'utf8')
|
|
1633
|
+
.split(',')
|
|
1634
|
+
.map((s) => s.trim())
|
|
1635
|
+
.filter(Boolean)
|
|
1636
|
+
: [];
|
|
1637
|
+
for (const deployId of deployIds) {
|
|
1638
|
+
const confPath = `./engine-private/conf/${deployId}/conf.instances.json`;
|
|
1639
|
+
if (!fs.existsSync(confPath)) continue;
|
|
1640
|
+
try {
|
|
1641
|
+
const instances = JSON.parse(fs.readFileSync(confPath, 'utf8'));
|
|
1642
|
+
const match = instances.find((i) => i && i.runtime === runtime);
|
|
1643
|
+
if (match && match.metadata && match.metadata.repository) {
|
|
1644
|
+
logger.info(`[resolveInstanceRepo] resolved from ${confPath}`, {
|
|
1645
|
+
runtime,
|
|
1646
|
+
repo: match.metadata.repository,
|
|
1647
|
+
});
|
|
1648
|
+
return match.metadata.repository;
|
|
1649
|
+
}
|
|
1650
|
+
} catch (err) {
|
|
1651
|
+
logger.warn(`[resolveInstanceRepo] failed to parse ${confPath}: ${err.message}`);
|
|
1652
|
+
}
|
|
1653
|
+
}
|
|
1654
|
+
return fallback;
|
|
1655
|
+
},
|
|
1611
1656
|
};
|
|
1612
1657
|
}
|
|
1613
1658
|
|