cyberia 3.1.3 → 3.2.5
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 +0 -2
- package/.github/workflows/engine-cyberia.cd.yml +10 -8
- package/.github/workflows/engine-cyberia.ci.yml +12 -29
- package/.github/workflows/ghpkg.ci.yml +4 -4
- package/.github/workflows/npmpkg.ci.yml +28 -11
- package/.github/workflows/publish.ci.yml +21 -2
- package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -5
- package/.github/workflows/pwa-microservices-template-test.ci.yml +3 -3
- package/.github/workflows/release.cd.yml +13 -8
- package/CHANGELOG.md +433 -1
- package/CLI-HELP.md +57 -7
- package/Dockerfile +4 -2
- package/README.md +347 -22
- package/bin/build.js +5 -2
- package/bin/cyberia.js +1789 -112
- package/bin/deploy.js +177 -124
- package/bin/file.js +3 -0
- package/bin/index.js +1789 -112
- package/conf.js +64 -8
- package/deployment.yaml +92 -20
- package/hardhat/hardhat.config.js +13 -13
- package/hardhat/ignition/modules/ObjectLayerToken.js +1 -1
- package/hardhat/package-lock.json +2554 -5859
- package/hardhat/package.json +13 -22
- package/hardhat/scripts/deployObjectLayerToken.js +1 -1
- package/hardhat/test/ObjectLayerToken.js +4 -2
- package/hardhat/types/ethers-contracts/ObjectLayerToken.ts +690 -0
- package/hardhat/types/ethers-contracts/common.ts +92 -0
- package/hardhat/types/ethers-contracts/factories/ObjectLayerToken__factory.ts +1055 -0
- package/hardhat/types/ethers-contracts/factories/index.ts +4 -0
- package/hardhat/types/ethers-contracts/hardhat.d.ts +47 -0
- package/hardhat/types/ethers-contracts/index.ts +6 -0
- package/jsdoc.dd-cyberia.json +64 -55
- package/jsdoc.json +64 -55
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +5 -4
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +5 -4
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +92 -20
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +54 -18
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +88 -74
- package/manifests/deployment/dd-test-development/proxy.yaml +13 -4
- package/manifests/deployment/playwright/deployment.yaml +1 -1
- package/nodemon.json +1 -1
- package/package.json +22 -16
- package/proxy.yaml +54 -18
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +44 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +16 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +80 -7
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +93 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +36 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +29 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +51 -0
- package/src/api/cyberia-entity/cyberia-entity.controller.js +74 -0
- package/src/api/cyberia-entity/cyberia-entity.model.js +24 -0
- package/src/api/cyberia-entity/cyberia-entity.router.js +27 -0
- package/src/api/cyberia-entity/cyberia-entity.service.js +42 -0
- package/src/api/cyberia-instance/cyberia-fallback-world.js +368 -0
- package/src/api/cyberia-instance/cyberia-instance.controller.js +92 -0
- package/src/api/cyberia-instance/cyberia-instance.model.js +84 -0
- package/src/api/cyberia-instance/cyberia-instance.router.js +63 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +191 -0
- package/src/api/cyberia-instance/cyberia-portal-connector.js +486 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +74 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +413 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +228 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +27 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +42 -0
- package/src/api/cyberia-map/cyberia-map.controller.js +79 -0
- package/src/api/cyberia-map/cyberia-map.model.js +30 -0
- package/src/api/cyberia-map/cyberia-map.router.js +40 -0
- package/src/api/cyberia-map/cyberia-map.service.js +74 -0
- package/src/api/file/file.ref.json +18 -0
- package/src/api/ipfs/ipfs.controller.js +4 -25
- package/src/api/ipfs/ipfs.model.js +43 -34
- package/src/api/ipfs/ipfs.router.js +8 -13
- package/src/api/ipfs/ipfs.service.js +54 -102
- package/src/api/object-layer/README.md +347 -22
- package/src/api/object-layer/object-layer.router.js +30 -0
- package/src/api/object-layer/object-layer.service.js +114 -31
- package/src/api/user/user.service.js +8 -7
- package/src/cli/cluster.js +7 -7
- package/src/cli/db.js +710 -827
- package/src/cli/deploy.js +151 -93
- package/src/cli/env.js +29 -0
- package/src/cli/fs.js +5 -2
- package/src/cli/index.js +48 -2
- package/src/cli/kubectl.js +211 -0
- package/src/cli/release.js +284 -0
- package/src/cli/repository.js +438 -75
- package/src/cli/run.js +195 -35
- package/src/cli/secrets.js +73 -0
- package/src/cli/test.js +3 -3
- package/src/client/Cryptokoyn.index.js +3 -4
- package/src/client/CyberiaPortal.index.js +3 -4
- package/src/client/Default.index.js +3 -4
- package/src/client/Itemledger.index.js +3 -4
- package/src/client/Underpost.index.js +3 -4
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/CalendarCore.js +2 -2
- package/src/client/components/core/DropDown.js +137 -17
- package/src/client/components/core/Keyboard.js +2 -2
- package/src/client/components/core/LogIn.js +2 -2
- package/src/client/components/core/LogOut.js +2 -2
- package/src/client/components/core/Modal.js +0 -1
- package/src/client/components/core/Panel.js +0 -1
- package/src/client/components/core/PanelForm.js +19 -19
- package/src/client/components/core/SocketIo.js +82 -29
- package/src/client/components/core/SocketIoHandler.js +75 -0
- package/src/client/components/core/Stream.js +143 -95
- package/src/client/components/core/Webhook.js +40 -7
- package/src/client/components/cryptokoyn/AppStoreCryptokoyn.js +5 -0
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +3 -3
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +2 -2
- package/src/client/components/cryptokoyn/MenuCryptokoyn.js +3 -3
- package/src/client/components/cryptokoyn/SocketIoCryptokoyn.js +3 -51
- package/src/client/components/cyberia/InstanceEngineCyberia.js +700 -0
- package/src/client/components/cyberia/MapEngineCyberia.js +1359 -2
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +17 -6
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +92 -54
- package/src/client/components/cyberia-portal/AppStoreCyberiaPortal.js +5 -0
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +216 -30
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +3 -3
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +40 -7
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +4 -0
- package/src/client/components/cyberia-portal/SocketIoCyberiaPortal.js +3 -49
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
- package/src/client/components/default/AppStoreDefault.js +5 -0
- package/src/client/components/default/LogInDefault.js +3 -3
- package/src/client/components/default/LogOutDefault.js +2 -2
- package/src/client/components/default/MenuDefault.js +5 -5
- package/src/client/components/default/SocketIoDefault.js +3 -51
- package/src/client/components/itemledger/AppStoreItemledger.js +5 -0
- package/src/client/components/itemledger/LogInItemledger.js +3 -3
- package/src/client/components/itemledger/LogOutItemledger.js +2 -2
- package/src/client/components/itemledger/MenuItemledger.js +3 -3
- package/src/client/components/itemledger/SocketIoItemledger.js +3 -51
- package/src/client/components/underpost/AppStoreUnderpost.js +5 -0
- package/src/client/components/underpost/LogInUnderpost.js +3 -3
- package/src/client/components/underpost/LogOutUnderpost.js +2 -2
- package/src/client/components/underpost/MenuUnderpost.js +5 -5
- package/src/client/components/underpost/SocketIoUnderpost.js +3 -51
- package/src/client/services/core/core.service.js +20 -8
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +105 -0
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +57 -0
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +105 -0
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +194 -0
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +122 -0
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +105 -0
- package/src/client/services/cyberia-map/cyberia-map.management.js +193 -0
- package/src/client/services/cyberia-map/cyberia-map.service.js +126 -0
- package/src/client/services/instance/instance.management.js +2 -2
- package/src/client/services/ipfs/ipfs.service.js +3 -23
- package/src/client/services/object-layer/object-layer.management.js +3 -3
- package/src/client/services/object-layer/object-layer.service.js +21 -0
- package/src/client/services/user/user.management.js +2 -2
- package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +305 -0
- package/src/grpc/cyberia/README.md +326 -0
- package/src/grpc/cyberia/grpc-server.js +530 -0
- package/src/index.js +24 -1
- package/src/runtime/express/Dockerfile +4 -0
- package/src/runtime/express/Express.js +18 -1
- package/src/runtime/lampp/Dockerfile +13 -2
- package/src/runtime/lampp/Lampp.js +27 -4
- package/src/runtime/wp/Dockerfile +68 -0
- package/src/runtime/wp/Wp.js +639 -0
- package/src/server/auth.js +24 -1
- package/src/server/backup.js +37 -9
- package/src/server/client-build-docs.js +9 -2
- package/src/server/client-build.js +31 -31
- package/src/server/client-formatted.js +109 -57
- package/src/server/conf.js +24 -9
- package/src/server/cron.js +25 -23
- package/src/server/dns.js +2 -1
- package/src/server/ipfs-client.js +24 -1
- package/src/server/object-layer.js +149 -108
- package/src/server/peer.js +8 -0
- package/src/server/runtime.js +25 -1
- package/src/server/semantic-layer-generator-floor.js +359 -0
- package/src/server/semantic-layer-generator-skin.js +1294 -0
- package/src/server/semantic-layer-generator.js +116 -555
- package/src/server/start.js +2 -2
- package/src/ws/IoInterface.js +1 -10
- package/src/ws/IoServer.js +14 -33
- package/src/ws/core/channels/core.ws.chat.js +65 -20
- package/src/ws/core/channels/core.ws.mailer.js +113 -32
- package/src/ws/core/channels/core.ws.stream.js +90 -31
- package/src/ws/core/core.ws.connection.js +12 -33
- package/src/ws/core/core.ws.emit.js +10 -26
- package/src/ws/core/core.ws.server.js +25 -58
- package/src/ws/default/channels/default.ws.main.js +53 -12
- package/src/ws/default/default.ws.connection.js +26 -13
- package/src/ws/default/default.ws.server.js +30 -12
- package/src/client/components/cryptokoyn/CommonCryptokoyn.js +0 -29
- package/src/client/components/cryptokoyn/ElementsCryptokoyn.js +0 -38
- package/src/client/components/cyberia-portal/ElementsCyberiaPortal.js +0 -38
- package/src/client/components/default/ElementsDefault.js +0 -38
- package/src/client/components/itemledger/CommonItemledger.js +0 -29
- package/src/client/components/itemledger/ElementsItemledger.js +0 -38
- package/src/client/components/underpost/CommonUnderpost.js +0 -29
- package/src/client/components/underpost/ElementsUnderpost.js +0 -38
- package/src/ws/core/management/core.ws.chat.js +0 -8
- package/src/ws/core/management/core.ws.mailer.js +0 -16
- package/src/ws/core/management/core.ws.stream.js +0 -8
- package/src/ws/default/management/default.ws.main.js +0 -8
package/src/cli/run.js
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* @namespace UnderpostRun
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { daemonProcess, getTerminalPid, shellCd, shellExec } from '../server/process.js';
|
|
7
|
+
import { daemonProcess, getTerminalPid, pbcopy, shellCd, shellExec } from '../server/process.js';
|
|
8
|
+
import crypto from 'crypto';
|
|
8
9
|
import {
|
|
9
10
|
awaitDeployMonitor,
|
|
10
11
|
buildKindPorts,
|
|
@@ -17,12 +18,31 @@ import {
|
|
|
17
18
|
import { actionInitLog, loggerFactory } from '../server/logger.js';
|
|
18
19
|
|
|
19
20
|
import fs from 'fs-extra';
|
|
21
|
+
import net from 'net';
|
|
20
22
|
import { range, setPad, timer } from '../client/components/core/CommonJs.js';
|
|
21
23
|
|
|
22
24
|
import os from 'os';
|
|
23
25
|
import Underpost from '../index.js';
|
|
24
26
|
import dotenv from 'dotenv';
|
|
25
27
|
|
|
28
|
+
const waitForPort = (port, host = '127.0.0.1', { maxAttempts = 30, interval = 2000 } = {}) =>
|
|
29
|
+
new Promise((resolve, reject) => {
|
|
30
|
+
let attempts = 0;
|
|
31
|
+
const tryConnect = () => {
|
|
32
|
+
attempts++;
|
|
33
|
+
const socket = net.createConnection({ port, host }, () => {
|
|
34
|
+
socket.destroy();
|
|
35
|
+
resolve();
|
|
36
|
+
});
|
|
37
|
+
socket.on('error', () => {
|
|
38
|
+
socket.destroy();
|
|
39
|
+
if (attempts >= maxAttempts) return reject(new Error(`Port ${port} not ready after ${maxAttempts} attempts`));
|
|
40
|
+
setTimeout(tryConnect, interval);
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
tryConnect();
|
|
44
|
+
});
|
|
45
|
+
|
|
26
46
|
const logger = loggerFactory(import.meta);
|
|
27
47
|
|
|
28
48
|
/**
|
|
@@ -154,6 +174,8 @@ const DEFAULT_OPTION = {
|
|
|
154
174
|
createJobNow: false,
|
|
155
175
|
fromNCommit: 0,
|
|
156
176
|
hostAliases: '',
|
|
177
|
+
gitClean: false,
|
|
178
|
+
copy: false,
|
|
157
179
|
};
|
|
158
180
|
|
|
159
181
|
/**
|
|
@@ -246,8 +268,15 @@ class UnderpostRun {
|
|
|
246
268
|
const ports = '6379,27017';
|
|
247
269
|
shellExec(`node bin run kill '${ports}'`);
|
|
248
270
|
shellExec(`node bin run dev-cluster --dev --expose --namespace ${options.namespace}`, { async: true });
|
|
249
|
-
|
|
250
|
-
|
|
271
|
+
logger.info('Waiting for port-forward services to be ready...');
|
|
272
|
+
try {
|
|
273
|
+
await Promise.all([waitForPort(27017), waitForPort(6379)]);
|
|
274
|
+
logger.info('Port-forward services are ready');
|
|
275
|
+
} catch (err) {
|
|
276
|
+
logger.error('Port-forward services failed to become ready', { error: err.message });
|
|
277
|
+
shellExec(`node bin run kill '${ports}'`);
|
|
278
|
+
throw err;
|
|
279
|
+
}
|
|
251
280
|
shellExec(`node bin metadata --generate ${path}`);
|
|
252
281
|
shellExec(`node bin db --dev --clean-fs-collection dd`);
|
|
253
282
|
shellExec(`node bin run kill '${ports}'`);
|
|
@@ -373,8 +402,12 @@ class UnderpostRun {
|
|
|
373
402
|
}
|
|
374
403
|
shellExec(`${baseCommand} run pull`);
|
|
375
404
|
|
|
376
|
-
// Capture last N commit messages for propagation
|
|
377
|
-
|
|
405
|
+
// Capture last N commit messages for propagation.
|
|
406
|
+
// When --from-n-commit is not set, auto-detect unpushed commit count (same as --unpush flag).
|
|
407
|
+
const fromN =
|
|
408
|
+
options.fromNCommit && parseInt(options.fromNCommit) > 0
|
|
409
|
+
? parseInt(options.fromNCommit)
|
|
410
|
+
: Underpost.repo.getUnpushedCount('.').count;
|
|
378
411
|
const message = shellExec(`node bin cmt --changelog ${fromN} --changelog-no-hash`, {
|
|
379
412
|
silent: true,
|
|
380
413
|
stdout: true,
|
|
@@ -423,6 +456,40 @@ class UnderpostRun {
|
|
|
423
456
|
});
|
|
424
457
|
},
|
|
425
458
|
|
|
459
|
+
/**
|
|
460
|
+
* @method template-deploy-local
|
|
461
|
+
* @description Similar to `template-deploy` but runs the workflow locally without dispatching GitHub Actions. It pulls the latest changes, pushes to GitHub, builds the template, and optionally triggers a local release with CI push.
|
|
462
|
+
* @param {string} path - The deployment path identifier (e.g., 'sync-engine-core', 'init-engine-core', or empty for build-only).
|
|
463
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
464
|
+
* @memberof UnderpostRun
|
|
465
|
+
*/
|
|
466
|
+
'template-deploy-local': async (path, options = DEFAULT_OPTION) => {
|
|
467
|
+
const baseCommand = options.dev ? 'node bin' : 'underpost';
|
|
468
|
+
shellExec(`npm run security:secrets`);
|
|
469
|
+
const reportPath = './gitleaks-report.json';
|
|
470
|
+
if (fs.existsSync(reportPath) && JSON.parse(fs.readFileSync(reportPath, 'utf8')).length > 0) {
|
|
471
|
+
logger.error('Secrets detected in gitleaks-report.json, aborting template-deploy');
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
shellExec(`${baseCommand} run pull`);
|
|
475
|
+
|
|
476
|
+
// Capture last N commit messages from the engine repo.
|
|
477
|
+
// When --from-n-commit is not set, auto-detect unpushed commit count (same as --unpush flag).
|
|
478
|
+
const fromN =
|
|
479
|
+
options.fromNCommit && parseInt(options.fromNCommit) > 0
|
|
480
|
+
? parseInt(options.fromNCommit)
|
|
481
|
+
: Underpost.repo.getUnpushedCount('.').count;
|
|
482
|
+
const rawMessage = shellExec(`node bin cmt --changelog ${fromN} --changelog-no-hash`, {
|
|
483
|
+
silent: true,
|
|
484
|
+
stdout: true,
|
|
485
|
+
}).trim();
|
|
486
|
+
const sanitizedMessage = Underpost.repo.sanitizeChangelogMessage(rawMessage);
|
|
487
|
+
|
|
488
|
+
const { triggerCmd } = path
|
|
489
|
+
? await Underpost.release.ci(path, sanitizedMessage, options)
|
|
490
|
+
: await Underpost.release.pwa(sanitizedMessage, options);
|
|
491
|
+
pbcopy(triggerCmd + ' && cd /home/dd/engine');
|
|
492
|
+
},
|
|
426
493
|
/**
|
|
427
494
|
* @method template-deploy-image
|
|
428
495
|
* @description Dispatches the Docker image CI workflow for the `engine` repository.
|
|
@@ -438,6 +505,21 @@ class UnderpostRun {
|
|
|
438
505
|
inputs: {},
|
|
439
506
|
});
|
|
440
507
|
},
|
|
508
|
+
/**
|
|
509
|
+
* @method docker-image
|
|
510
|
+
* @description Dispatches the Docker image CI workflow (`docker-image.ci.yml`) for the `engine` repository via `workflow_dispatch`.
|
|
511
|
+
* @param {string} path - The input value, identifier, or path for the operation.
|
|
512
|
+
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
513
|
+
* @memberof UnderpostRun
|
|
514
|
+
*/
|
|
515
|
+
'docker-image': (path, options = DEFAULT_OPTION) => {
|
|
516
|
+
Underpost.repo.dispatchWorkflow({
|
|
517
|
+
repo: `${process.env.GITHUB_USERNAME}/engine`,
|
|
518
|
+
workflowFile: 'docker-image.ci.yml',
|
|
519
|
+
ref: 'master',
|
|
520
|
+
inputs: {},
|
|
521
|
+
});
|
|
522
|
+
},
|
|
441
523
|
/**
|
|
442
524
|
* @method clean
|
|
443
525
|
* @description Changes directory to the provided path (defaulting to `/home/dd/engine`) and runs `node bin/deploy clean-core-repo`.
|
|
@@ -572,6 +654,7 @@ echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com
|
|
|
572
654
|
const env = options.dev ? 'development' : 'production';
|
|
573
655
|
const baseCommand = options.dev ? 'node bin' : 'underpost';
|
|
574
656
|
const baseClusterCommand = options.dev ? ' --dev' : '';
|
|
657
|
+
const clusterFlag = options.k3s ? ' --k3s' : options.kind ? ' --kind' : ' --kubeadm';
|
|
575
658
|
const defaultPath = [
|
|
576
659
|
'dd-default',
|
|
577
660
|
options.replicas,
|
|
@@ -592,7 +675,8 @@ echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com
|
|
|
592
675
|
if (!validVersion) throw new Error('Version mismatch');
|
|
593
676
|
}
|
|
594
677
|
if (options.timezone !== 'none') shellExec(`${baseCommand} run${baseClusterCommand} tz`);
|
|
595
|
-
if (options.deployIdCronJobs !== 'none')
|
|
678
|
+
if (options.deployIdCronJobs !== 'none')
|
|
679
|
+
shellExec(`node bin cron${baseClusterCommand}${clusterFlag} --setup-start --git --apply`);
|
|
596
680
|
}
|
|
597
681
|
|
|
598
682
|
const currentTraffic = isDeployRunnerContext(path, options)
|
|
@@ -605,20 +689,25 @@ echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com
|
|
|
605
689
|
const cmdString = options.cmd
|
|
606
690
|
? ' --cmd ' + (options.cmd.find((c) => c.match('"')) ? '"' + options.cmd + '"' : "'" + options.cmd + "'")
|
|
607
691
|
: '';
|
|
692
|
+
const gitCleanFlag = options.gitClean ? ' --git-clean' : '';
|
|
608
693
|
|
|
609
694
|
shellExec(
|
|
610
|
-
`${baseCommand} deploy --
|
|
695
|
+
`${baseCommand} deploy${clusterFlag} --build-manifest --sync --info-router --replicas ${replicas} --node ${node}${
|
|
611
696
|
image ? ` --image ${image}` : ''
|
|
612
697
|
}${versions ? ` --versions ${versions}` : ''}${
|
|
613
698
|
options.namespace ? ` --namespace ${options.namespace}` : ''
|
|
614
|
-
}${timeoutFlags}${cmdString} ${deployId} ${env}`,
|
|
699
|
+
}${timeoutFlags}${cmdString}${gitCleanFlag} ${deployId} ${env}`,
|
|
615
700
|
);
|
|
616
701
|
|
|
617
702
|
if (isDeployRunnerContext(path, options)) {
|
|
703
|
+
// Backup app/services repositories with repo-backup configured
|
|
704
|
+
shellExec(
|
|
705
|
+
`${baseCommand} db ${deployId} ${clusterFlag}${baseClusterCommand} --repo-backup --primary-pod --git --force-clone --preserveUUID ${options.namespace ? ` --ns ${options.namespace}` : ''}`,
|
|
706
|
+
);
|
|
618
707
|
shellExec(
|
|
619
|
-
`${baseCommand} deploy
|
|
708
|
+
`${baseCommand} deploy${clusterFlag}${cmdString} --replicas ${replicas} --disable-update-proxy ${deployId} ${env} --versions ${versions}${
|
|
620
709
|
options.namespace ? ` --namespace ${options.namespace}` : ''
|
|
621
|
-
}${timeoutFlags}`,
|
|
710
|
+
}${timeoutFlags}${gitCleanFlag}`,
|
|
622
711
|
);
|
|
623
712
|
if (!targetTraffic)
|
|
624
713
|
targetTraffic = Underpost.deploy.getCurrentTraffic(deployId, { namespace: options.namespace });
|
|
@@ -830,6 +919,7 @@ echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com
|
|
|
830
919
|
const confInstances = JSON.parse(
|
|
831
920
|
fs.readFileSync(`./engine-private/conf/${deployId}/conf.instances.json`, 'utf8'),
|
|
832
921
|
);
|
|
922
|
+
let promotedTraffic = '';
|
|
833
923
|
for (const instance of confInstances) {
|
|
834
924
|
let {
|
|
835
925
|
id: _id,
|
|
@@ -849,6 +939,7 @@ echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com
|
|
|
849
939
|
namespace: options.namespace,
|
|
850
940
|
});
|
|
851
941
|
const targetTraffic = currentTraffic ? (currentTraffic === 'blue' ? 'green' : 'blue') : 'blue';
|
|
942
|
+
promotedTraffic = targetTraffic;
|
|
852
943
|
let proxyYaml =
|
|
853
944
|
Underpost.deploy.baseProxyYamlFactory({ host: _host, env: options.tls ? 'production' : env, options }) +
|
|
854
945
|
Underpost.deploy.deploymentYamlServiceFactory({
|
|
@@ -874,6 +965,18 @@ EOF
|
|
|
874
965
|
{ disableLog: true },
|
|
875
966
|
);
|
|
876
967
|
}
|
|
968
|
+
// Refresh the gRPC service to ensure it points to the parent deploy's current traffic.
|
|
969
|
+
if (promotedTraffic) {
|
|
970
|
+
const parentTraffic = Underpost.deploy.getCurrentTraffic(deployId, { namespace: options.namespace }) || 'blue';
|
|
971
|
+
const grpcServicePath = Underpost.deploy.buildGrpcServiceManifest({
|
|
972
|
+
deployId,
|
|
973
|
+
env,
|
|
974
|
+
confServer: loadConfServerJson(`./engine-private/conf/${deployId}/conf.server.json`),
|
|
975
|
+
namespace: options.namespace,
|
|
976
|
+
traffic: [parentTraffic],
|
|
977
|
+
});
|
|
978
|
+
if (grpcServicePath) shellExec(`kubectl apply -f ${grpcServicePath} -n ${options.namespace}`);
|
|
979
|
+
}
|
|
877
980
|
},
|
|
878
981
|
|
|
879
982
|
/**
|
|
@@ -913,12 +1016,12 @@ EOF
|
|
|
913
1016
|
// `localhost/rockylinux9-underpost:${Underpost.version}`
|
|
914
1017
|
if (!_image) _image = `underpost/underpost-engine:${Underpost.version}`;
|
|
915
1018
|
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
}
|
|
1019
|
+
Underpost.image.pullDockerHubImage({
|
|
1020
|
+
dockerhubImage: _image,
|
|
1021
|
+
kind: options.kind || (!options.nodeName && !options.kubeadm && !options.k3s),
|
|
1022
|
+
kubeadm: options.nodeName || options.kubeadm,
|
|
1023
|
+
k3s: options.k3s,
|
|
1024
|
+
});
|
|
922
1025
|
|
|
923
1026
|
const currentTraffic = Underpost.deploy.getCurrentTraffic(_deployId, {
|
|
924
1027
|
hostTest: _host,
|
|
@@ -927,7 +1030,7 @@ EOF
|
|
|
927
1030
|
|
|
928
1031
|
const targetTraffic = currentTraffic ? (currentTraffic === 'blue' ? 'green' : 'blue') : 'blue';
|
|
929
1032
|
const podId = `${_deployId}-${env}-${targetTraffic}`;
|
|
930
|
-
const ignorePods = Underpost.
|
|
1033
|
+
const ignorePods = Underpost.kubectl.get(podId, 'pods', options.namespace).map((p) => p.NAME);
|
|
931
1034
|
Underpost.deploy.configMap(env, options.namespace);
|
|
932
1035
|
shellExec(`kubectl delete service ${podId}-service --namespace ${options.namespace} --ignore-not-found`);
|
|
933
1036
|
shellExec(`kubectl delete deployment ${podId} --namespace ${options.namespace} --ignore-not-found`);
|
|
@@ -939,7 +1042,30 @@ EOF
|
|
|
939
1042
|
env,
|
|
940
1043
|
version: targetTraffic,
|
|
941
1044
|
nodeName: options.nodeName,
|
|
1045
|
+
clusterContext: options.k3s ? 'k3s' : options.kubeadm ? 'kubeadm' : 'kind',
|
|
1046
|
+
gitClean: options.gitClean || false,
|
|
942
1047
|
});
|
|
1048
|
+
// Regenerate the parent deploy's gRPC ClusterIP service pointing to the
|
|
1049
|
+
// parent's current traffic colour and apply it before the instance pod starts so
|
|
1050
|
+
// DNS is resolvable the moment the pod boots.
|
|
1051
|
+
const parentTraffic = Underpost.deploy.getCurrentTraffic(deployId, { namespace: options.namespace }) || 'blue';
|
|
1052
|
+
const grpcServicePath = Underpost.deploy.buildGrpcServiceManifest({
|
|
1053
|
+
deployId,
|
|
1054
|
+
env,
|
|
1055
|
+
confServer: loadConfServerJson(`./engine-private/conf/${deployId}/conf.server.json`),
|
|
1056
|
+
namespace: options.namespace,
|
|
1057
|
+
traffic: [targetTraffic],
|
|
1058
|
+
host: _host,
|
|
1059
|
+
});
|
|
1060
|
+
if (grpcServicePath) shellExec(`kubectl apply -f ${grpcServicePath} -n ${options.namespace}`);
|
|
1061
|
+
|
|
1062
|
+
const resolvedCmd = _cmd[env].map((c) =>
|
|
1063
|
+
c.replaceAll(
|
|
1064
|
+
'{{grpc-service-dns}}',
|
|
1065
|
+
`${deployId}-grpc-service-${env}-${parentTraffic}.${options.namespace || 'default'}.svc.cluster.local:50051`,
|
|
1066
|
+
),
|
|
1067
|
+
);
|
|
1068
|
+
|
|
943
1069
|
let deploymentYaml = `---
|
|
944
1070
|
${Underpost.deploy
|
|
945
1071
|
.deploymentYamlPartsFactory({
|
|
@@ -951,7 +1077,7 @@ ${Underpost.deploy
|
|
|
951
1077
|
image: _image,
|
|
952
1078
|
namespace: options.namespace,
|
|
953
1079
|
volumes: _volumes,
|
|
954
|
-
cmd:
|
|
1080
|
+
cmd: resolvedCmd,
|
|
955
1081
|
})
|
|
956
1082
|
.replace('{{ports}}', buildKindPorts(_fromPort, _toPort))}
|
|
957
1083
|
`;
|
|
@@ -997,7 +1123,7 @@ EOF
|
|
|
997
1123
|
* @memberof UnderpostRun
|
|
998
1124
|
*/
|
|
999
1125
|
'ls-deployments': async (path, options = DEFAULT_OPTION) => {
|
|
1000
|
-
console.table(await Underpost.
|
|
1126
|
+
console.table(await Underpost.kubectl.get(path, 'deployments', options.namespace));
|
|
1001
1127
|
},
|
|
1002
1128
|
|
|
1003
1129
|
/**
|
|
@@ -1091,15 +1217,13 @@ EOF
|
|
|
1091
1217
|
'db-client': async (path, options = DEFAULT_OPTION) => {
|
|
1092
1218
|
const { underpostRoot } = options;
|
|
1093
1219
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
}
|
|
1101
|
-
// For kubeadm/k3s, ensure it's available for containerd
|
|
1102
|
-
shellExec(`sudo crictl pull ${image}`);
|
|
1220
|
+
Underpost.image.pullDockerHubImage({
|
|
1221
|
+
dockerhubImage: 'adminer',
|
|
1222
|
+
version: '4.7.6-standalone',
|
|
1223
|
+
kind: options.kind,
|
|
1224
|
+
kubeadm: options.kubeadm,
|
|
1225
|
+
k3s: options.k3s,
|
|
1226
|
+
});
|
|
1103
1227
|
|
|
1104
1228
|
shellExec(`kubectl delete deployment adminer -n ${options.namespace} --ignore-not-found`);
|
|
1105
1229
|
shellExec(`kubectl apply -k ${underpostRoot}/manifests/deployment/adminer/. -n ${options.namespace}`);
|
|
@@ -1662,7 +1786,7 @@ EOF
|
|
|
1662
1786
|
: [
|
|
1663
1787
|
`npm install -g npm@11.2.0`,
|
|
1664
1788
|
`npm install -g underpost`,
|
|
1665
|
-
`${baseCommand} secret underpost --create-from-
|
|
1789
|
+
`${baseCommand} secret underpost --create-from-env`,
|
|
1666
1790
|
`${baseCommand} start --build --run ${deployId} ${env}`,
|
|
1667
1791
|
];
|
|
1668
1792
|
shellExec(`node bin run sync${baseClusterCommand} --deploy-id-cron-jobs none dd-test --cmd "${cmd}"`);
|
|
@@ -1693,7 +1817,7 @@ EOF
|
|
|
1693
1817
|
|
|
1694
1818
|
const { close } = await (async () => {
|
|
1695
1819
|
const checkAwaitPath = '/await';
|
|
1696
|
-
while (!Underpost.
|
|
1820
|
+
while (!Underpost.kubectl.existsFile({ podName, path: checkAwaitPath })) {
|
|
1697
1821
|
logger.info('monitor', checkAwaitPath);
|
|
1698
1822
|
await timer(1000);
|
|
1699
1823
|
}
|
|
@@ -1720,7 +1844,7 @@ EOF
|
|
|
1720
1844
|
logger.info('monitor', checkPath);
|
|
1721
1845
|
{
|
|
1722
1846
|
const checkAwaitPath = `/home/dd/docs${checkPath}`;
|
|
1723
|
-
while (!Underpost.
|
|
1847
|
+
while (!Underpost.kubectl.existsFile({ podName, path: checkAwaitPath })) {
|
|
1724
1848
|
logger.info('waiting for', checkAwaitPath);
|
|
1725
1849
|
await timer(1000);
|
|
1726
1850
|
}
|
|
@@ -1786,7 +1910,8 @@ EOF
|
|
|
1786
1910
|
|
|
1787
1911
|
shellCd(dir);
|
|
1788
1912
|
|
|
1789
|
-
|
|
1913
|
+
Underpost.repo.initLocalRepo({ path: dir });
|
|
1914
|
+
shellExec(`git add . && git commit -m "Base implementation"`);
|
|
1790
1915
|
shellExec(`chmod +x ./replace_params.sh`);
|
|
1791
1916
|
shellExec(`chmod +x ./build.sh`);
|
|
1792
1917
|
|
|
@@ -1831,11 +1956,46 @@ EOF
|
|
|
1831
1956
|
* @param {Object} options - The default underpost runner options for customizing workflow
|
|
1832
1957
|
* @memberof UnderpostRun
|
|
1833
1958
|
*/
|
|
1959
|
+
/**
|
|
1960
|
+
* @method generate-pass
|
|
1961
|
+
* @description Generates a cryptographically secure random password that satisfies all validatePassword
|
|
1962
|
+
* constraints (lowercase, uppercase, digit, special char, min 8 chars). Logs the plain password
|
|
1963
|
+
* to the console or, when `--copy` is set, copies it to the clipboard via pbcopy.
|
|
1964
|
+
* @param {string} path - Optional password length (default: 16).
|
|
1965
|
+
* @param {Object} options - The default underpost runner options for customizing workflow.
|
|
1966
|
+
* @param {boolean} options.copy - When true, copies to clipboard instead of logging.
|
|
1967
|
+
* @memberof UnderpostRun
|
|
1968
|
+
*/
|
|
1969
|
+
'generate-pass': (path, options = DEFAULT_OPTION) => {
|
|
1970
|
+
const length = path && parseInt(path) > 0 ? parseInt(path) : 16;
|
|
1971
|
+
const lower = 'abcdefghijklmnopqrstuvwxyz';
|
|
1972
|
+
const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
1973
|
+
const digits = '0123456789';
|
|
1974
|
+
const special = '@#$%^&*()_+';
|
|
1975
|
+
const all = lower + upper + digits + special;
|
|
1976
|
+
const buf = crypto.randomBytes(length + 4);
|
|
1977
|
+
// Guarantee at least one character from each required class
|
|
1978
|
+
const chars = [
|
|
1979
|
+
lower[buf[0] % lower.length],
|
|
1980
|
+
upper[buf[1] % upper.length],
|
|
1981
|
+
digits[buf[2] % digits.length],
|
|
1982
|
+
special[buf[3] % special.length],
|
|
1983
|
+
];
|
|
1984
|
+
for (let i = 4; i < length; i++) chars.push(all[buf[i] % all.length]);
|
|
1985
|
+
// Fisher-Yates shuffle using an independent random buffer
|
|
1986
|
+
const shuf = crypto.randomBytes(length);
|
|
1987
|
+
for (let i = chars.length - 1; i > 0; i--) {
|
|
1988
|
+
const j = shuf[i % shuf.length] % (i + 1);
|
|
1989
|
+
[chars[i], chars[j]] = [chars[j], chars[i]];
|
|
1990
|
+
}
|
|
1991
|
+
const password = chars.join('');
|
|
1992
|
+
if (options.copy) pbcopy(password);
|
|
1993
|
+
else console.log(password);
|
|
1994
|
+
},
|
|
1995
|
+
|
|
1834
1996
|
secret: (path, options = DEFAULT_OPTION) => {
|
|
1835
1997
|
const secretPath = path ? path : `/home/dd/engine/engine-private/conf/dd-cron/.env.production`;
|
|
1836
|
-
const command =
|
|
1837
|
-
? `node bin secret underpost --create-from-file ${secretPath}`
|
|
1838
|
-
: `underpost secret underpost --create-from-file ${secretPath}`;
|
|
1998
|
+
const command = `node bin secret underpost --create-from-file ${secretPath}`;
|
|
1839
1999
|
shellExec(command);
|
|
1840
2000
|
},
|
|
1841
2001
|
/**
|
package/src/cli/secrets.js
CHANGED
|
@@ -8,6 +8,10 @@ import { shellExec } from '../server/process.js';
|
|
|
8
8
|
import fs from 'fs-extra';
|
|
9
9
|
import dotenv from 'dotenv';
|
|
10
10
|
import Underpost from '../index.js';
|
|
11
|
+
import { loadConf } from '../server/conf.js';
|
|
12
|
+
import { loggerFactory } from '../server/logger.js';
|
|
13
|
+
|
|
14
|
+
const logger = loggerFactory(import.meta);
|
|
11
15
|
|
|
12
16
|
/**
|
|
13
17
|
* @class UnderpostSecret
|
|
@@ -23,11 +27,80 @@ class UnderpostSecret {
|
|
|
23
27
|
*/
|
|
24
28
|
underpost: {
|
|
25
29
|
createFromEnvFile(envPath) {
|
|
30
|
+
Underpost.env.clean();
|
|
26
31
|
const envObj = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
|
|
27
32
|
for (const key of Object.keys(envObj)) {
|
|
28
33
|
Underpost.env.set(key, envObj[key]);
|
|
29
34
|
}
|
|
30
35
|
},
|
|
36
|
+
/** Reads application secrets from process.env (injected via envFrom: secretRef)
|
|
37
|
+
* and writes them to the underpost .env file, filtering out known system and
|
|
38
|
+
* Kubernetes-injected environment variables. Replaces the fragile shell-based
|
|
39
|
+
* `printenv | grep -vE` pattern with a maintainable Node.js blocklist.
|
|
40
|
+
*/
|
|
41
|
+
createFromContainerEnv() {
|
|
42
|
+
Underpost.env.clean();
|
|
43
|
+
const systemKeys = new Set([
|
|
44
|
+
'HOME',
|
|
45
|
+
'HOSTNAME',
|
|
46
|
+
'PATH',
|
|
47
|
+
'TERM',
|
|
48
|
+
'SHLVL',
|
|
49
|
+
'PWD',
|
|
50
|
+
'_',
|
|
51
|
+
'LANG',
|
|
52
|
+
'LANGUAGE',
|
|
53
|
+
'LC_ALL',
|
|
54
|
+
'container',
|
|
55
|
+
'SHELL',
|
|
56
|
+
'USER',
|
|
57
|
+
'LOGNAME',
|
|
58
|
+
'MAIL',
|
|
59
|
+
'OLDPWD',
|
|
60
|
+
'LESSOPEN',
|
|
61
|
+
'LESSCLOSE',
|
|
62
|
+
'LS_COLORS',
|
|
63
|
+
'DISPLAY',
|
|
64
|
+
'COLORTERM',
|
|
65
|
+
'EDITOR',
|
|
66
|
+
'VISUAL',
|
|
67
|
+
'TERM_PROGRAM',
|
|
68
|
+
'TERM_PROGRAM_VERSION',
|
|
69
|
+
'SSH_AUTH_SOCK',
|
|
70
|
+
'SSH_CLIENT',
|
|
71
|
+
'SSH_CONNECTION',
|
|
72
|
+
'SSH_TTY',
|
|
73
|
+
'XDG_SESSION_ID',
|
|
74
|
+
'XDG_RUNTIME_DIR',
|
|
75
|
+
'XDG_DATA_DIRS',
|
|
76
|
+
'XDG_CONFIG_DIRS',
|
|
77
|
+
'DBUS_SESSION_BUS_ADDRESS',
|
|
78
|
+
'GPG_AGENT_INFO',
|
|
79
|
+
'WINDOWID',
|
|
80
|
+
'DESKTOP_SESSION',
|
|
81
|
+
'SESSION_MANAGER',
|
|
82
|
+
'XAUTHORITY',
|
|
83
|
+
'WAYLAND_DISPLAY',
|
|
84
|
+
'which_declare',
|
|
85
|
+
]);
|
|
86
|
+
const systemKeyPrefixes = ['KUBERNETES_', 'npm_', 'NODE_'];
|
|
87
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
88
|
+
if (systemKeys.has(key)) continue;
|
|
89
|
+
if (systemKeyPrefixes.some((prefix) => key.startsWith(prefix))) continue;
|
|
90
|
+
Underpost.env.set(key, value);
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Removes all filesystem traces of secrets after deployment startup.
|
|
97
|
+
* Centralizes the defense-in-depth cleanup performed
|
|
98
|
+
* @memberof UnderpostSecret
|
|
99
|
+
*/
|
|
100
|
+
globalSecretClean() {
|
|
101
|
+
loadConf('clean');
|
|
102
|
+
Underpost.repo.cleanupPrivateEngineRepo();
|
|
103
|
+
Underpost.env.clean();
|
|
31
104
|
},
|
|
32
105
|
};
|
|
33
106
|
}
|
package/src/cli/test.js
CHANGED
|
@@ -81,7 +81,7 @@ class UnderpostTest {
|
|
|
81
81
|
return await Underpost.test.statusMonitor(options.podName, options.podStatus, options.kindType);
|
|
82
82
|
|
|
83
83
|
if (options.sh === true || options.logs === true) {
|
|
84
|
-
const [pod] = Underpost.
|
|
84
|
+
const [pod] = Underpost.kubectl.get(deployList);
|
|
85
85
|
if (pod) {
|
|
86
86
|
if (options.sh) return pbcopy(`sudo kubectl exec -it ${pod.NAME} -- sh`);
|
|
87
87
|
if (options.logs) return shellExec(`sudo kubectl logs -f ${pod.NAME}`);
|
|
@@ -115,7 +115,7 @@ class UnderpostTest {
|
|
|
115
115
|
break;
|
|
116
116
|
}
|
|
117
117
|
else {
|
|
118
|
-
const pods = Underpost.
|
|
118
|
+
const pods = Underpost.kubectl.get(deployId);
|
|
119
119
|
if (pods.length > 0)
|
|
120
120
|
for (const deployData of pods) {
|
|
121
121
|
const { NAME } = deployData;
|
|
@@ -145,7 +145,7 @@ class UnderpostTest {
|
|
|
145
145
|
logger.info(`Loading instance`, { podName, status, kindType, deltaMs, maxAttempts });
|
|
146
146
|
const _monitor = async () => {
|
|
147
147
|
await timer(deltaMs);
|
|
148
|
-
const pods = Underpost.
|
|
148
|
+
const pods = Underpost.kubectl.get(podName, kindType);
|
|
149
149
|
let result = pods.find((p) => p.STATUS === status || (status === 'Running' && p.STATUS === 'Completed'));
|
|
150
150
|
logger.info(
|
|
151
151
|
`Testing pod ${podName}... ${result ? 1 : 0}/1 - elapsed time ${deltaMs * (index + 1)}s - attempt ${
|
|
@@ -10,10 +10,9 @@ import { MenuCryptokoyn } from './components/cryptokoyn/MenuCryptokoyn.js';
|
|
|
10
10
|
import { RouterCryptokoyn } from './components/cryptokoyn/RoutesCryptokoyn.js';
|
|
11
11
|
import { Worker } from './components/core/Worker.js';
|
|
12
12
|
import { Keyboard } from './components/core/Keyboard.js';
|
|
13
|
-
import { CryptokoynParams } from './components/cryptokoyn/CommonCryptokoyn.js';
|
|
14
13
|
import { SocketIo } from './components/core/SocketIo.js';
|
|
15
14
|
import { SocketIoCryptokoyn } from './components/cryptokoyn/SocketIoCryptokoyn.js';
|
|
16
|
-
import {
|
|
15
|
+
import { AppStoreCryptokoyn } from './components/cryptokoyn/AppStoreCryptokoyn.js';
|
|
17
16
|
import { CssCryptokoynDark, CssCryptokoynLight } from './components/cryptokoyn/CssCryptokoyn.js';
|
|
18
17
|
|
|
19
18
|
window.onload = () =>
|
|
@@ -24,11 +23,11 @@ window.onload = () =>
|
|
|
24
23
|
await TranslateCore.Init();
|
|
25
24
|
await Responsive.Init();
|
|
26
25
|
await MenuCryptokoyn.Render();
|
|
27
|
-
await SocketIo.Init({ channels:
|
|
26
|
+
await SocketIo.Init({ channels: AppStoreCryptokoyn.Data });
|
|
28
27
|
await SocketIoCryptokoyn.Init();
|
|
29
28
|
await LogInCryptokoyn();
|
|
30
29
|
await LogOutCryptokoyn();
|
|
31
30
|
await SignUpCryptokoyn();
|
|
32
|
-
await Keyboard.Init(
|
|
31
|
+
await Keyboard.Init();
|
|
33
32
|
},
|
|
34
33
|
});
|
|
@@ -13,9 +13,8 @@ import { Worker } from './components/core/Worker.js';
|
|
|
13
13
|
import { CssCyberiaDark, CssCyberiaLight } from './components/cyberia-portal/CssCyberiaPortal.js';
|
|
14
14
|
import { SocketIoCyberiaPortal } from './components/cyberia-portal/SocketIoCyberiaPortal.js';
|
|
15
15
|
import { SocketIo } from './components/core/SocketIo.js';
|
|
16
|
-
import {
|
|
16
|
+
import { AppStoreCyberiaPortal } from './components/cyberia-portal/AppStoreCyberiaPortal.js';
|
|
17
17
|
import { Keyboard } from './components/core/Keyboard.js';
|
|
18
|
-
import { CyberiaPortalParams } from './components/cyberia-portal/CommonCyberiaPortal.js';
|
|
19
18
|
|
|
20
19
|
window.onload = () =>
|
|
21
20
|
Worker.instance({
|
|
@@ -26,11 +25,11 @@ window.onload = () =>
|
|
|
26
25
|
await TranslateCyberiaPortal.Init();
|
|
27
26
|
await Responsive.Init();
|
|
28
27
|
await MenuCyberiaPortal.Render();
|
|
29
|
-
await SocketIo.Init({ channels:
|
|
28
|
+
await SocketIo.Init({ channels: AppStoreCyberiaPortal.Data });
|
|
30
29
|
await SocketIoCyberiaPortal.Init();
|
|
31
30
|
await LogInCyberiaPortal();
|
|
32
31
|
await LogOutCyberiaPortal();
|
|
33
32
|
await SignUpCyberiaPortal();
|
|
34
|
-
await Keyboard.Init(
|
|
33
|
+
await Keyboard.Init();
|
|
35
34
|
},
|
|
36
35
|
});
|
|
@@ -11,10 +11,9 @@ import { RouterDefault } from './components/default/RoutesDefault.js';
|
|
|
11
11
|
import { TranslateDefault } from './components/default/TranslateDefault.js';
|
|
12
12
|
import { Worker } from './components/core/Worker.js';
|
|
13
13
|
import { Keyboard } from './components/core/Keyboard.js';
|
|
14
|
-
import { DefaultParams } from './components/default/CommonDefault.js';
|
|
15
14
|
import { SocketIo } from './components/core/SocketIo.js';
|
|
16
15
|
import { SocketIoDefault } from './components/default/SocketIoDefault.js';
|
|
17
|
-
import {
|
|
16
|
+
import { AppStoreDefault } from './components/default/AppStoreDefault.js';
|
|
18
17
|
import { CssDefaultDark, CssDefaultLight } from './components/default/CssDefault.js';
|
|
19
18
|
import { EventsUI } from './components/core/EventsUI.js';
|
|
20
19
|
import { Modal } from './components/core/Modal.js';
|
|
@@ -71,14 +70,14 @@ window.onload = () =>
|
|
|
71
70
|
await Responsive.Init();
|
|
72
71
|
await MenuDefault.Render({ htmlMainBody });
|
|
73
72
|
await SocketIo.Init({
|
|
74
|
-
channels:
|
|
73
|
+
channels: AppStoreDefault.Data,
|
|
75
74
|
path: `/`,
|
|
76
75
|
});
|
|
77
76
|
await SocketIoDefault.Init();
|
|
78
77
|
await LogInDefault();
|
|
79
78
|
await LogOutDefault();
|
|
80
79
|
await SignUpDefault();
|
|
81
|
-
await Keyboard.Init(
|
|
80
|
+
await Keyboard.Init();
|
|
82
81
|
await Modal.RenderSeoSanitizer();
|
|
83
82
|
},
|
|
84
83
|
});
|
|
@@ -11,10 +11,9 @@ import { RouterItemledger } from './components/itemledger/RoutesItemledger.js';
|
|
|
11
11
|
import { TranslateItemledger } from './components/itemledger/TranslateItemledger.js';
|
|
12
12
|
import { Worker } from './components/core/Worker.js';
|
|
13
13
|
import { Keyboard } from './components/core/Keyboard.js';
|
|
14
|
-
import { ItemledgerParams } from './components/itemledger/CommonItemledger.js';
|
|
15
14
|
import { SocketIo } from './components/core/SocketIo.js';
|
|
16
15
|
import { SocketIoItemledger } from './components/itemledger/SocketIoItemledger.js';
|
|
17
|
-
import {
|
|
16
|
+
import { AppStoreItemledger } from './components/itemledger/AppStoreItemledger.js';
|
|
18
17
|
import { CssItemledgerDark, CssItemledgerLight } from './components/itemledger/CssItemledger.js';
|
|
19
18
|
import { s } from './components/core/VanillaJs.js';
|
|
20
19
|
import { EventsUI } from './components/core/EventsUI.js';
|
|
@@ -32,11 +31,11 @@ window.onload = () =>
|
|
|
32
31
|
await TranslateItemledger.Init();
|
|
33
32
|
await Responsive.Init();
|
|
34
33
|
await MenuItemledger.Render({ htmlMainBody });
|
|
35
|
-
await SocketIo.Init({ channels:
|
|
34
|
+
await SocketIo.Init({ channels: AppStoreItemledger.Data });
|
|
36
35
|
await SocketIoItemledger.Init();
|
|
37
36
|
await LogInItemledger();
|
|
38
37
|
await LogOutItemledger();
|
|
39
38
|
await SignUpItemledger();
|
|
40
|
-
await Keyboard.Init(
|
|
39
|
+
await Keyboard.Init();
|
|
41
40
|
},
|
|
42
41
|
});
|
|
@@ -10,11 +10,10 @@ import { MenuUnderpost } from './components/underpost/MenuUnderpost.js';
|
|
|
10
10
|
import { RouterUnderpost } from './components/underpost/RoutesUnderpost.js';
|
|
11
11
|
import { TranslateUnderpost } from './components/underpost/TranslateUnderpost.js';
|
|
12
12
|
import { Worker } from './components/core/Worker.js';
|
|
13
|
-
import { UnderpostParams } from './components/underpost/CommonUnderpost.js';
|
|
14
13
|
import { Keyboard } from './components/core/Keyboard.js';
|
|
15
14
|
import { SocketIoUnderpost } from './components/underpost/SocketIoUnderpost.js';
|
|
16
15
|
import { SocketIo } from './components/core/SocketIo.js';
|
|
17
|
-
import {
|
|
16
|
+
import { AppStoreUnderpost } from './components/underpost/AppStoreUnderpost.js';
|
|
18
17
|
import { CssUnderpostDark, CssUnderpostLight } from './components/underpost/CssUnderpost.js';
|
|
19
18
|
|
|
20
19
|
window.onload = () =>
|
|
@@ -26,11 +25,11 @@ window.onload = () =>
|
|
|
26
25
|
await TranslateUnderpost.Init();
|
|
27
26
|
await Responsive.Init();
|
|
28
27
|
await MenuUnderpost.Render();
|
|
29
|
-
await SocketIo.Init({ channels:
|
|
28
|
+
await SocketIo.Init({ channels: AppStoreUnderpost.Data });
|
|
30
29
|
await SocketIoUnderpost.Init();
|
|
31
30
|
await LogInUnderpost();
|
|
32
31
|
await LogOutUnderpost();
|
|
33
32
|
await SignUpUnderpost();
|
|
34
|
-
await Keyboard.Init(
|
|
33
|
+
await Keyboard.Init();
|
|
35
34
|
},
|
|
36
35
|
});
|