cyberia 3.0.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.production → .env.example} +20 -4
- package/.github/workflows/engine-cyberia.cd.yml +43 -10
- package/.github/workflows/engine-cyberia.ci.yml +48 -26
- package/.github/workflows/ghpkg.ci.yml +5 -5
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +60 -14
- package/.github/workflows/publish.ci.yml +26 -7
- package/.github/workflows/publish.cyberia.ci.yml +5 -5
- package/.github/workflows/pwa-microservices-template-page.cd.yml +6 -7
- package/.github/workflows/pwa-microservices-template-test.ci.yml +4 -4
- package/.github/workflows/release.cd.yml +14 -8
- package/.vscode/extensions.json +9 -8
- package/.vscode/settings.json +3 -2
- package/CHANGELOG.md +643 -1
- package/CLI-HELP.md +132 -57
- package/Dockerfile +4 -2
- package/README.md +347 -22
- package/WHITE-PAPER.md +1540 -0
- package/bin/build.js +21 -12
- package/bin/cyberia.js +2640 -106
- package/bin/deploy.js +258 -372
- package/bin/file.js +5 -1
- package/bin/index.js +2640 -106
- package/bin/vs.js +3 -3
- package/conf.js +169 -105
- package/deployment.yaml +236 -20
- package/hardhat/.env.example +31 -0
- package/hardhat/README.md +531 -0
- package/hardhat/WHITE-PAPER.md +1540 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +4323 -0
- package/hardhat/package.json +36 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +592 -0
- 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 +68 -0
- package/jsdoc.json +65 -49
- 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 +562 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +297 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +132 -0
- 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/manifests/pv-pvc-dd.yaml +1 -1
- package/nodemon.json +1 -1
- package/package.json +60 -48
- package/proxy.yaml +118 -10
- package/pv-pvc.yaml +132 -0
- package/scripts/k3s-node-setup.sh +1 -1
- package/scripts/ports-ls.sh +2 -0
- package/scripts/rhel-grpc-setup.sh +56 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +47 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +17 -2
- 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/document/document.service.js +1 -1
- package/src/api/file/file.controller.js +3 -1
- package/src/api/file/file.ref.json +18 -0
- package/src/api/file/file.service.js +28 -5
- 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 +56 -104
- package/src/api/object-layer/README.md +347 -22
- package/src/api/object-layer/object-layer.controller.js +6 -2
- package/src/api/object-layer/object-layer.model.js +12 -8
- package/src/api/object-layer/object-layer.router.js +698 -42
- package/src/api/object-layer/object-layer.service.js +119 -37
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +1 -2
- package/src/api/user/user.router.js +10 -5
- package/src/api/user/user.service.js +15 -14
- package/src/cli/baremetal.js +6 -10
- package/src/cli/cloud-init.js +0 -3
- package/src/cli/cluster.js +7 -7
- package/src/cli/db.js +723 -857
- package/src/cli/deploy.js +215 -105
- package/src/cli/env.js +34 -5
- package/src/cli/fs.js +5 -4
- package/src/cli/image.js +0 -3
- package/src/cli/index.js +83 -15
- package/src/cli/kubectl.js +211 -0
- package/src/cli/monitor.js +5 -6
- package/src/cli/release.js +284 -0
- package/src/cli/repository.js +708 -62
- package/src/cli/run.js +371 -151
- package/src/cli/secrets.js +73 -2
- package/src/cli/ssh.js +1 -1
- 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 +4 -963
- package/src/client/Underpost.index.js +3 -4
- package/src/client/components/core/AgGrid.js +20 -5
- package/src/client/components/core/Alert.js +2 -2
- package/src/client/components/core/AppStore.js +69 -0
- package/src/client/components/core/CalendarCore.js +2 -2
- package/src/client/components/core/Content.js +22 -3
- package/src/client/components/core/Docs.js +30 -6
- package/src/client/components/core/DropDown.js +137 -17
- package/src/client/components/core/FileExplorer.js +71 -4
- package/src/client/components/core/Input.js +1 -1
- 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 +20 -7
- package/src/client/components/core/Panel.js +0 -1
- package/src/client/components/core/PanelForm.js +19 -19
- package/src/client/components/core/RichText.js +1 -2
- 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 +217 -30
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +44 -2
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +3 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +2 -2
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +104 -9
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +5 -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/CssUnderpost.js +59 -0
- package/src/client/components/underpost/LogInUnderpost.js +6 -3
- package/src/client/components/underpost/LogOutUnderpost.js +4 -2
- package/src/client/components/underpost/MenuUnderpost.js +104 -18
- package/src/client/components/underpost/RoutesUnderpost.js +2 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +3 -51
- package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +3 -3
- package/src/client/public/default/sitemap +3 -3
- package/src/client/public/itemledger/browserconfig.xml +2 -2
- package/src/client/public/itemledger/manifest.webmanifest +4 -4
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/sitemap +3 -3
- package/src/client/public/itemledger/yandex-browser-manifest.json +2 -2
- package/src/client/public/test/sitemap +3 -3
- 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/body/404.js +15 -11
- package/src/client/ssr/body/500.js +15 -11
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/head/PwaItemledger.js +60 -0
- package/src/client/ssr/offline/NoNetworkConnection.js +11 -10
- package/src/client/ssr/pages/CyberiaServerMetrics.js +1 -1
- package/src/client/ssr/pages/Test.js +11 -10
- package/src/client.build.js +0 -3
- package/src/client.dev.js +0 -3
- package/src/db/DataBaseProvider.js +17 -2
- package/src/db/mariadb/MariaDB.js +14 -9
- package/src/db/mongo/MongooseDB.js +17 -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/proxy.js +0 -3
- package/src/runtime/express/Dockerfile +4 -0
- package/src/runtime/express/Express.js +33 -10
- package/src/runtime/lampp/Dockerfile +13 -2
- package/src/runtime/lampp/Lampp.js +33 -17
- package/src/runtime/wp/Dockerfile +68 -0
- package/src/runtime/wp/Wp.js +639 -0
- package/src/server/auth.js +36 -15
- package/src/server/backup.js +39 -12
- package/src/server/besu-genesis-generator.js +1630 -0
- package/src/server/client-build-docs.js +133 -17
- package/src/server/client-build-live.js +9 -18
- package/src/server/client-build.js +229 -101
- package/src/server/client-dev-server.js +14 -13
- package/src/server/client-formatted.js +109 -57
- package/src/server/conf.js +391 -164
- package/src/server/cron.js +27 -24
- package/src/server/dns.js +29 -12
- package/src/server/downloader.js +0 -2
- package/src/server/ipfs-client.js +24 -1
- package/src/server/logger.js +27 -9
- package/src/server/object-layer.js +217 -103
- package/src/server/peer.js +8 -2
- package/src/server/process.js +1 -50
- package/src/server/proxy.js +4 -8
- package/src/server/runtime.js +30 -9
- 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/ssr.js +0 -3
- package/src/server/start.js +19 -12
- package/src/server/tls.js +0 -2
- package/src/server.js +0 -4
- 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/.env.development +0 -43
- package/.env.test +0 -43
- package/hardhat/contracts/CryptoKoyn.sol +0 -59
- package/hardhat/contracts/ItemLedger.sol +0 -73
- package/hardhat/contracts/Lock.sol +0 -34
- package/hardhat/hardhat.config.cjs +0 -45
- package/hardhat/ignition/modules/Lock.js +0 -18
- package/hardhat/networks/cryptokoyn-itemledger.network.json +0 -29
- package/hardhat/scripts/deployCryptokoyn.cjs +0 -25
- package/hardhat/scripts/deployItemledger.cjs +0 -25
- package/hardhat/test/Lock.js +0 -126
- package/hardhat/white-paper.md +0 -581
- 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/white-paper.md +0 -581
package/src/server/cron.js
CHANGED
|
@@ -8,7 +8,7 @@ import { loggerFactory } from './logger.js';
|
|
|
8
8
|
import { shellExec } from './process.js';
|
|
9
9
|
import fs from 'fs-extra';
|
|
10
10
|
import Underpost from '../index.js';
|
|
11
|
-
import { getUnderpostRootPath } from './conf.js';
|
|
11
|
+
import { getUnderpostRootPath, loadCronDeployEnv } from './conf.js';
|
|
12
12
|
|
|
13
13
|
const logger = loggerFactory(import.meta);
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ const volumeHostPath = '/home/dd';
|
|
|
16
16
|
const enginePath = '/home/dd/engine';
|
|
17
17
|
const cronVolumeName = 'underpost-cron-container-volume';
|
|
18
18
|
const shareEnvVolumeName = 'underpost-share-env';
|
|
19
|
-
const
|
|
19
|
+
const underpostContainerEnvDir = '/usr/lib/node_modules/underpost';
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
22
|
* Generates a Kubernetes CronJob YAML manifest string.
|
|
@@ -33,7 +33,9 @@ const underpostContainerEnvPath = '/usr/lib/node_modules/underpost/.env';
|
|
|
33
33
|
* @param {string} [params.cmd] - Optional pre-script commands to run before cron execution
|
|
34
34
|
* @param {boolean} [params.suspend=false] - Whether the CronJob is suspended
|
|
35
35
|
* @param {boolean} [params.dryRun=false] - Pass --dry-run flag to the cron command inside the container
|
|
36
|
-
* @param {boolean} [params.
|
|
36
|
+
* @param {boolean} [params.k3s=false] - Pass --k3s flag to the cron command inside the container
|
|
37
|
+
* @param {boolean} [params.kind=false] - Pass --kind flag to the cron command inside the container
|
|
38
|
+
* @param {boolean} [params.kubeadm=false] - Pass --kubeadm flag to the cron command inside the container
|
|
37
39
|
* @returns {string} Kubernetes CronJob YAML manifest
|
|
38
40
|
* @memberof UnderpostCron
|
|
39
41
|
*/
|
|
@@ -49,7 +51,9 @@ const cronJobYamlFactory = ({
|
|
|
49
51
|
cmd,
|
|
50
52
|
suspend = false,
|
|
51
53
|
dryRun = false,
|
|
52
|
-
|
|
54
|
+
k3s = false,
|
|
55
|
+
kind = false,
|
|
56
|
+
kubeadm = false,
|
|
53
57
|
}) => {
|
|
54
58
|
const containerImage = image || `underpost/underpost-engine:${Underpost.version}`;
|
|
55
59
|
|
|
@@ -60,10 +64,12 @@ const cronJobYamlFactory = ({
|
|
|
60
64
|
.replace(/^-|-$/g, '')
|
|
61
65
|
.substring(0, 52);
|
|
62
66
|
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
+
const cronBin = 'node bin'; // dev ? 'node bin' : 'underpost';
|
|
68
|
+
const flags = `${git ? '--git ' : ''}${dev ? '--dev ' : ''}${dryRun ? '--dry-run ' : ''}${k3s ? '--k3s ' : ''}${kind ? '--kind ' : ''}${kubeadm ? '--kubeadm ' : ''}`;
|
|
69
|
+
const commands = [`cd ${enginePath}`]; // `node bin run secret`
|
|
70
|
+
if (cmd) commands.push(cmd);
|
|
71
|
+
commands.push(`${cronBin} cron ${deployList} ${jobList} ${flags}`);
|
|
72
|
+
const fullCommand = commands.join(' &&\n ');
|
|
67
73
|
|
|
68
74
|
return `apiVersion: batch/v1
|
|
69
75
|
kind: CronJob
|
|
@@ -95,13 +101,12 @@ spec:
|
|
|
95
101
|
- /bin/sh
|
|
96
102
|
- -c
|
|
97
103
|
- >
|
|
98
|
-
${
|
|
104
|
+
${fullCommand}
|
|
99
105
|
volumeMounts:
|
|
100
106
|
- mountPath: ${enginePath}
|
|
101
107
|
name: ${cronVolumeName}
|
|
102
|
-
- mountPath: ${
|
|
108
|
+
- mountPath: ${underpostContainerEnvDir}
|
|
103
109
|
name: ${shareEnvVolumeName}
|
|
104
|
-
subPath: .env
|
|
105
110
|
volumes:
|
|
106
111
|
- hostPath:
|
|
107
112
|
path: ${enginePath}
|
|
@@ -183,7 +188,6 @@ class UnderpostCron {
|
|
|
183
188
|
* @param {boolean} [options.kubeadm] - Use kubeadm cluster context (apply directly on host)
|
|
184
189
|
* @param {boolean} [options.dryRun] - Preview cron jobs without executing them
|
|
185
190
|
* @param {boolean} [options.createJobNow] - After applying, immediately create a Job from each CronJob (requires --apply)
|
|
186
|
-
* @param {boolean} [options.ssh] - Execute backup commands via SSH on the remote node
|
|
187
191
|
* @memberof UnderpostCron
|
|
188
192
|
*/
|
|
189
193
|
callback: async function (
|
|
@@ -191,6 +195,7 @@ class UnderpostCron {
|
|
|
191
195
|
jobList = Object.keys(Underpost.cron.JOB).join(','),
|
|
192
196
|
options = {},
|
|
193
197
|
) {
|
|
198
|
+
loadCronDeployEnv();
|
|
194
199
|
if (options.setupStart) return await Underpost.cron.setupDeployStart(options.setupStart, options);
|
|
195
200
|
|
|
196
201
|
if (options.generateK8sCronjobs) return await Underpost.cron.generateK8sCronJobs(options);
|
|
@@ -226,7 +231,6 @@ class UnderpostCron {
|
|
|
226
231
|
* @param {boolean} [options.k3s] - k3s cluster context (apply directly on host)
|
|
227
232
|
* @param {boolean} [options.kind] - kind cluster context (apply via kind-worker container)
|
|
228
233
|
* @param {boolean} [options.kubeadm] - kubeadm cluster context (apply directly on host)
|
|
229
|
-
* @param {boolean} [options.ssh] - Execute backup commands via SSH on the remote node
|
|
230
234
|
* @memberof UnderpostCron
|
|
231
235
|
*/
|
|
232
236
|
setupDeployStart: async function (deployId, options = {}) {
|
|
@@ -268,21 +272,19 @@ class UnderpostCron {
|
|
|
268
272
|
logger.warn(`package.json not found for deploy-id: ${deployId}`, { path: packageJsonPath });
|
|
269
273
|
}
|
|
270
274
|
|
|
271
|
-
// Generate and apply cron job manifests for this deploy-id
|
|
272
275
|
await Underpost.cron.generateK8sCronJobs({
|
|
273
276
|
deployId,
|
|
274
277
|
namespace: options.namespace,
|
|
275
278
|
image: options.image,
|
|
276
279
|
apply: options.apply,
|
|
277
280
|
createJobNow: options.createJobNow,
|
|
278
|
-
git:
|
|
279
|
-
dev:
|
|
280
|
-
kubeadm:
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
dryRun: false,
|
|
281
|
+
git: !!options.git,
|
|
282
|
+
dev: !!options.dev,
|
|
283
|
+
kubeadm: !!options.kubeadm,
|
|
284
|
+
cmd: options.cmd || `node bin env ${deployId} production`,
|
|
285
|
+
k3s: !!options.k3s,
|
|
286
|
+
kind: !!options.kind,
|
|
287
|
+
dryRun: !!options.dryRun,
|
|
286
288
|
});
|
|
287
289
|
},
|
|
288
290
|
|
|
@@ -304,7 +306,6 @@ class UnderpostCron {
|
|
|
304
306
|
* @param {boolean} [options.kubeadm=false] - kubeadm cluster context (apply directly on host)
|
|
305
307
|
* @param {boolean} [options.createJobNow=false] - After applying, create a Job from each CronJob immediately
|
|
306
308
|
* @param {boolean} [options.dryRun=false] - Pass --dry-run=client to kubectl commands
|
|
307
|
-
* @param {boolean} [options.ssh=false] - Execute backup commands via SSH on the remote node
|
|
308
309
|
* @memberof UnderpostCron
|
|
309
310
|
*/
|
|
310
311
|
generateK8sCronJobs: async function (options = {}) {
|
|
@@ -361,7 +362,9 @@ class UnderpostCron {
|
|
|
361
362
|
cmd: options.cmd,
|
|
362
363
|
suspend: false,
|
|
363
364
|
dryRun: !!options.dryRun,
|
|
364
|
-
|
|
365
|
+
k3s: !!options.k3s,
|
|
366
|
+
kind: !!options.kind,
|
|
367
|
+
kubeadm: !!options.kubeadm,
|
|
365
368
|
});
|
|
366
369
|
|
|
367
370
|
const yamlFilePath = `${outputDir}/${cronJobName}.yaml`;
|
package/src/server/dns.js
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* @namespace UnderpostDns
|
|
6
6
|
*/
|
|
7
7
|
import axios from 'axios';
|
|
8
|
-
import dotenv from 'dotenv';
|
|
9
8
|
import fs from 'fs';
|
|
10
9
|
import validator from 'validator';
|
|
11
10
|
import { loggerFactory } from './logger.js';
|
|
@@ -13,11 +12,9 @@ import dns from 'node:dns';
|
|
|
13
12
|
import os from 'node:os';
|
|
14
13
|
import { shellExec, pbcopy } from './process.js';
|
|
15
14
|
import Underpost from '../index.js';
|
|
16
|
-
import { writeEnv } from './conf.js';
|
|
15
|
+
import { writeEnv, readConfJson, loadCronDeployEnv } from './conf.js';
|
|
17
16
|
import { resolveDeployId } from './cron.js';
|
|
18
17
|
|
|
19
|
-
dotenv.config();
|
|
20
|
-
|
|
21
18
|
const logger = loggerFactory(import.meta);
|
|
22
19
|
|
|
23
20
|
/**
|
|
@@ -268,6 +265,8 @@ class Dns {
|
|
|
268
265
|
* @returns {Promise<void>}
|
|
269
266
|
*/
|
|
270
267
|
static async callback(deployList) {
|
|
268
|
+
// loadCronDeployEnv();
|
|
269
|
+
|
|
271
270
|
const isOnline = await Dns.isInternetConnection();
|
|
272
271
|
|
|
273
272
|
if (!isOnline) return;
|
|
@@ -288,16 +287,15 @@ class Dns {
|
|
|
288
287
|
|
|
289
288
|
for (const _deployId of deployList.split(',')) {
|
|
290
289
|
const deployId = _deployId.trim();
|
|
291
|
-
const privateCronConfPath = `./engine-private/conf/${deployId}/conf.cron.json`;
|
|
292
|
-
const confCronPath = fs.existsSync(privateCronConfPath) ? privateCronConfPath : './conf/conf.cron.json';
|
|
293
290
|
|
|
294
|
-
|
|
295
|
-
|
|
291
|
+
let confCronData;
|
|
292
|
+
try {
|
|
293
|
+
confCronData = readConfJson(deployId, 'cron', { resolve: true });
|
|
294
|
+
} catch (error) {
|
|
295
|
+
logger.warn(`Cron config file not found for deployId: ${deployId}`, { message: error.message });
|
|
296
296
|
continue;
|
|
297
297
|
}
|
|
298
298
|
|
|
299
|
-
const confCronData = JSON.parse(fs.readFileSync(confCronPath, 'utf8'));
|
|
300
|
-
|
|
301
299
|
if (!confCronData.records) {
|
|
302
300
|
logger.warn(`'records' field missing in cron config for deployId: ${deployId}`);
|
|
303
301
|
continue;
|
|
@@ -365,8 +363,26 @@ class Dns {
|
|
|
365
363
|
*/
|
|
366
364
|
dondominio: (options) => {
|
|
367
365
|
const { user, api_key, host, dns, ip } = options;
|
|
366
|
+
|
|
367
|
+
// Validate that required credentials are present before making any request
|
|
368
|
+
if (!user || !api_key) {
|
|
369
|
+
logger.error(
|
|
370
|
+
`${dns} update aborted: missing credentials. ` +
|
|
371
|
+
`Ensure DDNS_USER and DDNS_API_KEY environment variables are set ` +
|
|
372
|
+
`or provide 'user' and 'api_key' in cron records configuration.`,
|
|
373
|
+
{ host, hasUser: !!user, hasApiKey: !!api_key },
|
|
374
|
+
);
|
|
375
|
+
return Promise.resolve(false);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
if (!host) {
|
|
379
|
+
logger.error(`${dns} update aborted: missing host. Set DDNS_HOST or provide 'host' in cron records.`);
|
|
380
|
+
return Promise.resolve(false);
|
|
381
|
+
}
|
|
382
|
+
|
|
368
383
|
const url = `https://dondns.dondominio.com/json/?user=${user}&password=${api_key}&host=${host}&ip=${ip}`;
|
|
369
|
-
|
|
384
|
+
// Log the update attempt without exposing the full URL containing credentials
|
|
385
|
+
logger.info(`${dns} update ip request`, { host, ip });
|
|
370
386
|
|
|
371
387
|
// Prevent live IP update in non-production environments
|
|
372
388
|
if (process.env.NODE_ENV !== 'production') {
|
|
@@ -382,7 +398,8 @@ class Dns {
|
|
|
382
398
|
return resolve(true);
|
|
383
399
|
})
|
|
384
400
|
.catch((error) => {
|
|
385
|
-
|
|
401
|
+
// Only log the error message — the full error object contains the request URL with credentials
|
|
402
|
+
logger.error(`${dns} update ip error`, { message: error.message, host, ip });
|
|
386
403
|
return resolve(false);
|
|
387
404
|
});
|
|
388
405
|
});
|
package/src/server/downloader.js
CHANGED
|
@@ -244,7 +244,11 @@ const unpinCid = async (cid) => {
|
|
|
244
244
|
});
|
|
245
245
|
if (!clusterRes.ok) {
|
|
246
246
|
const text = await clusterRes.text();
|
|
247
|
-
|
|
247
|
+
if (clusterRes.status === 404) {
|
|
248
|
+
logger.info(`IPFS Cluster unpin – CID already not pinned: ${cid}`);
|
|
249
|
+
} else {
|
|
250
|
+
logger.warn(`IPFS Cluster unpin failed (${clusterRes.status}): ${text}`);
|
|
251
|
+
}
|
|
248
252
|
} else {
|
|
249
253
|
logger.info(`IPFS Cluster unpin OK – CID: ${cid}`);
|
|
250
254
|
}
|
|
@@ -428,6 +432,25 @@ const IpfsClient = {
|
|
|
428
432
|
listClusterPins,
|
|
429
433
|
listKuboPins,
|
|
430
434
|
removeMfsPath,
|
|
435
|
+
/**
|
|
436
|
+
* Check whether a single CID is currently pinned on the local Kubo node.
|
|
437
|
+
* Uses the pin/ls?arg=<cid> endpoint which returns only that one pin
|
|
438
|
+
* (much cheaper than fetching the full list).
|
|
439
|
+
*
|
|
440
|
+
* @param {string} cid - IPFS Content Identifier to check.
|
|
441
|
+
* @returns {Promise<boolean>} true when the CID is pinned.
|
|
442
|
+
*/
|
|
443
|
+
isCidPinned: async (cid) => {
|
|
444
|
+
const kuboUrl = getIpfsApiUrl();
|
|
445
|
+
try {
|
|
446
|
+
const res = await fetch(`${kuboUrl}/api/v0/pin/ls?arg=${encodeURIComponent(cid)}&type=all`, { method: 'POST' });
|
|
447
|
+
if (!res.ok) return false;
|
|
448
|
+
const json = await res.json();
|
|
449
|
+
return !!(json.Keys && json.Keys[cid]);
|
|
450
|
+
} catch {
|
|
451
|
+
return false;
|
|
452
|
+
}
|
|
453
|
+
},
|
|
431
454
|
};
|
|
432
455
|
|
|
433
456
|
export { IpfsClient };
|
package/src/server/logger.js
CHANGED
|
@@ -6,16 +6,14 @@
|
|
|
6
6
|
|
|
7
7
|
'use strict';
|
|
8
8
|
|
|
9
|
-
import dotenv from 'dotenv';
|
|
10
9
|
import winston from 'winston';
|
|
11
10
|
import morgan from 'morgan';
|
|
12
|
-
import colorize from 'json-colorizer';
|
|
11
|
+
import { colorize, color } from 'json-colorizer';
|
|
13
12
|
import colors from 'colors';
|
|
14
13
|
import v8 from 'v8';
|
|
15
14
|
import { clearTerminalStringColor, formatBytes } from '../client/components/core/CommonJs.js';
|
|
16
15
|
|
|
17
16
|
colors.enable();
|
|
18
|
-
dotenv.config();
|
|
19
17
|
|
|
20
18
|
// Define your severity levels.
|
|
21
19
|
// With them, You can create log files,
|
|
@@ -60,14 +58,34 @@ const format = (meta) =>
|
|
|
60
58
|
winston.format.colorize({ all: true }),
|
|
61
59
|
// Define the format of the message showing the timestamp, the level and the message
|
|
62
60
|
winston.format.printf((info) => {
|
|
63
|
-
const
|
|
61
|
+
const splatKey = Symbol.for('splat');
|
|
62
|
+
const splat = info[splatKey];
|
|
63
|
+
const hasSplat = Array.isArray(splat) && splat.length > 0 && splat[0] !== undefined;
|
|
64
|
+
let splatStr = '';
|
|
65
|
+
if (hasSplat) {
|
|
66
|
+
const seen = new WeakSet();
|
|
67
|
+
splatStr = JSON.stringify(
|
|
68
|
+
splat[0],
|
|
69
|
+
(key, value) => {
|
|
70
|
+
if (typeof value === 'function') return `[Function: ${value.name || 'anonymous'}]`;
|
|
71
|
+
if (typeof value === 'object' && value !== null) {
|
|
72
|
+
if (seen.has(value)) return '[Circular]';
|
|
73
|
+
seen.add(value);
|
|
74
|
+
}
|
|
75
|
+
return value;
|
|
76
|
+
},
|
|
77
|
+
4,
|
|
78
|
+
);
|
|
79
|
+
}
|
|
64
80
|
return `${`[${meta}]`.green} ${info.timestamp} ${info.level} ${
|
|
65
|
-
|
|
66
|
-
? `${clearTerminalStringColor(info.message)}: ${colorize(
|
|
81
|
+
hasSplat
|
|
82
|
+
? `${clearTerminalStringColor(info.message)}: ${colorize(splatStr, {
|
|
67
83
|
colors: {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
84
|
+
StringKey: color.green,
|
|
85
|
+
StringLiteral: color.magenta,
|
|
86
|
+
NumberLiteral: color.red,
|
|
87
|
+
BooleanLiteral: color.cyan,
|
|
88
|
+
NullLiteral: color.white,
|
|
71
89
|
},
|
|
72
90
|
})}`
|
|
73
91
|
: info.message
|