@underpostnet/cyberia 3.3.76 → 3.4.0

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.
Files changed (132) hide show
  1. package/.env.example +1 -0
  2. package/.github/workflows/coverall.cyberia.ci.yml +17 -3
  3. package/.github/workflows/cyberia-client.cd.yml +2 -1
  4. package/.github/workflows/cyberia-server.cd.yml +2 -1
  5. package/.github/workflows/docker-image.cyberia-client.ci.yml +1 -1
  6. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +1 -1
  7. package/.github/workflows/docker-image.cyberia-server.ci.yml +1 -1
  8. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +1 -1
  9. package/.github/workflows/docker-image.engine-cyberia.ci.yml +1 -1
  10. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +1 -1
  11. package/.github/workflows/engine-cyberia.ci.yml +7 -1
  12. package/.github/workflows/ghpkg.ci.yml +19 -2
  13. package/.github/workflows/gitlab.ci.yml +8 -6
  14. package/.github/workflows/hardhat.ci.yml +4 -1
  15. package/.github/workflows/npmpkg.ci.yml +9 -5
  16. package/.github/workflows/publish.ci.yml +21 -12
  17. package/.github/workflows/publish.cyberia.ci.yml +25 -14
  18. package/.github/workflows/pwa-microservices-template-page.cd.yml +4 -2
  19. package/CHANGELOG.md +110 -262
  20. package/CLI-HELP.md +29 -2
  21. package/Dockerfile +1 -1
  22. package/Dockerfile.dev +1 -1
  23. package/Dockerfile.test +1 -1
  24. package/README.md +1 -1
  25. package/bin/build.js +67 -14
  26. package/bin/cyberia.js +4 -4
  27. package/bin/index.js +4 -4
  28. package/compose.env +1 -0
  29. package/conf.js +1 -1043
  30. package/deploy/cyberia-client/deploy.sh +13 -11
  31. package/deploy/cyberia-server/deploy.sh +13 -11
  32. package/deploy/dd-cyberia/sync-deploy.sh +7 -28
  33. package/deploy/lib/config.sh +1 -1
  34. package/deploy/lib/github-actions-logging.sh +3 -2
  35. package/deploy/lib/host.sh +1 -1
  36. package/deploy/pwa-microservices-template/deploy.sh +7 -1
  37. package/deployment.yaml +1 -1
  38. package/docker-compose.yml +7 -7
  39. package/docs/coverage/cyberia/api/cyberia-instance/cyberia-fallback-capture.js.html +1591 -0
  40. package/docs/coverage/cyberia/api/cyberia-instance/index.html +116 -0
  41. package/docs/coverage/cyberia/api/cyberia-server-defaults/cyberia-server-defaults.js.html +4138 -0
  42. package/docs/coverage/cyberia/api/cyberia-server-defaults/index.html +116 -0
  43. package/docs/coverage/cyberia/api/object-layer/index.html +116 -0
  44. package/docs/coverage/cyberia/api/object-layer/object-layer.model.js.html +1393 -0
  45. package/docs/coverage/cyberia/base.css +362 -0
  46. package/docs/coverage/cyberia/block-navigation.js +82 -0
  47. package/docs/coverage/cyberia/favicon.png +0 -0
  48. package/docs/coverage/cyberia/index.html +161 -0
  49. package/docs/coverage/cyberia/prettify.css +101 -0
  50. package/docs/coverage/cyberia/prettify.js +937 -0
  51. package/docs/coverage/cyberia/projects/cyberia/atlas-sprite-sheet-generator.js.html +1315 -0
  52. package/docs/coverage/cyberia/projects/cyberia/index.html +176 -0
  53. package/docs/coverage/cyberia/projects/cyberia/instance-backup.js.html +715 -0
  54. package/docs/coverage/cyberia/projects/cyberia/instance-data.js.html +2182 -0
  55. package/docs/coverage/cyberia/projects/cyberia/shape-generator.js.html +3265 -0
  56. package/docs/coverage/cyberia/projects/cyberia/stat-balance.js.html +328 -0
  57. package/docs/coverage/cyberia/sort-arrow-sprite.png +0 -0
  58. package/docs/coverage/cyberia/sorter.js +205 -0
  59. package/hardhat/package-lock.json +6 -6
  60. package/hardhat/package.json +2 -2
  61. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  62. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +1 -1
  63. package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -1
  64. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  65. package/package.json +19 -17
  66. package/scripts/test-monitor.sh +1 -1
  67. package/src/api/file/file.router.js +7 -1
  68. package/src/cli/baremetal.js +1 -1
  69. package/src/cli/cluster.js +73 -18
  70. package/src/cli/deploy.js +211 -30
  71. package/src/cli/docker-compose.js +1 -1
  72. package/src/cli/index.js +36 -0
  73. package/src/cli/kubectl.js +4 -3
  74. package/src/cli/release.js +5 -1
  75. package/src/cli/repository.js +14 -11
  76. package/src/cli/run.js +10 -3
  77. package/src/cli/secrets.js +393 -200
  78. package/src/cli/socketsecurity.js +260 -0
  79. package/src/client/components/core/Badge.js +0 -1
  80. package/src/client/components/core/CssCore.js +11 -1
  81. package/src/client/components/core/Modal.js +189 -66
  82. package/src/client/components/core/SearchBox.js +0 -1
  83. package/src/client/components/core/ToolTip.js +15 -0
  84. package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +0 -2
  85. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +0 -4
  86. package/src/client/components/default/AppShellDefault.js +1 -4
  87. package/src/client/components/itemledger/AppShellItemledger.js +0 -2
  88. package/src/client/components/underpost/AppShellUnderpost.js +12 -0
  89. package/src/client/components/underpost/CssUnderpost.js +15 -2
  90. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +8 -0
  91. package/src/client/public/cyberia-docs/CYBERIA.md +1 -1
  92. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +54 -56
  93. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  94. package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +30 -29
  95. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  96. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +54 -25
  97. package/src/client/ssr/head/Css.js +12 -10
  98. package/src/client/ssr/views/Cyberia404.js +9 -13
  99. package/src/client/ssr/views/NotFound.js +75 -0
  100. package/src/client-builder/client-bundle.js +2 -2
  101. package/src/index.js +13 -1
  102. package/src/runtime/engine-cyberia/Dockerfile +1 -1
  103. package/src/runtime/engine-cyberia/Dockerfile.dev +1 -1
  104. package/src/runtime/engine-cyberia/Dockerfile.test +1 -1
  105. package/src/runtime/engine-cyberia/compose.env +1 -0
  106. package/src/runtime/engine-cyberia/docker-compose.yml +7 -7
  107. package/src/server/build/catalog.js +1 -0
  108. package/src/server/build/execution.js +19 -5
  109. package/src/server/build/package.js +166 -3
  110. package/src/server/build/testing.js +2 -1
  111. package/src/server/network/underpost-gateway.js +113 -14
  112. package/src/server/runtime/conf.js +57 -7
  113. package/src/server/runtime/config-scope.js +2 -0
  114. package/src/server/runtime/process.js +4 -3
  115. package/src/server/runtime/start.js +11 -2
  116. package/src/server/security/socketsecurity.js +1735 -0
  117. package/test/integration/infra/1-security/config-scope.test.js +3 -0
  118. package/test/integration/infra/1-security/socketsecurity.test.js +1041 -0
  119. package/test/integration/infra/1-security/sops-secret-store.test.js +201 -71
  120. package/test/integration/infra/4-ingress/underpost-ingress.test.js +1 -1
  121. package/test/unit/build-template.test.js +24 -0
  122. package/test/unit/catalog.test.js +13 -2
  123. package/test/unit/conf-resolution.test.js +41 -7
  124. package/test/unit/cyberia/instance-data.test.js +314 -0
  125. package/test/unit/deploy-legacy-gateway-sweep.test.js +63 -0
  126. package/test/unit/deploy-log-table.test.js +38 -0
  127. package/test/unit/execution-profiles.test.js +1 -0
  128. package/test/unit/gateway-pod-fetch.test.js +95 -0
  129. package/test/unit/letsencrypt-issuer.test.js +101 -0
  130. package/test/unit/package.test.js +118 -0
  131. package/test/unit/release-bump.test.js +3 -1
  132. package/test/unit/start-options.test.js +12 -0
@@ -503,6 +503,8 @@ class UnderpostRelease {
503
503
  shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
504
504
  shellExec(`node bin cron --kubeadm --setup-start --git`); // --apply
505
505
  shellExec(`node bin cmt --changelog-build`);
506
+ shellExec(`npm run security`);
507
+ shellExec(`sudo rm -rf ./conf.dd*.js`);
506
508
  return { from: version, to: newVersion, files: report.map((r) => r.file), dryRun: false };
507
509
  },
508
510
 
@@ -547,7 +549,9 @@ class UnderpostRelease {
547
549
  logger.info(`CI push commit message: ${commitMsg}`);
548
550
  shellExec(`node engine/bin clone --bare ${githubOrg}/${repoName}`);
549
551
  shellCd('/home/dd/engine');
550
- shellExec(`node bin/build ${buildTarget}`);
552
+ // `--coverage` runs the suites the deploy's `docs.coverage` names so the published
553
+ // source carries the reports; without it the pod serves the unavailable page.
554
+ shellExec(`node bin/build ${buildTarget} --coverage`);
551
555
  shellCd('/home/dd/pwa-microservices-template');
552
556
  shellExec(`rm -rf ./.git`);
553
557
  shellExec(`mv ../${repoName}.git ./.git`);
@@ -950,7 +950,12 @@ Prevent build private config repo.`,
950
950
  confRawPaths[1] = `${JSON.stringify(DefaultConf)};`;
951
951
  const targetConfPath = `./conf${defaultConf ? '' : `.${deployId}`}.js`;
952
952
  fs.writeFileSync(targetConfPath, confRawPaths.join(sepRender), 'utf8');
953
- shellExec(`prettier --write ${targetConfPath}`);
953
+ // A host tool, not a dependency: without it the manifest stays valid, only unformatted.
954
+ if (
955
+ `${shellExec('command -v prettier', { silent: true, silentOnError: true, stdout: true, disableLog: true }) ?? ''}`.trim()
956
+ )
957
+ shellExec(`prettier --write ${shellArgumentFactory(targetConfPath)}`);
958
+ else logger.warn('prettier is not on PATH; conf manifest left unformatted', { targetConfPath });
954
959
  },
955
960
 
956
961
  /**
@@ -1985,7 +1990,7 @@ Prevent build private config repo.`,
1985
1990
  `export GITHUB_TOKEN='${githubToken.replace(/'/g, "'\\''")}'`,
1986
1991
  `export GITHUB_USERNAME='${githubUsername.replace(/'/g, "'\\''")}'`,
1987
1992
  `git config --global --add safe.directory '${siteRoot}' 2>/dev/null || true`,
1988
- `cd '${siteRoot}' && git add -A && git commit -m 'backup $(date -u +%Y-%m-%dT%H:%M:%SZ)' || true`,
1993
+ `cd '${siteRoot}' && git add -A && git commit -m "backup $(date -u +%Y-%m-%dT%H:%M:%SZ)" || true`,
1989
1994
  `cd '${siteRoot}' && underpost push . ${githubUsername}/${repoName}`,
1990
1995
  `cd /home/dd/engine && node bin host clean --force`,
1991
1996
  ].join(' && ');
@@ -2160,13 +2165,13 @@ Prevent build private config repo.`,
2160
2165
 
2161
2166
  /**
2162
2167
  * Ensures a deploy's public source repo (e.g. `engine-prototype`) is present
2163
- * next to the engine and reset to a pristine HEAD, so catalog `sourceMoves`
2164
- * can (re)pull custom sources even after a previous build moved them out of
2165
- * the source tree.
2168
+ * next to the engine, so catalog `sourceMoves` the engine tree lacks can be
2169
+ * copied in.
2166
2170
  *
2167
- * Clones `../<repoName>` when missing; otherwise restores a clean checkout
2168
- * (`git checkout .` brings back any moved-out tracked files) and pulls latest.
2169
- * Mirrors the sibling-repo handling used by `syncPrivateConf`.
2171
+ * Clones `../<repoName>` when missing; otherwise fast-forwards it. The working
2172
+ * tree is never reset: it is the git view of edits made in the engine tree,
2173
+ * which ignores those paths, so a pending change there is review material, not
2174
+ * something to discard.
2170
2175
  *
2171
2176
  * @param {string} repoName - Public source repo name (e.g. `engine-prototype`).
2172
2177
  * @returns {boolean} `true` when the repo is available on disk.
@@ -2182,9 +2187,7 @@ Prevent build private config repo.`,
2182
2187
  } else {
2183
2188
  const repoAbsPath = path.resolve(repoPath);
2184
2189
  shellExec(`git config --global --add safe.directory '${repoAbsPath}'`);
2185
- shellExec(`cd ${repoPath} && git checkout . && git clean -f -d && underpost pull . ${gitUri}`, {
2186
- silent: true,
2187
- });
2190
+ shellExec(`cd ${repoPath} && underpost pull . ${gitUri}`, { silent: true });
2188
2191
  }
2189
2192
  return fs.existsSync(repoPath);
2190
2193
  },
package/src/cli/run.js CHANGED
@@ -3079,7 +3079,7 @@ EOF`);
3079
3079
  const hostListenResult = etcHostFactory(hosts);
3080
3080
  logger.info(hostListenResult.renderHosts);
3081
3081
  }
3082
- const version = 'v3.3.76';
3082
+ const version = 'v3.4.0';
3083
3083
  const instanceOptionsFactory = (deployId, instanceId) => ({
3084
3084
  ...options,
3085
3085
  ...clusterContextFactory(clusterType),
@@ -3518,10 +3518,17 @@ EOF`);
3518
3518
  logger.info('[gateway-status] Backend probe (same Host and path, bypassing Envoy)', { backendProbes });
3519
3519
  // Only the rule the browser actually hit is comparable, so judge on
3520
3520
  // the root rule rather than on every rule of the route.
3521
+ // The gateway answer carries the `server` header (`502 (nginx)`), the
3522
+ // direct one is the bare code: compared as strings, every relayed status
3523
+ // read as a routing fault, and the data plane log was dumped on a healthy
3524
+ // edge whose only problem was an absent workload.
3525
+ const statusCode = (answer) => /^([0-9]{3})/.exec(`${answer ?? ''}`)?.[1];
3521
3526
  const rootProbes = backendProbes.filter((entry) => entry.request.endsWith('/'));
3522
- const appFault = rootProbes.filter((entry) => `${entry.direct}` === `${entry.gateway}`);
3527
+ const appFault = rootProbes.filter(
3528
+ (entry) => statusCode(entry.direct) && statusCode(entry.direct) === statusCode(entry.gateway),
3529
+ );
3523
3530
  const gatewayFault = rootProbes.filter(
3524
- (entry) => /^[0-9]{3}$/.test(entry.direct) && `${entry.direct}` !== `${entry.gateway}`,
3531
+ (entry) => statusCode(entry.direct) && statusCode(entry.direct) !== statusCode(entry.gateway),
3525
3532
  );
3526
3533
  if (gatewayFault.length > 0) {
3527
3534
  logger.warn(