underpost 3.2.8 → 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 (92) 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 +223 -2
  6. package/CLI-HELP.md +36 -7
  7. package/README.md +38 -9
  8. package/bin/build.js +27 -11
  9. package/bin/deploy.js +20 -21
  10. package/bin/file.js +32 -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 +2 -2
  16. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
  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 +40 -25
  23. package/scripts/k3s-node-setup.sh +30 -11
  24. package/scripts/nat-iptables.sh +103 -18
  25. package/src/api/core/core.router.js +19 -14
  26. package/src/api/core/core.service.js +5 -5
  27. package/src/api/default/default.router.js +22 -18
  28. package/src/api/default/default.service.js +5 -5
  29. package/src/api/document/document.router.js +28 -23
  30. package/src/api/document/document.service.js +100 -23
  31. package/src/api/file/file.router.js +19 -13
  32. package/src/api/file/file.service.js +9 -7
  33. package/src/api/test/test.router.js +17 -12
  34. package/src/api/types.js +24 -0
  35. package/src/api/user/guest.service.js +5 -4
  36. package/src/api/user/user.router.js +297 -288
  37. package/src/api/user/user.service.js +100 -35
  38. package/src/cli/baremetal.js +20 -11
  39. package/src/cli/cluster.js +243 -55
  40. package/src/cli/db.js +106 -62
  41. package/src/cli/deploy.js +297 -154
  42. package/src/cli/fs.js +19 -3
  43. package/src/cli/index.js +37 -9
  44. package/src/cli/ipfs.js +4 -6
  45. package/src/cli/kubectl.js +4 -1
  46. package/src/cli/lxd.js +217 -135
  47. package/src/cli/release.js +289 -131
  48. package/src/cli/repository.js +91 -34
  49. package/src/cli/run.js +297 -56
  50. package/src/cli/test.js +9 -3
  51. package/src/client/Default.index.js +9 -3
  52. package/src/client/components/core/Auth.js +19 -5
  53. package/src/client/components/core/Docs.js +6 -34
  54. package/src/client/components/core/FileExplorer.js +6 -6
  55. package/src/client/components/core/Modal.js +65 -2
  56. package/src/client/components/core/PanelForm.js +56 -52
  57. package/src/client/components/core/Recover.js +4 -4
  58. package/src/client/components/core/Worker.js +170 -350
  59. package/src/client/services/default/default.management.js +20 -25
  60. package/src/client/services/user/guest.service.js +10 -3
  61. package/src/client/sw/core.sw.js +174 -112
  62. package/src/db/DataBaseProvider.js +120 -20
  63. package/src/db/mongo/MongoBootstrap.js +587 -0
  64. package/src/db/mongo/MongooseDB.js +126 -22
  65. package/src/index.js +1 -1
  66. package/src/runtime/express/Express.js +2 -2
  67. package/src/runtime/wp/Wp.js +8 -5
  68. package/src/server/auth.js +2 -2
  69. package/src/server/client-build-docs.js +1 -1
  70. package/src/server/client-build.js +94 -129
  71. package/src/server/conf.js +20 -65
  72. package/src/server/data-query.js +32 -20
  73. package/src/server/dns.js +22 -0
  74. package/src/server/process.js +180 -19
  75. package/src/server/runtime.js +1 -1
  76. package/src/server/start.js +26 -7
  77. package/src/server/valkey.js +9 -2
  78. package/src/ws/IoInterface.js +16 -16
  79. package/src/ws/core/channels/core.ws.chat.js +11 -11
  80. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  81. package/src/ws/core/channels/core.ws.stream.js +19 -19
  82. package/src/ws/core/core.ws.connection.js +8 -8
  83. package/src/ws/core/core.ws.server.js +6 -5
  84. package/src/ws/default/channels/default.ws.main.js +10 -10
  85. package/src/ws/default/default.ws.connection.js +4 -4
  86. package/src/ws/default/default.ws.server.js +4 -3
  87. package/typedoc.json +10 -1
  88. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  89. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  90. /package/src/client/ssr/{offline → views}/Maintenance.js +0 -0
  91. /package/src/client/ssr/{offline → views}/NoNetworkConnection.js +0 -0
  92. /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,10 +1,231 @@
1
1
  # Changelog
2
2
 
3
- ## 2026-05-01
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)
125
+
126
+ ### client-core
127
+
128
+ - Enhance Modal component to support dynamic tooltip positioning and menu collapse behavior ([4c01f4011](https://github.com/underpostnet/engine/commit/4c01f4011b55feeb8d02b52547f5cf376fff6ca0))
129
+ - Add support for pulling pre-built client bundles and skipping full builds during deployment ([7f86db25a](https://github.com/underpostnet/engine/commit/7f86db25a13ede6a0027b63867b30fc9576a9263))
130
+ - Refactor Docs and Modal components to centralize submenu item rendering and improve code organization ([5fdd051e9](https://github.com/underpostnet/engine/commit/5fdd051e923c9adffc2b5261637b9ade88b96fc9))
131
+ - Enhance modal and docs components to improve submenu behavior and animations ([ebf257c38](https://github.com/underpostnet/engine/commit/ebf257c38c12c0f2d66dda681b2f09f97ccfccbc))
132
+ - Defer service worker registration to improve initial load performance in PwaWorker ([88b52b8fc](https://github.com/underpostnet/engine/commit/88b52b8fc0a49642b0530d5dc0b0edfaa5395c9d))
133
+ - Refactor filter clearing logic in DefaultManagement to use runIsolated for better control over grid/query listeners ([325f6bd66](https://github.com/underpostnet/engine/commit/325f6bd66bb381adec15feb12b0bd0ba8fa539e7))
134
+ - Fix LoadFileActionsRenderer and LoadFolderActionsRenderer to use instance methods for GUI management ([9e6507a0c](https://github.com/underpostnet/engine/commit/9e6507a0ccc667433b9cac6a1cc645ecf6d4e7b3))
135
+ - Fix disable functions to use instance method for visibility checks ([7f5701c8d](https://github.com/underpostnet/engine/commit/7f5701c8df74bc6576894d8b5f7655b64cc6797a))
136
+
137
+ ### cli-run
138
+
139
+ - Enhance promote method to support TLS configuration for blue/green deployments ([a31185676](https://github.com/underpostnet/engine/commit/a31185676cef0ca639621c722df31114a2b172a1))
140
+ - Add CRI-O installation and configuration methods for kubeadm clusters ([44743552e](https://github.com/underpostnet/engine/commit/44743552ee5e2bcd13c157ab4e30e9dfc15979f6))
141
+
142
+ ### cli-cluster
143
+
144
+ - Enhance nat-iptables.sh for comprehensive Kubernetes firewall configuration and service exposure ([9087a946a](https://github.com/underpostnet/engine/commit/9087a946ab29526e63d5f87b389f1ad500f30d78))
145
+
146
+ ### cli-dns
147
+
148
+ - Add MAC address retrieval option to CLI and implement corresponding method in DNS class ([52b319467](https://github.com/underpostnet/engine/commit/52b3194674419624d99835dfe63699ab30683bfb))
149
+
150
+ ### engine
151
+
152
+ - Update Node.js version to 24.15.0 in setup scripts and documentation ([e05a472ca](https://github.com/underpostnet/engine/commit/e05a472cae67429321b7e1b3c601e0965d3e7b67))
153
+
154
+ ### scripts
155
+
156
+ - Enable firewalld and configure persistent IP forwarding in nat-iptables.sh ([845a09791](https://github.com/underpostnet/engine/commit/845a09791187613b512f95cea12bc3b0a53dd13f))
157
+
158
+ ### cli-fs
159
+
160
+ - Enhance UnderpostFileStorage and UnderpostRepository with additional options and methods for improved Git operations ([a812d4e66](https://github.com/underpostnet/engine/commit/a812d4e666edd2cd17c9cafc34dfdc44e5bab994))
161
+
162
+ ### server-valkey
163
+
164
+ - Enhance Valkey connection handling with reconnecting status and improved retry strategy ([50b26c215](https://github.com/underpostnet/engine/commit/50b26c2155c7160a9e4704aadb8c74554c7d81bd))
165
+
166
+ ### bin-build
167
+
168
+ - Remove unnecessary copy docs md in cyberia build repo workdlow ([50a5399f6](https://github.com/underpostnet/engine/commit/50a5399f6d3b72dd7dc00092294b425f7ba618b4))
169
+
170
+ ### package
171
+
172
+ - Update dependencies for @protobufjs packages and fast-uri ([829026a8c](https://github.com/underpostnet/engine/commit/829026a8c685e5714a48bd2fb636c13b0419d818))
173
+ - Add peer dependency flag to multiple packages in package-lock.json ([c2a7870eb](https://github.com/underpostnet/engine/commit/c2a7870eb75cc44af4966a2dcb898a08e9dfe84e))
174
+
175
+ ### docs
176
+
177
+ - Refactor entryPoints in typedoc configuration files for improved readability and consistency ([fe77bcf3f](https://github.com/underpostnet/engine/commit/fe77bcf3fb17766be2d9af31bd57d6c2481b7f87))
178
+
179
+ ### engine-cyberia
180
+
181
+ - Update README path in typedoc configuration to point to ARCHITECTURE.md ([74ee0e45e](https://github.com/underpostnet/engine/commit/74ee0e45e355472d4f21eb8795b76c79c84c43e6))
182
+ - Add cyberia-docs path to build and file scripts for documentation inclusion ([851e126bf](https://github.com/underpostnet/engine/commit/851e126bf80b9427661b6477d3bf8f52462cec87))
183
+ - Remove unique constraint from code field in CyberiaQuestSchema ([b39aa3a7b](https://github.com/underpostnet/engine/commit/b39aa3a7b162b7dd230301f7eaf0747687c1c1b4))
184
+ - Rewrite and centralize cyberia docs source ([00e40986a](https://github.com/underpostnet/engine/commit/00e40986a51b87c9f5f0354479c77f841a1b9221))
185
+ - Remove legacy cyberia docs ([a5546128a](https://github.com/underpostnet/engine/commit/a5546128a20945645fe3008f5c98f01772ff055f))
186
+ - Refactor Cyberia schemas and update quest/action definitions for clarity and consistency ([cd7313206](https://github.com/underpostnet/engine/commit/cd7313206903035232da6f842f13475e8af77346))
187
+ - Add source map coordinates to CyberiaQuest schema and update action catalog metadata, and remove lefacy seed runners in cyberia CLI ([b39958485](https://github.com/underpostnet/engine/commit/b3995848556c87def6ff1045c73605c50201a1a3))
188
+ - Refactor CyberiaActionSchema by removing grantQuestCode field and update description in STATUS_ICONS for clarity ([221a8f072](https://github.com/underpostnet/engine/commit/221a8f072393238adf83c26c46d09fe05aa24466))
189
+ - Add seeding commands for Cyberia actions and quests, update schemas and default data structures ([70cd5f17d](https://github.com/underpostnet/engine/commit/70cd5f17d08eb1d6c812d7428b8a5a6c76d72728))
190
+ - Refactor Cyberia schemas to enhance action and quest structures, replacing itemId with more descriptive fields and adding new properties for better data management ([8736f2bac](https://github.com/underpostnet/engine/commit/8736f2bac3534180d798ea2ae2e6aac9781db9c2))
191
+ - Refactor Cyberia dialogue handling to use 'code' instead of 'itemId' for dialogue retrieval and update related schemas and data structures ([d8d50325e](https://github.com/underpostnet/engine/commit/d8d50325e2fbe8a118edde7e9bd7fb01d1507233))
192
+ - Update CyberiaActionSchema to correct action types and add storage payload structure ([88b68cb68](https://github.com/underpostnet/engine/commit/88b68cb6839900230ffb54fa44f6b11056aca5c0))
193
+ - Add Cyberia action and quest default data structures with schemas ([8171b6b43](https://github.com/underpostnet/engine/commit/8171b6b43b2aee98f0d8fe0151362493b09fdfd5))
194
+ - Implement Cyberia Quest and Progress APIs with controllers, services, models, and routers ([ba3c7bcb0](https://github.com/underpostnet/engine/commit/ba3c7bcb05f79f3999ec0f20daf49d4f02a2c9e2))
195
+
196
+ ### github-actions
197
+
198
+ - Remove run metadata worflow in engine-core sync deploy ([84d684d4b](https://github.com/underpostnet/engine/commit/84d684d4bf694605c67bf521617d60920ea43205))
199
+ - Increase timeout for sync command in engine lampp workflow ([949d693b5](https://github.com/underpostnet/engine/commit/949d693b5d4aaa28226b0417c2e2b87511eec885))
200
+ - Remove ssh-deploy sync-engine-test command from release deployment workflow ([0e6cf3af4](https://github.com/underpostnet/engine/commit/0e6cf3af48a2e0e904dd2e646a66931cf0cea784))
201
+
202
+ ### clien-core
203
+
204
+ - Optimize sessionOut and guest login process to skip unnecessary network calls ([b16a21fe3](https://github.com/underpostnet/engine/commit/b16a21fe3ce12d6c3c636677b06e1fa064500b6c))
205
+
206
+ ### cli-db
207
+
208
+ - Add export success tracking and enforce backup retention in UnderpostDB ([678ed675f](https://github.com/underpostnet/engine/commit/678ed675ff51ae681b6177c34ba1295543f5a916))
209
+
210
+ ### api-cyberia
211
+
212
+ - Remove CyberiaAchievement API controller, service, and router files to streamline codebase ([f5f31700f](https://github.com/underpostnet/engine/commit/f5f31700fed2940a475149ed0a948eae548c78e2))
213
+
214
+ ### runtime-cyberia-client
215
+
216
+ - Refactor cyberia-client Dockerfile to streamline package installations and improve build process ([66edc28c1](https://github.com/underpostnet/engine/commit/66edc28c1c3877bbf1d1ad0bdb8dbe259746f18d))
217
+
218
+ ### server-data-query
219
+
220
+ - Refactor DataQuery to use class syntax and static methods for improved structure and clarity ([b27221124](https://github.com/underpostnet/engine/commit/b27221124d096a046141d87fbc37de951c58aa92))
221
+
222
+ ### engine-core
223
+
224
+ - Fix rename AppointmentFormHealthcare to AppointmentFormHealthCare for consistency ([02839072b](https://github.com/underpostnet/engine/commit/02839072b6aaa77d7f524934a8ab92a24d4d5040))
4
225
 
5
226
  ### cli-release
6
227
 
7
- - Update workflows to reflect new underpost image versions ([9a5577cba](https://github.com/underpostnet/engine/commit/9a5577cba856b2666e6ac023a9a319782301891d))
228
+ - Update workflows to reflect new underpost image versions ([f5e18de0c](https://github.com/underpostnet/engine/commit/f5e18de0c9209fb6da2254a8dca94e8ef37ae394))
8
229
 
9
230
  ## New release v:3.2.8 (2026-05-01)
10
231
 
package/CLI-HELP.md CHANGED
@@ -1,4 +1,4 @@
1
- ## underpost ci/cd cli v3.2.8
1
+ ## underpost ci/cd cli v3.2.10
2
2
 
3
3
  ### Usage: `underpost [options] [command]`
4
4
  ```
@@ -137,6 +137,10 @@ Options:
137
137
  workspace code directly.
138
138
  --skip-full-build Skips the full client bundle build during
139
139
  deployment.
140
+ --pull-bundle Downloads the pre-built client bundle from
141
+ Cloudinary via pull-bundle before starting. Use
142
+ together with --skip-full-build to skip the local
143
+ build entirely.
140
144
  -h, --help display help for command
141
145
 
142
146
  ```
@@ -389,6 +393,7 @@ Options:
389
393
  lists.
390
394
  --ban-both-remove Removes IP addresses from both banned ingress and egress
391
395
  lists.
396
+ --mac Prints the MAC address of the main network interface.
392
397
  -h, --help display help for command
393
398
 
394
399
  ```
@@ -407,6 +412,10 @@ Arguments:
407
412
  Options:
408
413
  --reset Deletes all clusters and prunes all
409
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.
410
419
  --mariadb Initializes the cluster with a MariaDB
411
420
  statefulset.
412
421
  --mysql Initializes the cluster with a MySQL
@@ -553,6 +562,18 @@ Options:
553
562
  auto-detected service port).
554
563
  --cmd <cmd> Custom initialization command for
555
564
  deployment (comma-separated commands).
565
+ --skip-full-build Skip client bundle rebuild; container will
566
+ pull pre-built bundle via pull-bundle
567
+ instead.
568
+ --pull-bundle Explicitly pull the pre-built client
569
+ bundle from Cloudinary inside the
570
+ container. Use together with
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.
556
577
  -h, --help display help for command
557
578
 
558
579
  ```
@@ -891,7 +912,7 @@ Options:
891
912
  Runs specified scripts using various runners.
892
913
 
893
914
  Arguments:
894
- 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,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.
895
916
  path The input value, identifier, or path for the operation.
896
917
 
897
918
  Options:
@@ -959,6 +980,8 @@ Options:
959
980
  --create-job-now After applying cron manifests, immediately create a Job from each CronJob (forwarded to cron runner).
960
981
  --host-aliases <host-aliases> Adds entries to the Pod /etc/hosts via hostAliases. Format: semicolon-separated entries of "ip=hostname1,hostname2" (e.g., "127.0.0.1=foo.local,bar.local;10.1.2.3=foo.remote,bar.remote").
961
982
  --copy Copies the runner output to the clipboard (supported by: generate-pass, template-deploy-local).
983
+ --skip-full-build Skip client bundle rebuild; triggers pull-bundle in container startup (supported by: sync, template-deploy).
984
+ --pull-bundle Explicitly download the pre-built client bundle from Cloudinary inside the container (supported by: sync, template-deploy). Use together with --skip-full-build.
962
985
  -h, --help display help for command
963
986
 
964
987
  ```
@@ -973,7 +996,9 @@ Manages LXD virtual machines as K3s nodes (control plane or workers).
973
996
  Options:
974
997
  --init Initializes LXD on the current machine via
975
998
  preseed.
976
- --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.
977
1002
  --install Installs the LXD snap.
978
1003
  --dev Use local paths instead of the global npm
979
1004
  installation.
@@ -987,7 +1012,9 @@ Options:
987
1012
  node.
988
1013
  --create-vm <vm-name> Copy the LXC launch command for a new K3s VM
989
1014
  to the clipboard.
990
- --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.
991
1018
  --init-vm <vm-name> Run k3s-node-setup.sh on the specified VM
992
1019
  (use with --control or --worker).
993
1020
  --info-vm <vm-name> Display full configuration and status for the
@@ -1004,9 +1031,8 @@ Options:
1004
1031
  "k3s-control:80,443").
1005
1032
  --delete-expose <vm-name:ports> Remove proxied ports from a VM (e.g.,
1006
1033
  "k3s-control:80,443").
1007
- --workflow-id <workflow-id> Workflow ID to execute via runWorkflow.
1008
- --vm-id <vm-name> Target VM name for workflow execution.
1009
- --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.
1010
1036
  --namespace <namespace> Kubernetes namespace context (defaults to
1011
1037
  "default").
1012
1038
  -h, --help display help for command
@@ -1098,6 +1124,9 @@ Options:
1098
1124
  --pwa-build Runs the pwa-microservices-template update flow: always
1099
1125
  re-clones, syncs engine sources, installs, builds, and
1100
1126
  pushes.
1127
+ --dry-run For --build: previews version-bump changes (per-file
1128
+ substitution counts) without writing files or running
1129
+ downstream commands.
1101
1130
  -h, --help display help for command
1102
1131
 
1103
1132
  ```
package/README.md CHANGED
@@ -10,23 +10,52 @@
10
10
 
11
11
  <div align="center">
12
12
 
13
- <a target="_top" href='https://download.rockylinux.org/pub/rocky/9/'><img alt='rockylinux' src='https://img.shields.io/badge/Rocky Linux v9.6-100000?style=flat&logo=rockylinux&logoColor=white&labelColor=10b981&color=727273'/></a> <a target="_top" href='https://www.npmjs.com/package/npm?activeTab=versions'><img alt='npm' src='https://img.shields.io/badge/npm v11.6.2-100000?style=flat&logo=npm&logoColor=white&labelColor=CB3837&color=727273'/></a> <a target="_top" href='https://nodejs.org/download/release'><img alt='nodedotjs' src='https://img.shields.io/badge/node v24.10.0-100000?style=flat&logo=nodedotjs&logoColor=white&labelColor=5FA04E&color=727273'/></a> <a target="_top" href='https://pgp.mongodb.com/'><img alt='mongodb' src='https://img.shields.io/badge/mongodb_server v7.0-100000?style=flat&logo=mongodb&logoColor=white&labelColor=47A248&color=727273'/></a>
13
+ <a target="_top" href='https://download.rockylinux.org/pub/rocky/9/'><img alt='rockylinux' src='https://img.shields.io/badge/Rocky Linux v9.6-100000?style=flat&logo=rockylinux&logoColor=white&labelColor=10b981&color=727273'/></a> <a target="_top" href='https://www.npmjs.com/package/npm?activeTab=versions'><img alt='npm' src='https://img.shields.io/badge/npm v11.6.2-100000?style=flat&logo=npm&logoColor=white&labelColor=CB3837&color=727273'/></a> <a target="_top" href='https://nodejs.org/download/release'><img alt='nodedotjs' src='https://img.shields.io/badge/node v24.15.0-100000?style=flat&logo=nodedotjs&logoColor=white&labelColor=5FA04E&color=727273'/></a> <a target="_top" href='https://pgp.mongodb.com/'><img alt='mongodb' src='https://img.shields.io/badge/mongodb_server v7.0-100000?style=flat&logo=mongodb&logoColor=white&labelColor=47A248&color=727273'/></a>
14
14
 
15
15
  </div>
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.8)](https://socket.dev/npm/package/underpost/overview/3.2.8) [![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.8
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,25 +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');
183
- fs.copyFileSync(`./src/api/object-layer/README.md`, `${basePath}/README.md`);
194
+ fs.writeFileSync(
195
+ `${basePath}/README.md`,
196
+ fs.readFileSync(`./src/client/public/cyberia-docs/CYBERIA-CLI.md`, 'utf8'),
197
+ 'utf8',
198
+ );
184
199
  fs.copySync(`./hardhat`, `${basePath}/hardhat`);
185
- fs.copySync(`./hardhat/WHITE-PAPER.md`, `${basePath}/WHITE-PAPER.md`);
186
200
  for (const path of [
187
201
  '/src/grpc/cyberia',
188
- '/src/client/ssr/pages/CyberiaServerMetrics.js',
202
+ '/src/client/ssr/views/CyberiaServerMetrics.js',
189
203
  '/src/server/object-layer.js',
190
204
  '/src/server/atlas-sprite-sheet-generator.js',
191
205
  '/src/server/shape-generator.js',
@@ -198,6 +212,8 @@ const { DefaultConf } = await import(`../conf.${confName}.js`);
198
212
  '/src/runtime/cyberia-server',
199
213
  '/src/runtime/cyberia-client',
200
214
  '/.github/workflows/hardhat.ci.yml',
215
+ '/src/client/public/cyberia-docs',
216
+ '/src/api/cyberia-server-defaults'
201
217
  ])
202
218
  fs.copySync(`.${path}`, `${basePath}${path}`);
203
219