underpost 3.2.9 → 3.2.10

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 (81) hide show
  1. package/.github/workflows/npmpkg.ci.yml +1 -0
  2. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  3. package/.github/workflows/release.cd.yml +1 -0
  4. package/.vscode/settings.json +10 -5
  5. package/CHANGELOG.md +122 -1
  6. package/CLI-HELP.md +22 -7
  7. package/README.md +37 -8
  8. package/bin/build.js +26 -9
  9. package/bin/deploy.js +20 -21
  10. package/bin/file.js +31 -13
  11. package/bin/index.js +2 -1
  12. package/bin/vs.js +1 -1
  13. package/bump.config.js +26 -0
  14. package/conf.js +20 -4
  15. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  16. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  17. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  18. package/manifests/deployment/dd-test-development/deployment.yaml +4 -2
  19. package/manifests/kind-config-dev.yaml +8 -0
  20. package/manifests/mongodb/pv-pvc.yaml +44 -8
  21. package/manifests/mongodb/statefulset.yaml +55 -68
  22. package/package.json +27 -12
  23. package/scripts/k3s-node-setup.sh +28 -9
  24. package/src/api/core/core.router.js +19 -14
  25. package/src/api/core/core.service.js +5 -5
  26. package/src/api/default/default.router.js +22 -18
  27. package/src/api/default/default.service.js +5 -5
  28. package/src/api/document/document.router.js +28 -23
  29. package/src/api/document/document.service.js +100 -23
  30. package/src/api/file/file.router.js +19 -13
  31. package/src/api/file/file.service.js +9 -7
  32. package/src/api/test/test.router.js +17 -12
  33. package/src/api/types.js +24 -0
  34. package/src/api/user/guest.service.js +5 -4
  35. package/src/api/user/user.router.js +297 -288
  36. package/src/api/user/user.service.js +100 -35
  37. package/src/cli/baremetal.js +20 -11
  38. package/src/cli/cluster.js +196 -55
  39. package/src/cli/db.js +59 -60
  40. package/src/cli/deploy.js +273 -159
  41. package/src/cli/fs.js +3 -1
  42. package/src/cli/index.js +16 -9
  43. package/src/cli/ipfs.js +4 -6
  44. package/src/cli/kubectl.js +4 -1
  45. package/src/cli/lxd.js +217 -135
  46. package/src/cli/release.js +289 -131
  47. package/src/cli/repository.js +58 -7
  48. package/src/cli/run.js +152 -25
  49. package/src/cli/test.js +9 -3
  50. package/src/client/Default.index.js +9 -3
  51. package/src/client/components/core/Auth.js +4 -0
  52. package/src/client/components/core/PanelForm.js +56 -52
  53. package/src/client/components/core/Worker.js +162 -363
  54. package/src/client/sw/core.sw.js +174 -112
  55. package/src/db/DataBaseProvider.js +120 -20
  56. package/src/db/mongo/MongoBootstrap.js +587 -0
  57. package/src/db/mongo/MongooseDB.js +126 -22
  58. package/src/index.js +1 -1
  59. package/src/runtime/express/Express.js +2 -2
  60. package/src/runtime/wp/Wp.js +8 -5
  61. package/src/server/auth.js +2 -2
  62. package/src/server/client-build-docs.js +1 -1
  63. package/src/server/client-build.js +94 -129
  64. package/src/server/conf.js +20 -65
  65. package/src/server/process.js +180 -19
  66. package/src/server/runtime.js +1 -1
  67. package/src/server/start.js +12 -4
  68. package/src/ws/IoInterface.js +16 -16
  69. package/src/ws/core/channels/core.ws.chat.js +11 -11
  70. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  71. package/src/ws/core/channels/core.ws.stream.js +19 -19
  72. package/src/ws/core/core.ws.connection.js +8 -8
  73. package/src/ws/core/core.ws.server.js +6 -5
  74. package/src/ws/default/channels/default.ws.main.js +10 -10
  75. package/src/ws/default/default.ws.connection.js +4 -4
  76. package/src/ws/default/default.ws.server.js +4 -3
  77. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  78. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  79. /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
  80. /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
  81. /package/src/client/ssr/{pages → views}/Test.js +0 -0
@@ -81,6 +81,7 @@ jobs:
81
81
  - name: Clone github package repository
82
82
  env:
83
83
  GITHUB_TOKEN: ${{ secrets.GIT_AUTH_TOKEN }}
84
+ GITHUB_USERNAME: ${{ github.repository_owner }}
84
85
  run: |
85
86
  cd .. && node engine/bin clone underpostnet/pwa-microservices-template
86
87
  cd engine
@@ -30,4 +30,4 @@ jobs:
30
30
  run: npm install
31
31
 
32
32
  - name: Run test
33
- run: node bin test
33
+ run: npm test
@@ -34,6 +34,7 @@ jobs:
34
34
  # Commands to run on the remote VM
35
35
  script: |
36
36
  set -e
37
+ set -o pipefail
37
38
  echo "Starting remote release deploy"
38
39
  cd /home/dd/engine
39
40
  sudo -n -- /bin/bash -lc "node bin run pull"
@@ -1,10 +1,15 @@
1
1
  {
2
- "editor.defaultFormatter": "esbenp.prettier-vscode",
3
2
  "editor.formatOnSave": true,
4
- "explorer.compactFolders": false,
5
- "js/ts.preferences.importModuleSpecifierEnding": "js",
6
3
  "[javascript]": {
7
4
  "editor.defaultFormatter": "esbenp.prettier-vscode"
8
5
  },
9
- "editor.inlineSuggest.enabled": true
10
- }
6
+ "[javascriptreact]": {
7
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
8
+ },
9
+ "[typescript]": {
10
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
11
+ },
12
+ "[typescriptreact]": {
13
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
14
+ }
15
+ }
package/CHANGELOG.md CHANGED
@@ -1,6 +1,127 @@
1
1
  # Changelog
2
2
 
3
- ## 2026-05-14
3
+ ## 2026-05-26
4
+
5
+ ### cli-run
6
+
7
+ - Add group property and shared directory setup methods to UnderpostRun ([6cc121c4a](https://github.com/underpostnet/engine/commit/6cc121c4abe8a5fe07582a99a251ef8e1133ce00))
8
+
9
+ ### cli-release
10
+
11
+ - Add bumpp configuration and integrate version bumping into release process ([e5eb50d70](https://github.com/underpostnet/engine/commit/e5eb50d70980fe625e4246b5807b2a3984f09e72))
12
+
13
+ ### engine-cyberia
14
+
15
+ - Refactor CI workflows for cyberia-client and cyberia-server, removing outdated comments and improving clarity. Update Dockerfile to ensure clean builds by adding a clean step before compilation. ([e74918e81](https://github.com/underpostnet/engine/commit/e74918e8102a2c7361ff8abd89aa019aee6ef642))
16
+ - Refactor CI workflows and Dockerfiles for cyberia-client and cyberia-server ([0dfda92fd](https://github.com/underpostnet/engine/commit/0dfda92fd0c01de7af755a2935fd68199d94d61f))
17
+ - Refactor package.json metadata for Cyberia CLI and Underpost Platform, updating descriptions and keywords for improved clarity and relevance. ([893a371ac](https://github.com/underpostnet/engine/commit/893a371acef87351841d4ff703f35421e05725e4))
18
+ - Enhance Dockerfiles and CLI: align underpost versioning, add dev configurations, and improve manifest build options ([4f9c96df6](https://github.com/underpostnet/engine/commit/4f9c96df6b672c25ef8d34d0ad440f66061f7789))
19
+ - Refactor presentation handling: remove legacy fields, update documentation, and streamline client hints integration ([e79315e6e](https://github.com/underpostnet/engine/commit/e79315e6e3064140d6b2e634f31b153008a15db0))
20
+ - Refactor Cyberia defaults management ([2454ad54c](https://github.com/underpostnet/engine/commit/2454ad54c9f9d3e9b2aa43a831184f6e87b4772f))
21
+ - Add cyberia hints model and refactor docs ([14fc8a633](https://github.com/underpostnet/engine/commit/14fc8a633843a52f705594eba3927a8a7b1dc685))
22
+ - Update build process to include README.md and update white paper version ([77099e88f](https://github.com/underpostnet/engine/commit/77099e88f50516a0e6e626f74059814585ca18d6))
23
+
24
+ ### client
25
+
26
+ - Chore landing icons ([ed1bc3fee](https://github.com/underpostnet/engine/commit/ed1bc3fee671319b151e218ec58b9ca67200579e))
27
+
28
+ ### github-actions
29
+
30
+ - Add condition to skip jobs for dependabot in Coverall CI workflow ([db35270a6](https://github.com/underpostnet/engine/commit/db35270a686edf5c975721a3ec60ae8fc0b893be))
31
+ - Enhance underpost test execution and improve error handling ([d046dcee2](https://github.com/underpostnet/engine/commit/d046dcee2a78c2a80fd13ac74322a735aa3044c5))
32
+ - Update CI workflows to specify repository paths for cyberia-client and cyberia-server; adjust Dockerfile to copy from the correct directory ([9bef93774](https://github.com/underpostnet/engine/commit/9bef93774841ec650b2574f2369b8e6b486c342d))
33
+
34
+ ### cli-deploy
35
+
36
+ - Add imagePullPolicy option to deployment commands and documentation ([d1ebe5d71](https://github.com/underpostnet/engine/commit/d1ebe5d71a7840d7739be0f41d59dc0f5dfdd155))
37
+ - Enhance deployment monitoring: improve pod readiness checks, add container-status validation, and refine logging for deployment progress ([3cb67b64b](https://github.com/underpostnet/engine/commit/3cb67b64b01af8055396ca78515011ffe4146b28))
38
+
39
+ ### gitub-actions
40
+
41
+ - Enhance CI workflow and Dockerfiles to include SSR dashboard setup and dependencies ([6e8db980f](https://github.com/underpostnet/engine/commit/6e8db980f79b3ef9d48d2231f83ea62c28879f25))
42
+
43
+ ### client-core
44
+
45
+ - Enhance file handling logic and improve UI interactions in PanelForm and Auth components ([f4e146195](https://github.com/underpostnet/engine/commit/f4e146195b94dc8df711bb3e1eec52feaae0489c))
46
+ - Enhance offline and maintenance fallback handling: implement inline HTML responses, improve caching logic, and ensure user-friendly error pages ([1802b40ca](https://github.com/underpostnet/engine/commit/1802b40caab7c90b0c73a9ab70a042772a8fe77b))
47
+ - Enhance service worker fallback handling: add inline HTML responses for offline and maintenance states, improve caching logic, and refine navigation fetch strategy ([bc2a1a0ca](https://github.com/underpostnet/engine/commit/bc2a1a0ca711e7448ee9be7629a8e0e3b598dfaf))
48
+ - Add SSR views for server metrics, maintenance, and offline handling ([81ca21084](https://github.com/underpostnet/engine/commit/81ca21084a7246f2926ee6b6c6f96858714a232c))
49
+
50
+ ### dependencies
51
+
52
+ - Update dependencies and improve branch deletion error handling ([bcbf1a5e3](https://github.com/underpostnet/engine/commit/bcbf1a5e3a801d4bc6fdfc1e0f17a5630b40b325))
53
+ - Update dependencies: bump body-parser to 1.20.5, express to 4.22.2, and qs to 6.15.2 ([3d5da7d28](https://github.com/underpostnet/engine/commit/3d5da7d28bba137ea50b0c2260b5614bf42c2b69))
54
+
55
+ ### ssr-cyberia
56
+
57
+ - Refactor ssr/views/CyberiaServerMetrics.js ([7184a738d](https://github.com/underpostnet/engine/commit/7184a738d17602fafe5cefd7722a7cd669b11693))
58
+
59
+ ### cli
60
+
61
+ - Enhance error handling: silence errors during git commit and process termination ([7583c4f12](https://github.com/underpostnet/engine/commit/7583c4f1288713513c02b76e5c11649c41e427ca))
62
+
63
+ ### cluster
64
+
65
+ - Add targeted reset option for MongoDB components without full cluster restart ([8c293e11d](https://github.com/underpostnet/engine/commit/8c293e11dfafb992ccf3b26ab139e95266c28169))
66
+ - Enhance UnderpostCluster: add natSetup method for NAT and iptables configuration, improve cluster deletion logic, and update options parameter for config method ([b90d7dba7](https://github.com/underpostnet/engine/commit/b90d7dba7bcbdd1d433f763ab3f7394dabf912f2))
67
+
68
+ ### ipfs
69
+
70
+ - Fix IPFS deployment: streamline UDP buffer sysctl application for Kind nodes ([2b08cbc6d](https://github.com/underpostnet/engine/commit/2b08cbc6dafcd4af7b55c96d99bc7b8e603b80f6))
71
+
72
+ ### db
73
+
74
+ - Refactor MongoDB bootstrap logic: enhance admin authentication check and streamline initialization script execution ([866e56c63](https://github.com/underpostnet/engine/commit/866e56c6303e20b8269778e5a7adc6e618f4520a))
75
+ - Refactor MongoDB primary pod detection and bootstrap logic ([609f5e89b](https://github.com/underpostnet/engine/commit/609f5e89b5807df797bd5c16839c87f2bd786ba2))
76
+ - Refactor MongoDB manifests and initialization: update PersistentVolume configurations, enhance StatefulSet security, and improve MongoDB cluster bootstrap logic ([ed89c3850](https://github.com/underpostnet/engine/commit/ed89c3850ca3108664ca70f9737ac756f7936083))
77
+ - Refactor DataBaseProviderService: change #instance to static and update instance getter for compatibility ([360d2c856](https://github.com/underpostnet/engine/commit/360d2c856a6409efa32dc2e1d602bd6e5b268223))
78
+ - Refactor replace DataBaseProvider with DataBaseProviderService across services and routers ([614e47314](https://github.com/underpostnet/engine/commit/614e4731493b413346f05915a0be6c18aa0d81c2))
79
+ - Enhance MongoDB configuration and management: update stateful set parameters, improve secret handling, and implement replica set initialization logic ([1fb895669](https://github.com/underpostnet/engine/commit/1fb895669cbd8ec1d42b779c810ae6a35555725e))
80
+
81
+ ### ws
82
+
83
+ - Refactor WebSocket management context: replace wsManagementId with hostKeyContext across IoInterface and related channels ([b82c80fce](https://github.com/underpostnet/engine/commit/b82c80fce52cba2ef9443ea664df69e727e35ca0))
84
+
85
+ ### deploy
86
+
87
+ - Enhance deployment error handling: update expected container status, throw errors for pod status issues, and manage container status in shell execution ([d170f36cc](https://github.com/underpostnet/engine/commit/d170f36cc77b759a4e86a7f0dcad015aa6fc74ef))
88
+
89
+ ### lxd
90
+
91
+ - Enhance LXD management: add safe teardown for VMs, improve engine source replication, and update documentation ([e9b3a68c9](https://github.com/underpostnet/engine/commit/e9b3a68c961dd08722dc3febbca3a5bd9c42a9fe))
92
+
93
+ ### api
94
+
95
+ - Enhance ObjectLayerService command execution with error context ([4253b2437](https://github.com/underpostnet/engine/commit/4253b2437b9cb8af42cbea0967baa6900880e0b5))
96
+
97
+ ### docs
98
+
99
+ - Clean docs ([465507082](https://github.com/underpostnet/engine/commit/465507082493ec26b96658b8dd26c33ace8e6bf4))
100
+ - Update README.md for clarity and improved documentation links ([4021b6fcb](https://github.com/underpostnet/engine/commit/4021b6fcb55c6bad4e3cf605583c5b748ebb4734))
101
+ - Add jsdelivr badge ([d2a6f2931](https://github.com/underpostnet/engine/commit/d2a6f293127801b89e7de1794c77bce2c0522276))
102
+ - Update file paths and command syntax in architecture and client/server documentation ([f51891d44](https://github.com/underpostnet/engine/commit/f51891d44552fd5cd386e7685f86434b2cf02eb9))
103
+
104
+ ### settings
105
+
106
+ - Update default formatters for JSON and TypeScript files ([e2c20b6f8](https://github.com/underpostnet/engine/commit/e2c20b6f896ef65f55df71678cc6e6d9c116b8f6))
107
+
108
+ ### dependabot
109
+
110
+ - Update dependency patterns in dependabot.yml for improved package management ([60e8605c3](https://github.com/underpostnet/engine/commit/60e8605c3361e1cb824ac072d593a6321d79399f))
111
+
112
+ ### cli-cyberia
113
+
114
+ - Refactor CyberiaDialogue handling to use codes instead of itemIds for improved dialogue management ([273fed2e4](https://github.com/underpostnet/engine/commit/273fed2e4706311fbbde993ce9ea5d549376dd0b))
115
+
116
+ ### runtime-cyberia
117
+
118
+ - Refactor Dockerfiles for cyberia-client and cyberia-server to streamline package installations and improve build processes ([0312126c7](https://github.com/underpostnet/engine/commit/0312126c7032c17e1b67fe0fef8e7c74975d9ac8))
119
+
120
+ ### bin-vs
121
+
122
+ - Fix correct typo in clean case to remove vsConfigRootPath ([0251c45a3](https://github.com/underpostnet/engine/commit/0251c45a3580ec0e5a907667fcc1240307e2f27b))
123
+
124
+ ## New release v:3.2.9 (2026-05-13)
4
125
 
5
126
  ### client-core
6
127
 
package/CLI-HELP.md CHANGED
@@ -1,4 +1,4 @@
1
- ## underpost ci/cd cli v3.2.9
1
+ ## underpost ci/cd cli v3.2.10
2
2
 
3
3
  ### Usage: `underpost [options] [command]`
4
4
  ```
@@ -412,6 +412,10 @@ Arguments:
412
412
  Options:
413
413
  --reset Deletes all clusters and prunes all
414
414
  related data and caches.
415
+ --reset-mongodb Performs a hard cleanup of only
416
+ MongoDB-related resources (StatefulSet,
417
+ PVCs/PVs, Secrets, ConfigMaps, caches)
418
+ without restarting the whole node.
415
419
  --mariadb Initializes the cluster with a MariaDB
416
420
  statefulset.
417
421
  --mysql Initializes the cluster with a MySQL
@@ -565,6 +569,11 @@ Options:
565
569
  bundle from Cloudinary inside the
566
570
  container. Use together with
567
571
  --skip-full-build.
572
+ --image-pull-policy <policy> Override container imagePullPolicy in the
573
+ generated deployment manifest (Always,
574
+ IfNotPresent, Never). Defaults to Never
575
+ for localhost/ images and IfNotPresent
576
+ otherwise.
568
577
  -h, --help display help for command
569
578
 
570
579
  ```
@@ -903,7 +912,7 @@ Options:
903
912
  Runs specified scripts using various runners.
904
913
 
905
914
  Arguments:
906
- runner-id The runner ID to run. Options: dev-cluster,ipfs-expose,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-local,docker-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,get-proxy,instance-promote,instance,instance-build-manifest,ls-deployments,host-update,install-crio,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,etc-hosts,sh,log,ps,pid-info,background,ports,deploy-test,tf-vae-test,spark-template,pull-rocky-image,rmi,kill,generate-pass,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job,push-bundle,pull-bundle.
915
+ runner-id The runner ID to run. Options: dev-cluster,ipfs-expose,metadata,svc-ls,svc-rm,ssh-deploy-info,dev-hosts-expose,dev-hosts-restore,cluster-build,template-deploy,template-deploy-local,docker-image,clean,pull,release-deploy,ssh-deploy,ide,crypto-policy,sync,stop,ssh-deploy-stop,ssh-deploy-db-rollback,ssh-deploy-db,ssh-deploy-db-status,tz,get-proxy,instance-promote,instance,instance-build-manifest,ls-deployments,host-update,install-crio,dd-container,ip-info,db-client,git-conf,promote,metrics,cluster,deploy,disk-clean,disk-devices,disk-usage,dev,service,etc-hosts,sh,log,ps,pid-info,background,ports,deploy-test,tf-vae-test,spark-template,pull-rocky-image,rmi,kill,generate-pass,secret,underpost-config,gpu-env,tf-gpu-test,deploy-job,push-bundle,pull-bundle,setup-shared-dir,reload-shared-dir.
907
916
  path The input value, identifier, or path for the operation.
908
917
 
909
918
  Options:
@@ -987,7 +996,9 @@ Manages LXD virtual machines as K3s nodes (control plane or workers).
987
996
  Options:
988
997
  --init Initializes LXD on the current machine via
989
998
  preseed.
990
- --reset Removes the LXD snap and purges all data.
999
+ --reset SAFE complete reset: cleans all VMs (proxy
1000
+ devices first), profiles, networks, then
1001
+ removes LXD snap.
991
1002
  --install Installs the LXD snap.
992
1003
  --dev Use local paths instead of the global npm
993
1004
  installation.
@@ -1001,7 +1012,9 @@ Options:
1001
1012
  node.
1002
1013
  --create-vm <vm-name> Copy the LXC launch command for a new K3s VM
1003
1014
  to the clipboard.
1004
- --delete-vm <vm-name> Stop and delete the specified VM.
1015
+ --delete-vm <vm-name> SAFELY stop and delete VM (removes proxy
1016
+ devices first, then stops, then deletes).
1017
+ Safe to re-run.
1005
1018
  --init-vm <vm-name> Run k3s-node-setup.sh on the specified VM
1006
1019
  (use with --control or --worker).
1007
1020
  --info-vm <vm-name> Display full configuration and status for the
@@ -1018,9 +1031,8 @@ Options:
1018
1031
  "k3s-control:80,443").
1019
1032
  --delete-expose <vm-name:ports> Remove proxied ports from a VM (e.g.,
1020
1033
  "k3s-control:80,443").
1021
- --workflow-id <workflow-id> Workflow ID to execute via runWorkflow.
1022
- --vm-id <vm-name> Target VM name for workflow execution.
1023
- --deploy-id <deploy-id> Deployment ID context for workflow execution.
1034
+ --bootstrap-engine <vm-name> Replicate /home/dd/engine source into the VM
1035
+ after init completes.
1024
1036
  --namespace <namespace> Kubernetes namespace context (defaults to
1025
1037
  "default").
1026
1038
  -h, --help display help for command
@@ -1112,6 +1124,9 @@ Options:
1112
1124
  --pwa-build Runs the pwa-microservices-template update flow: always
1113
1125
  re-clones, syncs engine sources, installs, builds, and
1114
1126
  pushes.
1127
+ --dry-run For --build: previews version-bump changes (per-file
1128
+ substitution counts) without writing files or running
1129
+ downstream commands.
1115
1130
  -h, --help display help for command
1116
1131
 
1117
1132
  ```
package/README.md CHANGED
@@ -16,17 +16,46 @@
16
16
 
17
17
  <div align="center">
18
18
 
19
- [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/3.2.9)](https://socket.dev/npm/package/underpost/overview/3.2.9) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
19
+ [![Node.js CI](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/docker-image.ci.yml) [![Test](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml/badge.svg?branch=master)](https://github.com/underpostnet/engine/actions/workflows/coverall.ci.yml) [![Downloads](https://img.shields.io/npm/dm/underpost.svg)](https://www.npmjs.com/package/underpost) [![](https://data.jsdelivr.com/v1/package/npm/underpost/badge)](https://www.jsdelivr.com/package/npm/underpost) [![Socket Badge](https://socket.dev/api/badge/npm/package/underpost/3.2.10)](https://socket.dev/npm/package/underpost/overview/3.2.10) [![Coverage Status](https://coveralls.io/repos/github/underpostnet/engine/badge.svg?branch=master)](https://coveralls.io/github/underpostnet/engine?branch=master) [![Version](https://img.shields.io/npm/v/underpost.svg)](https://www.npmjs.org/package/underpost) [![License](https://img.shields.io/npm/l/underpost.svg)](https://www.npmjs.com/package/underpost)
20
20
 
21
21
  </div>
22
22
 
23
- <div align="center">
24
-
25
23
  #### Base template for pwa/api-rest projects.
26
24
 
27
- <div style="font-size: 20px;"><em>End2end</em> continuous integration and continuous deployment cloud applications toolchain. Develop, build, deploy, test, monitor, and manage multiple runtime applications on virtual machines or container instances.</div>
25
+ ## Underpost Platform
28
26
 
29
- </div>
27
+ **Underpost** is an platform for application delivery, from infrastructure to runtime. The `underpost` npm package is its CLI toolchain surface.
28
+
29
+ The project covers:
30
+
31
+ - **Bare metal provisioning** on Rocky Linux 9.
32
+ - **Kubernetes / K3s / kubeadm / LXD** workflows for production, edge, and isolated workloads.
33
+ - **GitHub OSS repository flow** — clone, pull, push, commit, release, and CI integrations as first-class CLI subcommands.
34
+ - **CI/CD orchestration** — GitHub Actions integrations, container builds, multi-environment deployments.
35
+ - **Static build + PWA delivery** — every deploy ships as an installable Progressive Web App with Workbox-based offline support.
36
+ - **Cloudinary-backed static asset flow** for image/asset delivery.
37
+ - **ERP/CRM-style PWA base applications** as the default workload.
38
+ - **Cyberia** — a dedicated MMO extension built on top of the platform, with its own content backend (`engine-cyberia`), authoritative simulation runtime (`cyberia-server`), and presentation runtime (`cyberia-client`).
39
+
40
+ <a target="_top" href="Https://github.com/underpostnet/engine/blob/master/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md">See Detailed platform doc.</a>
41
+
42
+ ### Architectural roles (Cyberia stack)
43
+
44
+ When the platform is hosting the Cyberia MMO extension, three runtime processes participate. Their boundaries are non-overlapping and their startup order is **strictly sequential** — not parallel.
45
+
46
+ | Process | Role |
47
+ | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
48
+ | **engine-cyberia** (Node.js) | Content authority: maps, object layers, atlas/asset metadata, world configuration, persistence, validation, gRPC + REST data services, editor backend, asset distribution. |
49
+ | **cyberia-server** (Go) | Authoritative simulation runtime: tick advancement, AOI replication, input command processing, snapshot generation. |
50
+ | **cyberia-client** (C → WebAssembly) | Presentation runtime: rendering, UI, input capture, prediction, reconciliation, interpolation, client-side presentation defaults. |
51
+
52
+ **Startup order — sequential, in order:**
53
+
54
+ 1. **Persistent backend / sidecar data layer** — databases, content backend (engine-cyberia), static asset backend, config and data services.
55
+ 2. **cyberia-server** — authoritative Go simulation runtime; dials engine-cyberia gRPC at boot to load world configuration.
56
+ 3. **cyberia-client** — rendering, UI, prediction, interpolation, reconciliation; connects to cyberia-server via WebSocket.
57
+
58
+ <a target="_top" href="https://github.com/underpostnet/engine-cyberia/blob/master/src/client/public/cyberia-docs/ARCHITECTURE.md">See Detailed architecture.</a>
30
59
 
31
60
  ## Create a new project
32
61
 
@@ -58,10 +87,10 @@ Run dev client server
58
87
  npm run dev
59
88
  ```
60
89
 
61
- <a target="_top" href="https://www.nexodev.org/docs?cid=src">See Docs here.</a>
90
+ <a target="_top" href="https://www.nexodev.org/docs?cid=src">See Docs.</a>
62
91
 
63
92
  <!-- cli-index-start -->
64
- ## underpost ci/cd cli v3.2.9
93
+ ## underpost ci/cd cli v3.2.10
65
94
 
66
95
  ### Usage: `underpost [options] [command]`
67
96
  ```
@@ -103,4 +132,4 @@ Commands:
103
132
  ```
104
133
  <!-- cli-index-end -->
105
134
 
106
- <a target="_top" href="https://github.com/underpostnet/pwa-microservices-template/blob/master/CLI-HELP.md">See CLI Docs here.</a>
135
+ <a target="_top" href="https://github.com/underpostnet/pwa-microservices-template/blob/master/CLI-HELP.md">See CLI Docs.</a>
package/bin/build.js CHANGED
@@ -64,9 +64,9 @@ if (process.argv.includes('conf')) {
64
64
  }
65
65
  shellExec(
66
66
  `cd ../${privateRepoName}` +
67
- ` && git add .` +
68
- ` && underpost cmt . ci engine-core-conf 'Update ${_confName} conf'` +
69
- ` && underpost push . ${privateGitUri}`,
67
+ ` && git add .` +
68
+ ` && underpost cmt . ci engine-core-conf 'Update ${_confName} conf'` +
69
+ ` && underpost push . ${privateGitUri}`,
70
70
  {
71
71
  silent: true,
72
72
  },
@@ -167,23 +167,39 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
167
167
  packageJson.bin.cyberia = 'bin/index.js';
168
168
  packageJson.keywords = [
169
169
  'cyberia',
170
+ 'cyberia-cli',
171
+ 'sidecar',
172
+ 'data-layer',
173
+ 'engine-cyberia',
170
174
  'object-layer',
171
- 'game-engine',
172
- 'assets-management',
173
- 'web3',
174
175
  'atlas-sprite-sheet',
176
+ 'ipfs',
177
+ 'erc-1155',
178
+ 'object-layer-token',
179
+ 'hardhat',
180
+ 'hyperledger-besu',
181
+ 'blockchain',
182
+ 'web3',
183
+ 'underpost-platform',
184
+ 'mmo-extension',
175
185
  ];
176
- packageJson.description = 'Cyberia Engine - Object Layer and Assets Management Microservice';
177
- const { CyberiaDependencies } = await import(`../src/client/components/cyberia-portal/CommonCyberiaPortal.js`);
186
+ packageJson.description =
187
+ 'Cyberia CLI toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.';
188
+ const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
178
189
  packageJson.dependencies = {
179
190
  ...originPackageJson.dependencies,
180
191
  ...CyberiaDependencies,
181
192
  };
182
193
  fs.writeFileSync(`${basePath}/bin/index.js`, fs.readFileSync(`./bin/cyberia.js`, 'utf8'), 'utf8');
194
+ fs.writeFileSync(
195
+ `${basePath}/README.md`,
196
+ fs.readFileSync(`./src/client/public/cyberia-docs/CYBERIA-CLI.md`, 'utf8'),
197
+ 'utf8',
198
+ );
183
199
  fs.copySync(`./hardhat`, `${basePath}/hardhat`);
184
200
  for (const path of [
185
201
  '/src/grpc/cyberia',
186
- '/src/client/ssr/pages/CyberiaServerMetrics.js',
202
+ '/src/client/ssr/views/CyberiaServerMetrics.js',
187
203
  '/src/server/object-layer.js',
188
204
  '/src/server/atlas-sprite-sheet-generator.js',
189
205
  '/src/server/shape-generator.js',
@@ -197,6 +213,7 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
197
213
  '/src/runtime/cyberia-client',
198
214
  '/.github/workflows/hardhat.ci.yml',
199
215
  '/src/client/public/cyberia-docs',
216
+ '/src/api/cyberia-server-defaults'
200
217
  ])
201
218
  fs.copySync(`.${path}`, `${basePath}${path}`);
202
219
 
package/bin/deploy.js CHANGED
@@ -443,10 +443,10 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
443
443
  shellExec(`sudo kubectl delete secret ${secretSelector} -n ${namespace} --ignore-not-found`);
444
444
  shellExec(
445
445
  `sudo kubectl create secret generic ${secretSelector}` +
446
- ` --from-literal=POSTGRES_DB=postgresdb` +
447
- ` --from-literal=POSTGRES_USER=admin` +
448
- ` --from-file=POSTGRES_PASSWORD=/home/dd/engine/engine-private/postgresql-password` +
449
- ` --dry-run=client -o yaml | kubectl apply -f - -n ${namespace}`,
446
+ ` --from-literal=POSTGRES_DB=postgresdb` +
447
+ ` --from-literal=POSTGRES_USER=admin` +
448
+ ` --from-file=POSTGRES_PASSWORD=/home/dd/engine/engine-private/postgresql-password` +
449
+ ` --dry-run=client -o yaml | kubectl apply -f - -n ${namespace}`,
450
450
  );
451
451
  }
452
452
  {
@@ -454,10 +454,10 @@ ${shellExec(`git log | grep Author: | sort -u`, { stdout: true }).split(`\n`).jo
454
454
  shellExec(`sudo kubectl delete secret ${secretSelector} -n ${namespace} --ignore-not-found`);
455
455
  shellExec(
456
456
  `sudo kubectl create secret generic ${secretSelector}` +
457
- ` --from-file=SECRET_KEY=/home/dd/engine/engine-private/postgresql-password` +
458
- ` --from-literal=FIRST_SUPERUSER=${process.env.GITHUB_EMAIL || 'development@underpost.net'}` +
459
- ` --from-file=FIRST_SUPERUSER_PASSWORD=/home/dd/engine/engine-private/postgresql-password` +
460
- ` --dry-run=client -o yaml | kubectl apply -f - -n ${namespace}`,
457
+ ` --from-file=SECRET_KEY=/home/dd/engine/engine-private/postgresql-password` +
458
+ ` --from-literal=FIRST_SUPERUSER=${process.env.GITHUB_EMAIL || 'development@underpost.net'}` +
459
+ ` --from-file=FIRST_SUPERUSER_PASSWORD=/home/dd/engine/engine-private/postgresql-password` +
460
+ ` --dry-run=client -o yaml | kubectl apply -f - -n ${namespace}`,
461
461
  );
462
462
  }
463
463
  }
@@ -577,8 +577,7 @@ nvidia/gpu-operator \
577
577
  shellExec(`sudo docker pull ${image}`);
578
578
  if (!process.argv.includes('kubeadm'))
579
579
  shellExec(
580
- `sudo ${
581
- process.argv.includes('kubeadm') ? `ctr -n k8s.io images import` : `kind load docker-image`
580
+ `sudo ${process.argv.includes('kubeadm') ? `ctr -n k8s.io images import` : `kind load docker-image`
582
581
  } ${image}`,
583
582
  );
584
583
  const namespace = process.argv.find((arg) => arg.startsWith('--namespace='))?.split('=')[1] || 'default';
@@ -627,11 +626,11 @@ nvidia/gpu-operator \
627
626
  }
628
627
  env[key] =
629
628
  `${key}`.toUpperCase().match('API') ||
630
- `${key}`.toUpperCase().match('KEY') ||
631
- `${key}`.toUpperCase().match('SECRET') ||
632
- `${key}`.toUpperCase().match('TOKEN') ||
633
- `${key}`.toUpperCase().match('PASSWORD') ||
634
- `${key}`.toUpperCase().match('MAC')
629
+ `${key}`.toUpperCase().match('KEY') ||
630
+ `${key}`.toUpperCase().match('SECRET') ||
631
+ `${key}`.toUpperCase().match('TOKEN') ||
632
+ `${key}`.toUpperCase().match('PASSWORD') ||
633
+ `${key}`.toUpperCase().match('MAC')
635
634
  ? 'changethis'
636
635
  : isNaN(parseFloat(privateEnv[key]))
637
636
  ? `${privateEnv[key]}`.match(`@`)
@@ -714,7 +713,7 @@ nvidia/gpu-operator \
714
713
  }
715
714
 
716
715
  case 'cyberia': {
717
- const { CyberiaDependencies } = await import(`../src/client/components/cyberia-portal/CommonCyberiaPortal.js`);
716
+ const { CyberiaDependencies } = await import(`../src/api/cyberia-server-defaults/cyberia-server-defaults.js`);
718
717
  for (const dep of Object.keys(CyberiaDependencies)) {
719
718
  const ver = CyberiaDependencies[dep];
720
719
  shellExec(`npm install ${dep}@${ver}`);
@@ -823,7 +822,7 @@ nvidia/gpu-operator \
823
822
 
824
823
  // Delete merged local and remote branches
825
824
  for (const { branch, isAlreadyMerged } of mergedBranches) {
826
- shellExec(`git branch -D ${branch}`, { silent: true });
825
+ shellExec(`git branch -D ${branch}`, { silent: true, silentOnError: true });
827
826
  // logger.info(`Deleting remote branch: ${branch}${isAlreadyMerged ? ' (already merged)' : ''}`);
828
827
  // shellExec(`git push https://${process.env.GITHUB_TOKEN}@github.com/${gitUri}.git --delete ${branch}`, {
829
828
  // disableLog: true,
@@ -1394,10 +1393,10 @@ nvidia/gpu-operator \
1394
1393
  const deployIds = deployIdArg
1395
1394
  ? [deployIdArg]
1396
1395
  : fs
1397
- .readFileSync(`./engine-private/deploy/dd.router`, 'utf8')
1398
- .split(',')
1399
- .map((d) => d.trim())
1400
- .filter(Boolean);
1396
+ .readFileSync(`./engine-private/deploy/dd.router`, 'utf8')
1397
+ .split(',')
1398
+ .map((d) => d.trim())
1399
+ .filter(Boolean);
1401
1400
 
1402
1401
  const addComponentToClientConf = ({ filePath, label, targetClientId, targetSubmoduleId }) => {
1403
1402
  if (!fs.existsSync(filePath)) return { added: 0, checked: 0, hasComponentFile: false };
package/bin/file.js CHANGED
@@ -15,9 +15,13 @@ import dotenv from 'dotenv';
15
15
 
16
16
  const logger = loggerFactory(import.meta);
17
17
 
18
- dotenv.config({ path: `./engine-private/conf/dd-cron/.env.production`, override: true });
19
-
20
- logger.info('argv', process.argv);
18
+ if (fs.existsSync('./engine-private/conf/dd-cron/.env.production'))
19
+ dotenv.config({
20
+ path:
21
+ `./engine-private/conf/dd-cron/.env.production`,
22
+ override: true
23
+ });
24
+ else dotenv.config();
21
25
 
22
26
  let [exe, dir, type] = process.argv;
23
27
  let rawPath = process.argv[3].replaceAll(`'`, '');
@@ -56,10 +60,10 @@ try {
56
60
 
57
61
  if (type === 'update-template') {
58
62
  if (!fs.existsSync(toPath))
59
- shellExec(`cd .. && underpost clone ${process.env.GITHUB_USERNAME}/pwa-microservices-template`);
63
+ shellExec(`cd .. && node engine/bin clone ${process.env.GITHUB_USERNAME}/pwa-microservices-template`);
60
64
  else {
61
65
  shellExec(`cd ${toPath} && git reset && git checkout . && git clean -f -d`);
62
- shellExec(`underpost pull ${toPath} ${process.env.GITHUB_USERNAME}/pwa-microservices-template`);
66
+ shellExec(`node bin pull ${toPath} ${process.env.GITHUB_USERNAME}/pwa-microservices-template`);
63
67
  shellExec(`sudo rm -rf ${toPath}/engine-private`);
64
68
  shellExec(`sudo rm -rf ${toPath}/logs`);
65
69
  }
@@ -135,9 +139,6 @@ try {
135
139
  const templatePackageJson = JSON.parse(fs.readFileSync('../pwa-microservices-template/package.json', 'utf8'));
136
140
 
137
141
  const name = templatePackageJson.name;
138
- const description = templatePackageJson.description;
139
- const dev = templatePackageJson.scripts.dev;
140
- const build = templatePackageJson.scripts.build;
141
142
 
142
143
  templatePackageJson.dependencies = originPackageJson.dependencies;
143
144
  templatePackageJson.devDependencies = originPackageJson.devDependencies;
@@ -145,11 +146,27 @@ try {
145
146
  templatePackageJson.scripts = originPackageJson.scripts;
146
147
  templatePackageJson.overrides = originPackageJson.overrides;
147
148
  templatePackageJson.name = name;
148
- templatePackageJson.description = description;
149
- // templatePackageJson.scripts.dev = dev;
150
- // templatePackageJson.scripts.build = build;
149
+ templatePackageJson.description =
150
+ 'Underpost Platform — end-to-end CI/CD and application-delivery toolchain CLI. Covers bare metal, Kubernetes, K3s, kubeadm, LXD, container/image orchestration, secrets, databases, cron jobs, monitoring, SSH, runners, PWA + Workbox delivery, and release orchestration. Extensible via downstream CLIs.';
151
151
  templatePackageJson.keywords = uniqueArray(
152
- ['pwa', 'microservices', 'template', 'builder'].concat(templatePackageJson.keywords),
152
+ [
153
+ 'underpost',
154
+ 'underpost-platform',
155
+ 'cli',
156
+ 'toolchain',
157
+ 'ci-cd',
158
+ 'devops',
159
+ 'kubernetes',
160
+ 'k3s',
161
+ 'kubeadm',
162
+ 'lxd',
163
+ 'bare-metal',
164
+ 'container-orchestration',
165
+ 'image-management',
166
+ 'pwa',
167
+ 'workbox',
168
+ 'microservices',
169
+ ].concat(templatePackageJson.keywords || []),
153
170
  );
154
171
  delete templatePackageJson.scripts['update:template'];
155
172
  fs.writeFileSync(
@@ -199,4 +216,5 @@ try {
199
216
  }
200
217
  } catch (error) {
201
218
  logger.error(error, error.stack);
202
- }
219
+ process.exit(1);
220
+ }
package/bin/index.js CHANGED
@@ -9,4 +9,5 @@ try {
9
9
  program.parse();
10
10
  } catch (error) {
11
11
  logger.error(error);
12
- }
12
+ process.exit(1);
13
+ }
package/bin/vs.js CHANGED
@@ -65,7 +65,7 @@ switch (process.argv[2]) {
65
65
 
66
66
  case 'clean': {
67
67
  shellExec(`sudo rm -rf ${vsCodeRootPath}/*`);
68
- shellExec(`sudo rn -rf ${vsConfigRootPath}`);
68
+ shellExec(`sudo rm -rf ${vsConfigRootPath}`);
69
69
  break;
70
70
  }
71
71
  default:
package/bump.config.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * bumpp configuration for the Underpost engine.
3
+ *
4
+ * Owns the *canonical* version-bearing files (anything that exposes a literal `version` field
5
+ * bumpp can detect natively). Non-canonical files — image tags in workflows, README badges,
6
+ * doc strings, deployment.yaml image refs — are handled by the custom regex walker in
7
+ * src/cli/release.js (VERSION_BUMP_TARGETS), because bumpp only rewrites `version`-shaped lines.
8
+ *
9
+ * release.js drives bumpp programmatically (versionBump from 'bumpp') with commit/tag/push
10
+ * disabled, since the engine release flow stages and commits separately via `node bin cmt`.
11
+ *
12
+ * @see https://github.com/antfu/bumpp
13
+ */
14
+ export default {
15
+ files: [
16
+ 'package.json',
17
+ 'package-lock.json',
18
+ // engine-private confs are git-ignored and visited only if present at bump time.
19
+ 'engine-private/conf/**/package.json',
20
+ ],
21
+ commit: false,
22
+ tag: false,
23
+ push: false,
24
+ confirm: false,
25
+ recursive: false,
26
+ };