cyberia 3.2.5 → 3.2.12

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 (381) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +8 -2
  2. package/.github/workflows/npmpkg.ci.yml +1 -0
  3. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  4. package/.github/workflows/release.cd.yml +2 -2
  5. package/.vscode/extensions.json +9 -9
  6. package/.vscode/settings.json +20 -4
  7. package/CHANGELOG.md +563 -1
  8. package/CLI-HELP.md +130 -34
  9. package/Dockerfile +0 -4
  10. package/README.md +194 -607
  11. package/bin/build.js +42 -12
  12. package/bin/build.template.js +187 -0
  13. package/bin/cyberia.js +1367 -281
  14. package/bin/deploy.js +582 -3
  15. package/bin/index.js +1367 -281
  16. package/bump.config.js +26 -0
  17. package/conf.js +195 -111
  18. package/deployment.yaml +6 -222
  19. package/hardhat/package-lock.json +118 -149
  20. package/hardhat/package.json +5 -4
  21. package/jsconfig.json +1 -1
  22. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
  23. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
  24. package/manifests/deployment/dd-cyberia-development/deployment.yaml +6 -222
  25. package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
  26. package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
  27. package/manifests/deployment/dd-test-development/deployment.yaml +138 -66
  28. package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
  29. package/manifests/kind-config-dev.yaml +8 -0
  30. package/manifests/lxd/lxd-admin-profile.yaml +12 -3
  31. package/manifests/mongodb/pv-pvc.yaml +44 -8
  32. package/manifests/mongodb/statefulset.yaml +55 -68
  33. package/manifests/mongodb-4.4/headless-service.yaml +10 -0
  34. package/manifests/mongodb-4.4/kustomization.yaml +3 -1
  35. package/manifests/mongodb-4.4/mongodb-nodeport.yaml +17 -0
  36. package/manifests/mongodb-4.4/pv-pvc.yaml +10 -14
  37. package/manifests/mongodb-4.4/statefulset.yaml +79 -0
  38. package/manifests/mongodb-4.4/storage-class.yaml +9 -0
  39. package/manifests/valkey/statefulset.yaml +1 -1
  40. package/manifests/valkey/valkey-nodeport.yaml +17 -0
  41. package/package.json +45 -24
  42. package/proxy.yaml +10 -118
  43. package/scripts/ipxe-setup.sh +52 -49
  44. package/scripts/k3s-node-setup.sh +83 -48
  45. package/scripts/lxd-vm-setup.sh +193 -8
  46. package/scripts/maas-nat-firewalld.sh +145 -0
  47. package/scripts/nat-iptables.sh +103 -18
  48. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
  49. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
  50. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +38 -33
  51. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +91 -36
  52. package/src/api/core/core.controller.js +10 -10
  53. package/src/api/core/core.router.js +19 -14
  54. package/src/api/core/core.service.js +15 -15
  55. package/src/api/crypto/crypto.controller.js +8 -8
  56. package/src/api/crypto/crypto.router.js +18 -12
  57. package/src/api/crypto/crypto.service.js +11 -11
  58. package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
  59. package/src/api/cyberia-action/cyberia-action.model.js +87 -0
  60. package/src/api/cyberia-action/cyberia-action.router.js +31 -0
  61. package/src/api/cyberia-action/cyberia-action.service.js +42 -0
  62. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +74 -0
  63. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +99 -0
  64. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +98 -0
  65. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +152 -0
  66. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
  67. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
  68. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +25 -20
  69. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +22 -22
  70. package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
  71. package/src/api/cyberia-entity/cyberia-entity.router.js +22 -18
  72. package/src/api/cyberia-entity/cyberia-entity.service.js +15 -15
  73. package/src/api/cyberia-instance/cyberia-fallback-world.js +83 -198
  74. package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
  75. package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
  76. package/src/api/cyberia-instance/cyberia-instance.router.js +57 -52
  77. package/src/api/cyberia-instance/cyberia-instance.service.js +32 -67
  78. package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
  79. package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
  80. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
  81. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +18 -49
  82. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +22 -18
  83. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +19 -15
  84. package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
  85. package/src/api/cyberia-map/cyberia-map.router.js +35 -30
  86. package/src/api/cyberia-map/cyberia-map.service.js +17 -17
  87. package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
  88. package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
  89. package/src/api/cyberia-quest/cyberia-quest.router.js +31 -0
  90. package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
  91. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
  92. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
  93. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +31 -0
  94. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
  95. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +451 -0
  96. package/src/api/default/default.controller.js +10 -10
  97. package/src/api/default/default.router.js +22 -18
  98. package/src/api/default/default.service.js +15 -15
  99. package/src/api/document/document.controller.js +12 -12
  100. package/src/api/document/document.model.js +10 -16
  101. package/src/api/document/document.router.js +28 -23
  102. package/src/api/document/document.service.js +100 -23
  103. package/src/api/file/file.controller.js +8 -8
  104. package/src/api/file/file.model.js +10 -10
  105. package/src/api/file/file.router.js +19 -13
  106. package/src/api/file/file.service.js +45 -43
  107. package/src/api/instance/instance.controller.js +10 -10
  108. package/src/api/instance/instance.model.js +4 -10
  109. package/src/api/instance/instance.router.js +29 -24
  110. package/src/api/instance/instance.service.js +16 -16
  111. package/src/api/ipfs/ipfs.controller.js +12 -12
  112. package/src/api/ipfs/ipfs.model.js +4 -13
  113. package/src/api/ipfs/ipfs.router.js +21 -16
  114. package/src/api/ipfs/ipfs.service.js +22 -36
  115. package/src/api/object-layer/object-layer.controller.js +12 -12
  116. package/src/api/object-layer/object-layer.model.js +4 -17
  117. package/src/api/object-layer/object-layer.router.js +512 -507
  118. package/src/api/object-layer/object-layer.service.js +29 -26
  119. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
  120. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
  121. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +22 -18
  122. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +19 -15
  123. package/src/api/test/test.controller.js +8 -8
  124. package/src/api/test/test.router.js +17 -12
  125. package/src/api/test/test.service.js +8 -8
  126. package/src/api/types.js +24 -0
  127. package/src/api/user/guest.service.js +100 -0
  128. package/src/api/user/user.controller.js +6 -6
  129. package/src/api/user/user.model.js +8 -13
  130. package/src/api/user/user.router.js +297 -288
  131. package/src/api/user/user.service.js +103 -55
  132. package/src/cli/baremetal.js +132 -101
  133. package/src/cli/cluster.js +732 -217
  134. package/src/cli/db.js +106 -62
  135. package/src/cli/deploy.js +260 -149
  136. package/src/cli/fs.js +90 -9
  137. package/src/cli/image.js +43 -1
  138. package/src/cli/index.js +106 -16
  139. package/src/cli/ipfs.js +4 -6
  140. package/src/cli/kubectl.js +4 -1
  141. package/src/cli/lxd.js +1099 -223
  142. package/src/cli/monitor.js +9 -3
  143. package/src/cli/release.js +336 -86
  144. package/src/cli/repository.js +136 -53
  145. package/src/cli/run.js +599 -76
  146. package/src/cli/secrets.js +11 -2
  147. package/src/cli/ssh.js +1 -1
  148. package/src/cli/static.js +43 -115
  149. package/src/cli/test.js +9 -3
  150. package/src/client/Cryptokoyn.index.js +18 -21
  151. package/src/client/CyberiaPortal.index.js +19 -23
  152. package/src/client/Default.index.js +30 -36
  153. package/src/client/Itemledger.index.js +20 -26
  154. package/src/client/Underpost.index.js +19 -23
  155. package/src/client/components/core/404.js +4 -4
  156. package/src/client/components/core/500.js +4 -4
  157. package/src/client/components/core/Account.js +73 -60
  158. package/src/client/components/core/AgGrid.js +23 -33
  159. package/src/client/components/core/Alert.js +12 -13
  160. package/src/client/components/core/AppStore.js +1 -1
  161. package/src/client/components/core/Auth.js +40 -37
  162. package/src/client/components/core/Badge.js +7 -13
  163. package/src/client/components/core/BtnIcon.js +15 -17
  164. package/src/client/components/core/CalendarCore.js +42 -63
  165. package/src/client/components/core/Chat.js +13 -15
  166. package/src/client/components/core/ClientEvents.js +163 -0
  167. package/src/client/components/core/ColorPaletteElement.js +309 -0
  168. package/src/client/components/core/Content.js +17 -14
  169. package/src/client/components/core/Css.js +15 -71
  170. package/src/client/components/core/CssCore.js +12 -16
  171. package/src/client/components/core/D3Chart.js +4 -4
  172. package/src/client/components/core/Docs.js +64 -91
  173. package/src/client/components/core/DropDown.js +69 -91
  174. package/src/client/components/core/EventBus.js +96 -0
  175. package/src/client/components/core/EventsUI.js +14 -17
  176. package/src/client/components/core/FileExplorer.js +96 -228
  177. package/src/client/components/core/FullScreen.js +47 -75
  178. package/src/client/components/core/Input.js +24 -69
  179. package/src/client/components/core/Keyboard.js +25 -18
  180. package/src/client/components/core/KeyboardAvoidance.js +145 -0
  181. package/src/client/components/core/LoadingAnimation.js +25 -31
  182. package/src/client/components/core/LogIn.js +41 -41
  183. package/src/client/components/core/LogOut.js +23 -14
  184. package/src/client/components/core/Modal.js +544 -219
  185. package/src/client/components/core/NotificationManager.js +14 -18
  186. package/src/client/components/core/Panel.js +54 -50
  187. package/src/client/components/core/PanelForm.js +81 -177
  188. package/src/client/components/core/Polyhedron.js +110 -214
  189. package/src/client/components/core/PublicProfile.js +39 -32
  190. package/src/client/components/core/Recover.js +48 -44
  191. package/src/client/components/core/Responsive.js +88 -32
  192. package/src/client/components/core/RichText.js +9 -18
  193. package/src/client/components/core/Router.js +24 -3
  194. package/src/client/components/core/SearchBox.js +37 -37
  195. package/src/client/components/core/SignUp.js +39 -30
  196. package/src/client/components/core/SocketIo.js +31 -2
  197. package/src/client/components/core/SocketIoHandler.js +6 -6
  198. package/src/client/components/core/ToggleSwitch.js +8 -20
  199. package/src/client/components/core/ToolTip.js +5 -17
  200. package/src/client/components/core/Translate.js +56 -59
  201. package/src/client/components/core/Validator.js +26 -16
  202. package/src/client/components/core/Wallet.js +15 -26
  203. package/src/client/components/core/Worker.js +211 -276
  204. package/src/client/components/core/windowGetDimensions.js +7 -7
  205. package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
  206. package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
  207. package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
  208. package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
  209. package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
  210. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
  211. package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
  212. package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
  213. package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
  214. package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
  215. package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
  216. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
  217. package/src/client/components/cyberia/SharedDefaultsCyberia.js +330 -0
  218. package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
  219. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
  220. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
  221. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
  222. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
  223. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
  224. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
  225. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
  226. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
  227. package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
  228. package/src/client/components/default/CssDefault.js +12 -12
  229. package/src/client/components/default/LogInDefault.js +6 -4
  230. package/src/client/components/default/LogOutDefault.js +6 -4
  231. package/src/client/components/default/RouterDefault.js +47 -0
  232. package/src/client/components/default/SettingsDefault.js +4 -4
  233. package/src/client/components/default/SignUpDefault.js +6 -4
  234. package/src/client/components/default/TranslateDefault.js +3 -3
  235. package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
  236. package/src/client/components/itemledger/CssItemledger.js +15 -15
  237. package/src/client/components/itemledger/LogInItemledger.js +6 -4
  238. package/src/client/components/itemledger/LogOutItemledger.js +6 -4
  239. package/src/client/components/itemledger/RouterItemledger.js +38 -0
  240. package/src/client/components/itemledger/SettingsItemledger.js +4 -4
  241. package/src/client/components/itemledger/SignUpItemledger.js +6 -4
  242. package/src/client/components/itemledger/TranslateItemledger.js +3 -3
  243. package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
  244. package/src/client/components/underpost/CssUnderpost.js +14 -14
  245. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
  246. package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
  247. package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
  248. package/src/client/components/underpost/LogInUnderpost.js +6 -4
  249. package/src/client/components/underpost/LogOutUnderpost.js +6 -4
  250. package/src/client/components/underpost/RouterUnderpost.js +45 -0
  251. package/src/client/components/underpost/SettingsUnderpost.js +4 -4
  252. package/src/client/components/underpost/SignUpUnderpost.js +6 -4
  253. package/src/client/components/underpost/TranslateUnderpost.js +4 -4
  254. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
  255. package/src/client/public/cyberia-docs/ARCHITECTURE.md +83 -0
  256. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +204 -0
  257. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +291 -0
  258. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +278 -0
  259. package/src/client/public/cyberia-docs/CYBERIA.md +259 -0
  260. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
  261. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
  262. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
  263. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
  264. package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
  265. package/src/client/public/cyberia-docs/UNDERPOST-PLATFORM.md +106 -0
  266. package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
  267. package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
  268. package/src/client/services/core/core.service.js +17 -49
  269. package/src/client/services/crypto/crypto.service.js +8 -13
  270. package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
  271. package/src/client/services/cyberia-client-hints/cyberia-client-hints.service.js +99 -0
  272. package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
  273. package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
  274. package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
  275. package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
  276. package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
  277. package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
  278. package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
  279. package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
  280. package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
  281. package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
  282. package/src/client/services/default/default.management.js +159 -267
  283. package/src/client/services/default/default.service.js +10 -16
  284. package/src/client/services/document/document.service.js +14 -19
  285. package/src/client/services/file/file.service.js +8 -13
  286. package/src/client/services/instance/instance.management.js +5 -5
  287. package/src/client/services/instance/instance.service.js +10 -15
  288. package/src/client/services/ipfs/ipfs.service.js +12 -18
  289. package/src/client/services/object-layer/object-layer.management.js +12 -12
  290. package/src/client/services/object-layer/object-layer.service.js +20 -26
  291. package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
  292. package/src/client/services/test/test.service.js +8 -13
  293. package/src/client/services/user/guest.service.js +86 -0
  294. package/src/client/services/user/user.management.js +5 -5
  295. package/src/client/services/user/user.service.js +14 -20
  296. package/src/client/ssr/body/404.js +3 -3
  297. package/src/client/ssr/body/500.js +3 -3
  298. package/src/client/ssr/body/CacheControl.js +5 -2
  299. package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
  300. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
  301. package/src/client/ssr/head/PwaItemledger.js +197 -60
  302. package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
  303. package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
  304. package/src/client/ssr/views/CyberiaServerMetrics.js +982 -0
  305. package/src/client/ssr/{offline → views}/Maintenance.js +12 -11
  306. package/src/client/ssr/{offline → views}/NoNetworkConnection.js +3 -3
  307. package/src/client/ssr/{pages → views}/Test.js +2 -2
  308. package/src/client/sw/core.sw.js +274 -0
  309. package/src/db/DataBaseProvider.js +115 -15
  310. package/src/db/mariadb/MariaDB.js +2 -1
  311. package/src/db/mongo/MongoBootstrap.js +657 -0
  312. package/src/db/mongo/MongooseDB.js +129 -21
  313. package/src/grpc/cyberia/grpc-server.js +185 -105
  314. package/src/index.js +1 -1
  315. package/src/runtime/cyberia-client/Dockerfile +101 -0
  316. package/src/runtime/cyberia-client/Dockerfile.dev +82 -0
  317. package/src/runtime/cyberia-server/Dockerfile +62 -0
  318. package/src/runtime/cyberia-server/Dockerfile.dev +71 -0
  319. package/src/runtime/express/Dockerfile +4 -4
  320. package/src/runtime/express/Express.js +2 -2
  321. package/src/runtime/lampp/Dockerfile +8 -7
  322. package/src/runtime/wp/Dockerfile +11 -17
  323. package/src/runtime/wp/Wp.js +8 -5
  324. package/src/server/atlas-sprite-sheet-generator.js +4 -2
  325. package/src/server/auth.js +2 -2
  326. package/src/server/client-build-docs.js +46 -47
  327. package/src/server/client-build.js +371 -132
  328. package/src/server/client-formatted.js +47 -16
  329. package/src/server/conf.js +91 -87
  330. package/src/server/data-query.js +32 -20
  331. package/src/server/dns.js +22 -0
  332. package/src/server/ipfs-client.js +232 -91
  333. package/src/server/object-layer.js +1 -6
  334. package/src/server/process.js +192 -45
  335. package/src/server/proxy.js +9 -2
  336. package/src/server/runtime.js +1 -1
  337. package/src/server/semantic-layer-generator-floor.js +11 -51
  338. package/src/server/semantic-layer-generator-resource.js +259 -0
  339. package/src/server/semantic-layer-generator-skin.js +41 -171
  340. package/src/server/semantic-layer-generator.js +122 -14
  341. package/src/server/shape-generator.js +108 -0
  342. package/src/server/start.js +34 -8
  343. package/src/server/valkey.js +143 -235
  344. package/src/ws/IoInterface.js +16 -16
  345. package/src/ws/core/channels/core.ws.chat.js +11 -11
  346. package/src/ws/core/channels/core.ws.mailer.js +29 -29
  347. package/src/ws/core/channels/core.ws.stream.js +19 -19
  348. package/src/ws/core/core.ws.connection.js +8 -8
  349. package/src/ws/core/core.ws.server.js +6 -5
  350. package/src/ws/default/channels/default.ws.main.js +10 -10
  351. package/src/ws/default/default.ws.connection.js +4 -4
  352. package/src/ws/default/default.ws.server.js +4 -3
  353. package/tsconfig.docs.json +15 -0
  354. package/typedoc.dd-cyberia.json +29 -0
  355. package/typedoc.json +29 -0
  356. package/WHITE-PAPER.md +0 -1540
  357. package/bin/file.js +0 -196
  358. package/bin/vs.js +0 -74
  359. package/bin/zed.js +0 -84
  360. package/hardhat/README.md +0 -531
  361. package/hardhat/WHITE-PAPER.md +0 -1540
  362. package/jsdoc.dd-cyberia.json +0 -68
  363. package/jsdoc.json +0 -68
  364. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +0 -413
  365. package/src/api/object-layer/README.md +0 -672
  366. package/src/client/components/core/ColorPalette.js +0 -5267
  367. package/src/client/components/core/JoyStick.js +0 -80
  368. package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
  369. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +0 -223
  370. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
  371. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
  372. package/src/client/components/default/RoutesDefault.js +0 -49
  373. package/src/client/components/itemledger/RoutesItemledger.js +0 -40
  374. package/src/client/components/underpost/RoutesUnderpost.js +0 -47
  375. package/src/client/ssr/email/DefaultRecoverEmail.js +0 -21
  376. package/src/client/ssr/email/DefaultVerifyEmail.js +0 -17
  377. package/src/client/ssr/pages/CyberiaServerMetrics.js +0 -461
  378. package/src/client/sw/default.sw.js +0 -127
  379. package/src/client/sw/template.sw.js +0 -84
  380. package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
  381. package/src/grpc/cyberia/README.md +0 -326
@@ -4,7 +4,13 @@
4
4
  * @namespace UnderpostMonitor
5
5
  */
6
6
 
7
- import { loadReplicas, pathPortAssignmentFactory, loadConfServerJson, loadCronDeployEnv } from '../server/conf.js';
7
+ import {
8
+ loadReplicas,
9
+ pathPortAssignmentFactory,
10
+ loadConfServerJson,
11
+ loadCronDeployEnv,
12
+ etcHostFactory,
13
+ } from '../server/conf.js';
8
14
  import { loggerFactory } from '../server/logger.js';
9
15
  import axios from 'axios';
10
16
  import fs from 'fs-extra';
@@ -144,7 +150,7 @@ class UnderpostMonitor {
144
150
  if (path.match('peer') || path.match('socket')) continue;
145
151
  const urlTest = `http${env === 'development' ? '' : 's'}://${host}${path}`;
146
152
  if (env === 'development') {
147
- const { renderHosts } = Underpost.deploy.etcHostFactory([host]);
153
+ const { renderHosts } = etcHostFactory([host]);
148
154
  logger.info('renderHosts', renderHosts);
149
155
  }
150
156
  await axios.get(urlTest, { timeout: 10000 }).catch((error) => {
@@ -200,7 +206,7 @@ class UnderpostMonitor {
200
206
  let monitorPodName;
201
207
  const monitorCallBack = (resolve, reject) => {
202
208
  if (env === 'development') {
203
- const { renderHosts } = Underpost.deploy.etcHostFactory([]);
209
+ const { renderHosts } = etcHostFactory([]);
204
210
  logger.info('renderHosts', renderHosts);
205
211
  }
206
212
  const envMsTimeout = Underpost.env.get(`${deployId}-${env}-monitor-ms`);
@@ -10,26 +10,297 @@
10
10
  */
11
11
 
12
12
  import fs from 'fs-extra';
13
+ import path from 'path';
13
14
  import dotenv from 'dotenv';
14
15
  import { pbcopy, shellCd, shellExec } from '../server/process.js';
16
+ import { Dns } from '../server/dns.js';
15
17
  import { loggerFactory } from '../server/logger.js';
16
18
  import { timer } from '../client/components/core/CommonJs.js';
17
19
  import Underpost from '../index.js';
18
20
 
19
21
  const logger = loggerFactory(import.meta);
20
22
 
23
+ /**
24
+ * Files that must never be touched by a version bump, even if they happen to contain a
25
+ * literal version string. CHANGELOG is historical; logs/ and node_modules/ are runtime
26
+ * outputs; engine-private/.env.* and secrets must not be rewritten by regex.
27
+ */
28
+ const VERSION_BUMP_SKIP = [
29
+ /(^|\/)CHANGELOG\.md$/i,
30
+ /(^|\/)logs\//,
31
+ /(^|\/)node_modules\//,
32
+ /(^|\/)\.git\//,
33
+ /(^|\/)engine-private\/.*\.env(\..*)?$/,
34
+ ];
35
+
36
+ const isSkipped = (filePath) => VERSION_BUMP_SKIP.some((re) => re.test(filePath));
37
+
38
+ /**
39
+ * Declarative regex-based version bump targets for files bumpp cannot handle natively
40
+ * (image tags, doc strings, README badges, build-args, etc.).
41
+ *
42
+ * Each target is one of:
43
+ * - { file: 'path/to/file', patterns: RegExp | RegExp[] }
44
+ * - { dir: 'dir', match: RegExp, patterns: RegExp | RegExp[], recursive?: boolean }
45
+ *
46
+ * Every pattern MUST have exactly one capture group: the prefix to preserve. The replacement
47
+ * is `$1<newVersion>`. Use a lookahead `(?=...)` to anchor a trailing context (closing quote,
48
+ * backtick, etc.) without consuming it. This keeps the callback signature trivial.
49
+ *
50
+ * The walker iterates targets, applies patterns to each matching file, and reports the
51
+ * number of substitutions per file. Files that match nothing are silently skipped.
52
+ */
53
+ const buildVersionBumpTargets = () => [
54
+ // ── src/index.js — anchored to the static class field, never a bare replaceAll. ──
55
+ {
56
+ file: 'src/index.js',
57
+ patterns: /(static version = ['"]v)\d+\.\d+\.\d+(?=['"])/g,
58
+ },
59
+
60
+ // ── README + CLI-HELP fallbacks. CLI-HELP is regenerated by `deploy cli-docs`, but bump
61
+ // it too so the file is consistent if the regeneration step is skipped. ──
62
+ {
63
+ file: 'README.md',
64
+ patterns: [
65
+ /(socket\.dev\/api\/badge\/npm\/package\/underpost\/)\d+\.\d+\.\d+/g,
66
+ /(socket\.dev\/npm\/package\/underpost\/overview\/)\d+\.\d+\.\d+/g,
67
+ /(ci\/cd cli v)\d+\.\d+\.\d+/gi,
68
+ ],
69
+ },
70
+ {
71
+ file: 'CLI-HELP.md',
72
+ patterns: /(ci\/cd cli v)\d+\.\d+\.\d+/gi,
73
+ optional: true,
74
+ },
75
+
76
+ // ── Cyberia + nexodev docs. ──
77
+ {
78
+ dir: 'src/client/public/cyberia-docs',
79
+ match: /\.md$/,
80
+ patterns: [/(\*\*(?:Current )?[Vv]ersion:\*\* )\d+\.\d+\.\d+/g, /(underpost\/[a-z0-9-]+:v)\d+\.\d+\.\d+/g],
81
+ recursive: true,
82
+ },
83
+ {
84
+ dir: 'src/client/public/nexodev/docs/references',
85
+ match: /\.md$/,
86
+ patterns: [
87
+ /(underpost\/[a-z0-9-]+:v)\d+\.\d+\.\d+/g,
88
+ /(UNDERPOST_VERSION=)\d+\.\d+\.\d+/g,
89
+ /(ci\/cd cli v)\d+\.\d+\.\d+/gi,
90
+ // version tag bumps inside markdown narrative, e.g. `v3.2.9`, `v3.2.10`, …
91
+ /(`v)\d+\.\d+\.\d+(?=`)/g,
92
+ ],
93
+ recursive: true,
94
+ },
95
+
96
+ // ── Kubernetes manifests. Covers deployment.yaml + cronjob yamls under dd-cron. ──
97
+ {
98
+ dir: 'manifests/deployment',
99
+ match: /deployment\.yaml$/,
100
+ patterns: [/(underpost\/[a-z0-9-]+:v)\d+\.\d+\.\d+/g, /(engine\.version: )\d+\.\d+\.\d+/g],
101
+ recursive: true,
102
+ },
103
+ {
104
+ dir: 'manifests/cronjobs',
105
+ match: /\.yaml$/,
106
+ patterns: /(underpost\/[a-z0-9-]+:v)\d+\.\d+\.\d+/g,
107
+ recursive: true,
108
+ },
109
+
110
+ // ── GitHub Actions workflows. Single sweep across docker-image.*.ci.yml, engine-*.cd.yml,
111
+ // and the root docker-image.ci.yml — replaces previous three separate loops. ──
112
+ {
113
+ dir: '.github/workflows',
114
+ match: /\.(yml|yaml)$/,
115
+ patterns: [
116
+ /(underpost\/[a-z0-9-]+:v)\d+\.\d+\.\d+/g,
117
+ /(underpost-engine:v)\d+\.\d+\.\d+/g,
118
+ /(type=raw,value=v)\d+\.\d+\.\d+/g,
119
+ /(UNDERPOST_VERSION=)\d+\.\d+\.\d+/g,
120
+ ],
121
+ },
122
+
123
+ // ── engine-private confs (gitignored — bumped only if present). ──
124
+ {
125
+ dir: 'engine-private/conf',
126
+ match: /(?:deployment\.yaml|conf\.instances\.json)$/,
127
+ patterns: [
128
+ /(underpost\/[a-z0-9-]+:v)\d+\.\d+\.\d+/g,
129
+ /(underpost-engine:v)\d+\.\d+\.\d+/g,
130
+ /(engine\.version: )\d+\.\d+\.\d+/g,
131
+ /(v)\d+\.\d+\.\d+/g,
132
+ ],
133
+ recursive: true,
134
+ optional: true,
135
+ },
136
+ ];
137
+
138
+ /**
139
+ * Walks a directory (optionally recursively) and returns paths matching `match`.
140
+ */
141
+ const walkDir = (dir, match, recursive) => {
142
+ if (!fs.existsSync(dir)) return [];
143
+ const out = [];
144
+ const stack = [dir];
145
+ while (stack.length) {
146
+ const cur = stack.pop();
147
+ let entries;
148
+ try {
149
+ entries = fs.readdirSync(cur, { withFileTypes: true });
150
+ } catch {
151
+ continue;
152
+ }
153
+ for (const ent of entries) {
154
+ const full = path.join(cur, ent.name);
155
+ if (ent.isDirectory()) {
156
+ if (recursive) stack.push(full);
157
+ } else if (ent.isFile() && match.test(ent.name) && !isSkipped(full)) {
158
+ out.push(full);
159
+ }
160
+ }
161
+ }
162
+ return out;
163
+ };
164
+
165
+ /**
166
+ * Applies an array of regex patterns to a single file in place. Substitutes only when the
167
+ * matched version literally equals `oldVersion` — narrative references to other versions
168
+ * (e.g. example tags `(v3.2.9, v3.2.10, …)`) are left untouched.
169
+ *
170
+ * Returns the substitution count (0 if nothing matched).
171
+ */
172
+ const bumpFile = (filePath, patterns, oldVersion, newVersion, { dryRun }) => {
173
+ if (isSkipped(filePath)) return 0;
174
+ if (!fs.existsSync(filePath)) return 0;
175
+ const original = fs.readFileSync(filePath, 'utf8');
176
+ const regexes = Array.isArray(patterns) ? patterns : [patterns];
177
+ let updated = original;
178
+ let count = 0;
179
+ for (const re of regexes) {
180
+ updated = updated.replace(re, (m, prefix) => {
181
+ const matchedVersion = m.match(/\d+\.\d+\.\d+/)?.[0];
182
+ if (matchedVersion !== oldVersion) return m;
183
+ count += 1;
184
+ return `${prefix}${newVersion}`;
185
+ });
186
+ }
187
+ if (count > 0 && updated !== original && !dryRun) {
188
+ fs.writeFileSync(filePath, updated, 'utf8');
189
+ }
190
+ return count;
191
+ };
192
+
193
+ /**
194
+ * Bumps every non-canonical file declared in VERSION_BUMP_TARGETS.
195
+ * Returns a per-file report so callers can print a summary.
196
+ *
197
+ * @param {string} oldVersion - The version currently in the files (pre-bump).
198
+ * @param {string} newVersion - The version to write.
199
+ * @param {{dryRun?: boolean}} [opts]
200
+ * @returns {Array<{file: string, count: number}>}
201
+ */
202
+ const bumpAuxiliaryFiles = (oldVersion, newVersion, { dryRun = false } = {}) => {
203
+ const report = [];
204
+ if (oldVersion === newVersion) return report;
205
+ for (const target of buildVersionBumpTargets()) {
206
+ const files = target.file ? [target.file] : walkDir(target.dir, target.match, target.recursive ?? false);
207
+ for (const file of files) {
208
+ if (target.optional && !fs.existsSync(file)) continue;
209
+ const count = bumpFile(file, target.patterns, oldVersion, newVersion, { dryRun });
210
+ if (count > 0) report.push({ file, count });
211
+ }
212
+ }
213
+ return report;
214
+ };
215
+
216
+ /**
217
+ * Prints a per-file change summary table.
218
+ */
219
+ const printBumpReport = (report, { dryRun }) => {
220
+ const header = dryRun ? 'Version bump (dry-run) — would change:' : 'Version bump — files updated:';
221
+ logger.info(header);
222
+ if (!report.length) {
223
+ console.log(' (no files matched)');
224
+ return;
225
+ }
226
+ const maxLen = Math.max(...report.map((r) => r.file.length));
227
+ for (const { file, count } of report) {
228
+ console.log(` ${file.padEnd(maxLen + 2)} ${count} match${count === 1 ? '' : 'es'}`);
229
+ }
230
+ console.log(` Total: ${report.length} file(s), ${report.reduce((s, r) => s + r.count, 0)} substitution(s)`);
231
+ };
232
+
21
233
  /**
22
234
  * Kills any Node.js dev-server or nodemon processes that may hold file locks
23
235
  * (e.g. overwriting package.json). Skips VSCode internals and the current process.
24
236
  */
25
237
  function killDevServers() {
26
- // shellExec(
27
- // `kill -9 $(pgrep -f 'nodemon|node.*src/server|node.*dev' | grep -v '^${process.pid}$') 2>/dev/null || true`,
28
- // );
29
- shellExec(`node bin run kill 4001`);
30
- shellExec(`node bin run kill 4002`);
31
- shellExec(`node bin run kill 4003`);
32
- shellExec(`node bin run kill 3000`);
238
+ for (const port of [4001, 4002, 4003, 3000]) shellExec(`node bin run kill ${port}`);
239
+ }
240
+
241
+ const TEMPLATE_PATH = '../pwa-microservices-template';
242
+
243
+ /**
244
+ * Runs a command in an ISOLATED environment. `release build` loads the engine's
245
+ * `dd-cron/.env.production` (DEPLOY_ID=dd-cron, DB creds, secrets, …) into its own `process.env`,
246
+ * which `shellExec` children would otherwise inherit — and the template's `dotenv.config()` runs
247
+ * without override, so it could never reclaim those keys. `env -i` starts the child with an empty
248
+ * environment; only PATH/HOME-class essentials are re-added so node/npm/git still resolve. The
249
+ * template then reads only its own `.env`, resolving `dd-default` exactly like a fresh clone.
250
+ */
251
+ const ISOLATED_ENV = 'env -i HOME="$HOME" PATH="$PATH" USER="$USER" LOGNAME="$LOGNAME" TERM="$TERM" LANG="$LANG"';
252
+
253
+ /**
254
+ * Builds the pwa-microservices-template from scratch and smoke-tests its default workflow.
255
+ *
256
+ * 1. Cleans the engine, pulls latest, and rebuilds the template via `bin/build.template`.
257
+ * 2. Derives `.env` + `.env.example` from the template `.env.example` (DHCP host IP + file
258
+ * logs), both written from the same `dd-default` content so the default startup workflow
259
+ * bootstraps `engine-private` from scratch out of them. `.env` is rewritten because it is
260
+ * gitignored (git clean never removes it) and may otherwise hold a stale `dd-cron`.
261
+ * 3. Installs deps, then builds + runs the template `dev` server in an ISOLATED env
262
+ * (see `ISOLATED_ENV`) so it resolves `dd-default` like a fresh clone, and asserts the
263
+ * startup log is error-free.
264
+ *
265
+ * @returns {boolean} true when the template started cleanly, false otherwise.
266
+ */
267
+ async function buildAndTestTemplate() {
268
+ killDevServers();
269
+ Underpost.repo.clean({ paths: ['/home/dd/engine', '/home/dd/engine/engine-private '] });
270
+ shellExec(`node bin pull . ${process.env.GITHUB_USERNAME}/engine`);
271
+ shellExec(`npm run update:template`);
272
+ shellExec(`node bin run shared-dir ${TEMPLATE_PATH}`);
273
+
274
+ const dhcpHostIp = Dns.getLocalIPv4Address();
275
+ logger.info(`DHCP host IP for template test: ${dhcpHostIp}`);
276
+ let envContent = fs.readFileSync(`${TEMPLATE_PATH}/.env.example`, 'utf8');
277
+ if (dhcpHostIp) envContent = envContent.replace(/127\.0\.0\.1/g, dhcpHostIp);
278
+ envContent = envContent.replace(/^ENABLE_FILE_LOGS=.*/m, 'ENABLE_FILE_LOGS=true');
279
+ // fs.writeFileSync(`${TEMPLATE_PATH}/.env`, envContent, 'utf8');
280
+ fs.writeFileSync(`${TEMPLATE_PATH}/.env.example`, envContent, 'utf8');
281
+ shellExec(`cd ${TEMPLATE_PATH} && npm install`);
282
+ shellExec(`cd ${TEMPLATE_PATH} && node bin env clean`);
283
+ // Build + run in an isolated env so the template resolves dd-default from its own .env and
284
+ // never inherits the engine's dd-cron deploy selection. See ISOLATED_ENV above.
285
+ //
286
+ // ENABLE_FILE_LOGS must be passed inline: src/server.js builds start.js's logger at import
287
+ // time, before Config.build() loads the template .env, so the var has to be present in the
288
+ // process env from the start for logs/start.js/all.log (the success probe below) to be written.
289
+ shellExec(`cd ${TEMPLATE_PATH} && ${ISOLATED_ENV} npm run build`);
290
+ shellExec(`cd ${TEMPLATE_PATH} && ${ISOLATED_ENV} ENABLE_FILE_LOGS=true timeout 5s npm run dev`, { async: true });
291
+ await timer(5500);
292
+
293
+ const templateLogPath = `${TEMPLATE_PATH}/logs/start.js/all.log`;
294
+ const runnerResult = fs.existsSync(templateLogPath) ? fs.readFileSync(templateLogPath, 'utf8') : '';
295
+ logger.info('Test template runner result');
296
+ killDevServers();
297
+ shellCd(`/home/dd/engine`);
298
+ Underpost.repo.clean({ paths: ['/home/dd/engine', '/home/dd/engine/engine-private '] });
299
+ if (!runnerResult || runnerResult.toLowerCase().match('error')) {
300
+ logger.error('Test template runner result failed');
301
+ return false;
302
+ }
303
+ return true;
33
304
  }
34
305
 
35
306
  /**
@@ -46,98 +317,76 @@ class UnderpostRelease {
46
317
  * Builds a new version of the Underpost engine.
47
318
  *
48
319
  * Performs the full version build pipeline:
49
- * 1. Loads production environment and pulls latest code.
50
- * 2. Kills running dev servers on ports 4001-4003.
51
- * 3. Builds and tests the pwa-microservices-template.
52
- * 4. Bumps version in package.json, package-lock.json, and all conf package files.
53
- * 5. Updates deployment YAML manifests and Docker image CI workflow with new version.
54
- * 6. Updates src/index.js version string.
55
- * 7. Rebuilds CLI docs, dependencies, client builds, deploy manifests, and default confs.
56
- * 8. Syncs cron setup-start scripts and builds changelog.
320
+ * 1. Loads production env and pulls latest code; kills dev servers on ports 4001-4003.
321
+ * 2. Builds and smoke-tests the pwa-microservices-template (aborts on error).
322
+ * 3. Canonical version files: delegates to `bumpp` (driven by `bump.config.js`). Bumps
323
+ * package.json, package-lock.json (root + packages['']), and every
324
+ * engine-private/conf/**\/package.json.
325
+ * 4. Auxiliary files: anchored-regex walker over VERSION_BUMP_TARGETS — covers
326
+ * src/index.js, README, cyberia-docs, nexodev docs, manifests (deployment + cronjobs),
327
+ * .github/workflows (image tags, type=raw, UNDERPOST_VERSION build-args), and
328
+ * engine-private confs (deployment.yaml + conf.instances.json). Files in
329
+ * VERSION_BUMP_SKIP (CHANGELOG, logs/, .env.*, node_modules/) are never touched.
330
+ * The walker only rewrites occurrences whose version literally equals the pre-bump
331
+ * version — narrative references like `(v3.2.9, v3.2.10, …)` are preserved.
332
+ * 5. Rebuilds CLI docs, deps, client bundle, deploy manifests, default confs.
333
+ * 6. Syncs cron setup-start scripts and builds the changelog.
334
+ *
335
+ * With `options.dryRun: true`, steps 3–4 print a per-file substitution report and exit
336
+ * without writing files or running steps 5–6.
57
337
  *
58
338
  * @method build
59
339
  * @param {string} [newVersion] - The new version string to set. Defaults to current version if not provided.
60
- * @param {object} [options] - Commander options object (unused, reserved for future flags).
340
+ * @param {{dryRun?: boolean}} [options] - Commander options. `--dry-run` previews changes.
61
341
  * @memberof UnderpostRelease
62
342
  */
63
- async build(newVersion, options) {
343
+ async build(newVersion, options = {}) {
344
+ const dryRun = !!options.dryRun;
64
345
  dotenv.config({ path: `./engine-private/conf/dd-cron/.env.production`, override: true });
65
346
  shellCd(`/home/dd/engine`);
66
- killDevServers();
67
- Underpost.repo.clean({ paths: ['/home/dd/engine', '/home/dd/engine/engine-private '] });
68
- shellExec(`node bin pull . ${process.env.GITHUB_USERNAME}/engine`);
69
- shellExec(`npm run update:template`);
70
- shellExec(`cd ../pwa-microservices-template && npm install && npm run build`);
71
- console.log(fs.existsSync(`../pwa-microservices-template/engine-private/conf/dd-default`));
72
- shellExec(`cd ../pwa-microservices-template && ENABLE_FILE_LOGS=true timeout 5s npm run dev`, {
73
- async: true,
74
- });
75
- await timer(5500);
76
- const templateRunnerResult = fs.readFileSync(`../pwa-microservices-template/logs/start.js/all.log`, 'utf8');
77
- logger.info('Test template runner result');
78
- console.log(templateRunnerResult);
79
- if (!templateRunnerResult || templateRunnerResult.toLowerCase().match('error')) {
80
- logger.error('Test template runner result failed');
81
- return;
82
- }
83
- killDevServers();
84
- shellCd(`/home/dd/engine`);
85
- Underpost.repo.clean({ paths: ['/home/dd/engine', '/home/dd/engine/engine-private '] });
347
+
348
+ // ── Resolve from/to versions up front. Used by every bump step + downstream commands. ──
86
349
  const originPackageJson = JSON.parse(fs.readFileSync(`package.json`, 'utf8'));
87
- if (!newVersion) newVersion = originPackageJson.version;
88
350
  const { version } = originPackageJson;
89
- originPackageJson.version = newVersion;
90
- fs.writeFileSync(`package.json`, JSON.stringify(originPackageJson, null, 4), 'utf8');
91
-
92
- const originPackageLockJson = JSON.parse(fs.readFileSync(`package-lock.json`, 'utf8'));
93
- originPackageLockJson.version = newVersion;
94
- originPackageLockJson.packages[''].version = newVersion;
95
- fs.writeFileSync(`package-lock.json`, JSON.stringify(originPackageLockJson, null, 4), 'utf8');
351
+ if (!newVersion) newVersion = version;
352
+ logger.info(`Release build bumping ${version} → ${newVersion}${dryRun ? ' (dry-run)' : ''}`);
96
353
 
97
- if (fs.existsSync(`./engine-private/conf`)) {
98
- const files = await fs.readdir(`./engine-private/conf`, { recursive: true });
99
- for (const relativePath of files) {
100
- const filePah = `./engine-private/conf/${relativePath.replaceAll(`\\`, '/')}`;
101
- if (filePah.split('/').pop() === 'package.json') {
102
- const originPackage = JSON.parse(fs.readFileSync(filePah, 'utf8'));
103
- originPackage.version = newVersion;
104
- fs.writeFileSync(filePah, JSON.stringify(originPackage, null, 4), 'utf8');
105
- }
106
- if (filePah.split('/').pop() === 'deployment.yaml') {
107
- fs.writeFileSync(
108
- filePah,
109
- fs
110
- .readFileSync(filePah, 'utf8')
111
- .replaceAll(`v${version}`, `v${newVersion}`)
112
- .replaceAll(`engine.version: ${version}`, `engine.version: ${newVersion}`),
113
- 'utf8',
114
- );
115
- }
116
- }
354
+ if (!dryRun) {
355
+ const templateOk = await buildAndTestTemplate();
356
+ if (!templateOk) return;
117
357
  }
118
358
 
119
- fs.writeFileSync(
120
- `./manifests/deployment/dd-default-development/deployment.yaml`,
121
- fs
122
- .readFileSync(`./manifests/deployment/dd-default-development/deployment.yaml`, 'utf8')
123
- .replaceAll(`underpost:v${version}`, `underpost:v${newVersion}`),
124
- 'utf8',
125
- );
359
+ // ── Canonical version files: delegate to bumpp (package.json, package-lock.json,
360
+ // engine-private/conf/**/package.json). bumpp owns lockfile semantics (root version
361
+ // + packages[''].version) so we don't reimplement them. ──
362
+ const { versionBump } = await import('bumpp');
363
+ const bumppResult = await versionBump({
364
+ release: newVersion,
365
+ files: [
366
+ 'package.json',
367
+ 'package-lock.json',
368
+ ...(fs.existsSync('./engine-private/conf') ? ['engine-private/conf/**/package.json'] : []),
369
+ ],
370
+ commit: false,
371
+ tag: false,
372
+ push: false,
373
+ confirm: false,
374
+ recursive: false,
375
+ ignoreScripts: true,
376
+ dry: dryRun,
377
+ });
378
+ logger.info(`bumpp updated ${bumppResult?.files?.length ?? 0} canonical file(s).`);
126
379
 
127
- if (fs.existsSync(`./.github/workflows/docker-image.ci.yml`))
128
- fs.writeFileSync(
129
- `./.github/workflows/docker-image.ci.yml`,
130
- fs
131
- .readFileSync(`./.github/workflows/docker-image.ci.yml`, 'utf8')
132
- .replaceAll(`underpost-engine:v${version}`, `underpost-engine:v${newVersion}`),
133
- 'utf8',
134
- );
380
+ // ── Auxiliary files: anchored-regex walker over VERSION_BUMP_TARGETS. ──
381
+ const report = bumpAuxiliaryFiles(version, newVersion, { dryRun });
382
+ printBumpReport(report, { dryRun });
135
383
 
136
- fs.writeFileSync(
137
- `./src/index.js`,
138
- fs.readFileSync(`./src/index.js`, 'utf8').replaceAll(`${version}`, `${newVersion}`),
139
- 'utf8',
140
- );
384
+ if (dryRun) {
385
+ logger.info('Dry-run complete. No files modified. Re-run without --dry-run to apply.');
386
+ return { from: version, to: newVersion, files: report.map((r) => r.file), dryRun: true };
387
+ }
388
+
389
+ // ── Downstream regenerations and manifest sync (unchanged from previous flow). ──
141
390
  shellExec(`node bin/deploy cli-docs ${version} ${newVersion}`);
142
391
  shellExec(`node bin/deploy update-dependencies`);
143
392
  shellExec(`node bin/build dd`);
@@ -150,6 +399,7 @@ class UnderpostRelease {
150
399
  shellExec(`sudo rm -rf ./engine-private/conf/dd-default`);
151
400
  shellExec(`node bin cron --kubeadm --setup-start --git`); // --apply
152
401
  shellExec(`node bin cmt --changelog-build`);
402
+ return { from: version, to: newVersion, files: report.map((r) => r.file), dryRun: false };
153
403
  },
154
404
 
155
405
  /**
@@ -210,7 +460,7 @@ class UnderpostRelease {
210
460
  * Runs the pwa-microservices-template update and push flow locally.
211
461
  *
212
462
  * Always removes and re-clones pwa-microservices-template, then:
213
- * 1. Runs update:template (node bin/file update-template) to sync engine sources.
463
+ * 1. Runs update:template (node bin/build.template) to sync engine sources.
214
464
  * 2. Installs dependencies and builds the template.
215
465
  * 3. Commits and pushes to the pwa-microservices-template remote repository.
216
466
  *