@underpostnet/cyberia 3.3.0 → 3.3.76

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 (568) hide show
  1. package/.dockerignore +1 -0
  2. package/.env.example +17 -5
  3. package/.github/workflows/coverall.cyberia.ci.yml +39 -14
  4. package/.github/workflows/cyberia-client.cd.yml +5 -0
  5. package/.github/workflows/cyberia-server.cd.yml +5 -0
  6. package/.github/workflows/docker-image.cyberia-client.ci.yml +8 -5
  7. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +8 -3
  8. package/.github/workflows/docker-image.cyberia-server.ci.yml +8 -5
  9. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +8 -5
  10. package/.github/workflows/docker-image.engine-cyberia.ci.yml +15 -1
  11. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +15 -1
  12. package/.github/workflows/engine-cyberia.cd.yml +3 -0
  13. package/.github/workflows/engine-cyberia.ci.yml +4 -5
  14. package/.github/workflows/ghpkg.ci.yml +35 -20
  15. package/.github/workflows/hardhat.ci.yml +12 -11
  16. package/.github/workflows/npmpkg.ci.yml +17 -15
  17. package/.github/workflows/publish.cyberia.ci.yml +44 -0
  18. package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
  19. package/.github/workflows/release.cd.yml +1 -0
  20. package/.prettierignore +1 -0
  21. package/AGENTS.md +96 -0
  22. package/CHANGELOG.md +653 -2513
  23. package/CLI-HELP.md +323 -157
  24. package/Dockerfile +25 -9
  25. package/Dockerfile.dev +25 -9
  26. package/Dockerfile.test +5 -5
  27. package/README.md +48 -28
  28. package/bin/build.js +86 -41
  29. package/bin/build.template.js +8 -3
  30. package/bin/cyberia.js +1494 -1403
  31. package/bin/deploy.js +18 -104
  32. package/bin/index.js +1494 -1403
  33. package/compose.env +17 -5
  34. package/conf.js +98 -7
  35. package/deploy/cyberia-client/deploy.sh +46 -0
  36. package/deploy/cyberia-client/package.sh +17 -0
  37. package/deploy/cyberia-client/state.sh +15 -0
  38. package/deploy/cyberia-server/deploy.sh +46 -0
  39. package/deploy/cyberia-server/package.sh +17 -0
  40. package/deploy/cyberia-server/state.sh +15 -0
  41. package/deploy/dd-cyberia/deploy.sh +9 -29
  42. package/deploy/dd-cyberia/init.sh +38 -45
  43. package/deploy/dd-cyberia/package.sh +16 -0
  44. package/deploy/dd-cyberia/state.sh +14 -0
  45. package/deploy/dd-cyberia/sync-deploy.sh +133 -147
  46. package/deploy/lib/config.sh +29 -0
  47. package/deploy/lib/github-actions-logging.sh +610 -0
  48. package/deploy/lib/host.sh +194 -0
  49. package/deploy/lib/state.sh +65 -0
  50. package/deploy/pwa-microservices-template/deploy.sh +17 -42
  51. package/deploy/release/deploy.sh +9 -41
  52. package/deployment.yaml +7 -2
  53. package/docker-compose.yml +23 -17
  54. package/examples/static-page/README.md +19 -19
  55. package/examples/static-page/ssr-components/CustomPage.js +2 -2
  56. package/hardhat/hardhat.config.js +1 -6
  57. package/hardhat/package-lock.json +101 -40
  58. package/hardhat/package.json +2 -2
  59. package/manifests/alertmanager/deployment.yaml +81 -0
  60. package/manifests/blackbox-exporter/deployment.yaml +75 -0
  61. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +32 -7
  62. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +32 -7
  63. package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
  64. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  65. package/manifests/deployment/mongo-express/deployment.yaml +46 -27
  66. package/manifests/deployment/mongo-express/kustomization.yaml +9 -0
  67. package/manifests/deployment/mongo-express/mongo-express-nodeport.yaml +18 -0
  68. package/manifests/deployment/mongo-express/service.yaml +16 -0
  69. package/manifests/deployment/mongo-express-no-auth/disable-mongodb-auth.yaml +16 -0
  70. package/manifests/deployment/mongo-express-no-auth/kustomization.yaml +16 -0
  71. package/manifests/grafana/deployment.yaml +26 -7
  72. package/manifests/grafana/kustomization.yaml +1 -0
  73. package/manifests/grafana/service.yaml +6 -1
  74. package/manifests/mariadb/pv.yaml +1 -0
  75. package/manifests/mongodb/statefulset.yaml +9 -2
  76. package/manifests/mysql/pv-pvc.yaml +14 -1
  77. package/manifests/postgresql/pv.yaml +12 -1
  78. package/manifests/postgresql/pvc.yaml +1 -0
  79. package/manifests/prometheus/deployment.yaml +18 -22
  80. package/package.json +87 -12
  81. package/scripts/event-monitor.sh +56 -0
  82. package/scripts/k3s-node-setup.sh +27 -14
  83. package/scripts/kubeadm-node-setup.sh +31 -11
  84. package/scripts/maas-setup.sh +8 -8
  85. package/scripts/selinux-normalize.sh +907 -0
  86. package/scripts/shutdown-machine.sh +843 -0
  87. package/scripts/test-monitor.sh +5 -5
  88. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +15 -10
  89. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +36 -5
  90. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +7 -2
  91. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +90 -186
  92. package/src/api/core/core.controller.js +1 -1
  93. package/src/api/core/core.router.js +2 -2
  94. package/src/api/core/core.service.js +2 -2
  95. package/src/api/crypto/crypto.controller.js +1 -1
  96. package/src/api/crypto/crypto.service.js +1 -1
  97. package/src/api/cyberia-action/cyberia-action.controller.js +1 -1
  98. package/src/api/cyberia-action/cyberia-action.router.js +3 -3
  99. package/src/api/cyberia-action/cyberia-action.service.js +5 -6
  100. package/src/api/cyberia-audio/cyberia-audio.controller.js +6 -0
  101. package/src/api/cyberia-audio/cyberia-audio.model.js +61 -0
  102. package/src/api/cyberia-audio/cyberia-audio.router.js +21 -0
  103. package/src/api/cyberia-audio/cyberia-audio.service.js +220 -0
  104. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +2 -4
  105. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +10 -19
  106. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +13 -35
  107. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +17 -34
  108. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
  109. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +1 -1
  110. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
  111. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
  112. package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
  113. package/src/api/cyberia-entity/cyberia-entity.model.js +2 -0
  114. package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
  115. package/src/api/cyberia-entity/cyberia-entity.service.js +3 -3
  116. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +8 -2
  117. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +31 -20
  118. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +17 -2
  119. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +468 -5
  120. package/src/api/cyberia-instance/cyberia-fallback-capture.js +502 -0
  121. package/src/api/cyberia-instance/cyberia-fallback-world.js +29 -40
  122. package/src/api/cyberia-instance/cyberia-instance-boot.service.js +5 -5
  123. package/src/api/cyberia-instance/cyberia-instance-items.js +98 -0
  124. package/src/api/cyberia-instance/cyberia-instance-map.service.js +35 -142
  125. package/src/api/cyberia-instance/cyberia-instance.controller.js +2 -5
  126. package/src/api/cyberia-instance/cyberia-instance.model.js +0 -14
  127. package/src/api/cyberia-instance/cyberia-instance.router.js +5 -18
  128. package/src/api/cyberia-instance/cyberia-instance.service.js +5 -45
  129. package/src/api/cyberia-instance/cyberia-world-generator.js +8 -13
  130. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
  131. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +49 -75
  132. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
  133. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +76 -3
  134. package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
  135. package/src/api/cyberia-map/cyberia-map.router.js +1 -1
  136. package/src/api/cyberia-map/cyberia-map.service.js +8 -4
  137. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.controller.js +31 -0
  138. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.model.js +56 -0
  139. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.router.js +33 -0
  140. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +189 -0
  141. package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
  142. package/src/api/cyberia-quest/cyberia-quest.router.js +4 -4
  143. package/src/api/cyberia-quest/cyberia-quest.service.js +5 -5
  144. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
  145. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +1 -1
  146. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
  147. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
  148. package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
  149. package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
  150. package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
  151. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +403 -214
  152. package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
  153. package/src/api/cyberia-skill/cyberia-skill.model.js +6 -6
  154. package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
  155. package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
  156. package/src/api/default/default.controller.js +1 -1
  157. package/src/api/default/default.router.js +1 -1
  158. package/src/api/default/default.service.js +2 -2
  159. package/src/api/document/document.controller.js +1 -1
  160. package/src/api/document/document.router.js +1 -1
  161. package/src/api/document/document.service.js +2 -2
  162. package/src/api/file/file.controller.js +1 -1
  163. package/src/api/file/file.ref.js +153 -0
  164. package/src/api/file/file.ref.json +11 -2
  165. package/src/api/file/file.router.js +1 -1
  166. package/src/api/file/file.service.js +2 -2
  167. package/src/api/instance/instance.controller.js +1 -1
  168. package/src/api/instance/instance.router.js +1 -1
  169. package/src/api/instance/instance.service.js +2 -2
  170. package/src/api/ipfs/ipfs.controller.js +1 -1
  171. package/src/api/ipfs/ipfs.router.js +2 -2
  172. package/src/api/ipfs/ipfs.service.js +2 -2
  173. package/src/api/object-layer/object-layer.controller.js +1 -1
  174. package/src/api/object-layer/object-layer.model.js +47 -12
  175. package/src/api/object-layer/object-layer.router.js +12 -5
  176. package/src/api/object-layer/object-layer.service.js +116 -123
  177. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
  178. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
  179. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
  180. package/src/api/test/test.controller.js +1 -1
  181. package/src/api/test/test.service.js +1 -1
  182. package/src/api/user/guest.service.js +3 -3
  183. package/src/api/user/user.controller.js +1 -1
  184. package/src/api/user/user.router.js +2 -2
  185. package/src/api/user/user.service.js +4 -4
  186. package/src/api.js +5 -9
  187. package/src/cli/app.js +402 -0
  188. package/src/cli/baremetal.js +30 -35
  189. package/src/cli/client.js +306 -0
  190. package/src/cli/cloud-init.js +3 -3
  191. package/src/cli/cluster.js +191 -82
  192. package/src/cli/db.js +120 -68
  193. package/src/cli/deploy.js +157 -75
  194. package/src/cli/docker-compose.js +5 -5
  195. package/src/cli/domains.js +184 -0
  196. package/src/cli/dotenv-store.js +143 -0
  197. package/src/cli/event.js +2281 -0
  198. package/src/cli/fs-selection.js +115 -0
  199. package/src/cli/fs.js +159 -343
  200. package/src/cli/host.js +672 -0
  201. package/src/cli/image.js +4 -6
  202. package/src/cli/index.js +343 -151
  203. package/src/cli/ipfs.js +34 -30
  204. package/src/cli/kickstart.js +1 -1
  205. package/src/cli/kubectl.js +218 -41
  206. package/src/cli/lxd.js +3 -3
  207. package/src/cli/monitor.js +1359 -26
  208. package/src/cli/package.js +90 -0
  209. package/src/cli/release.js +16 -12
  210. package/src/cli/repository.js +586 -363
  211. package/src/cli/run.js +398 -843
  212. package/src/cli/secrets.js +2158 -964
  213. package/src/cli/ssh.js +478 -279
  214. package/src/cli/state.js +394 -0
  215. package/src/cli/static.js +2 -2
  216. package/src/cli/system.js +1 -1
  217. package/src/cli/test.js +203 -125
  218. package/src/cli/vultr.js +61 -21
  219. package/src/cli/wireguard.js +1112 -306
  220. package/src/client/components/core/CalendarCore.js +53 -96
  221. package/src/client/components/core/Docs.js +327 -303
  222. package/src/client/components/core/FileExplorer.js +0 -21
  223. package/src/client/components/core/Modal.js +56 -1
  224. package/src/client/components/core/PanelForm.js +4 -4
  225. package/src/client/components/core/Repository.js +56 -0
  226. package/src/client/components/core/Translate.js +7 -0
  227. package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
  228. package/src/client/components/core/Wallet.js +0 -11
  229. package/src/client/components/core/Worker.js +7 -1
  230. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
  231. package/src/client/components/cyberia/ActionEngineCyberia.js +12 -36
  232. package/src/client/components/cyberia/EntityEngineCyberia.js +492 -121
  233. package/src/client/components/cyberia/InstanceEngineCyberia.js +129 -160
  234. package/src/client/components/cyberia/InstanceSelectionView.js +7 -1
  235. package/src/client/components/cyberia/MapEngineCyberia.js +175 -69
  236. package/src/client/components/cyberia/ObjectLayerEngine.js +1011 -97
  237. package/src/client/components/cyberia/ObjectLayerEngineModal.js +81 -155
  238. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +113 -98
  239. package/src/client/components/cyberia/SharedDefaultsCyberia.js +215 -56
  240. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +2 -35
  241. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +1 -1
  242. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +712 -76
  243. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
  244. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +0 -4
  245. package/src/client/components/default/AppShellDefault.js +1 -1
  246. package/src/client/components/default/SettingsDefault.js +2 -2
  247. package/src/client/components/itemledger/SettingsItemledger.js +2 -2
  248. package/src/client/components/underpost/AppShellUnderpost.js +3 -2
  249. package/src/client/components/underpost/SettingsUnderpost.js +2 -2
  250. package/src/client/public/cyberia-docs/ARCHITECTURE.md +15 -15
  251. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +313 -30
  252. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +51 -29
  253. package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +52 -53
  254. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +16 -11
  255. package/src/client/public/cyberia-docs/CYBERIA.md +48 -28
  256. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +11 -5
  257. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
  258. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  259. package/src/client/public/cyberia-docs/STATS-PROGRESSION.md +217 -0
  260. package/src/client/public/cyberia-docs/WHITE-PAPER.md +20 -12
  261. package/src/client/public/default/android-chrome-144x144.png +0 -0
  262. package/src/client/public/default/android-chrome-192x192.png +0 -0
  263. package/src/client/public/default/android-chrome-256x256.png +0 -0
  264. package/src/client/public/default/android-chrome-36x36.png +0 -0
  265. package/src/client/public/default/android-chrome-384x384.png +0 -0
  266. package/src/client/public/default/android-chrome-48x48.png +0 -0
  267. package/src/client/public/default/android-chrome-512x512.png +0 -0
  268. package/src/client/public/default/android-chrome-72x72.png +0 -0
  269. package/src/client/public/default/android-chrome-96x96.png +0 -0
  270. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  271. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  272. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  273. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  274. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  275. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  276. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  277. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  278. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  279. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  280. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  281. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  282. package/src/client/public/default/apple-touch-icon.png +0 -0
  283. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  284. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  285. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  286. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  287. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  288. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  289. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  290. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  291. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  292. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  293. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  294. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  295. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  296. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  297. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  298. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  299. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  300. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  301. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  302. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  303. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  304. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  305. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  306. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  307. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  308. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  309. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  310. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  311. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  312. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  313. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  314. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  315. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  316. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  317. package/src/client/public/default/assets/background/white.jpg +0 -0
  318. package/src/client/public/default/browserconfig.xml +1 -1
  319. package/src/client/public/default/favicon-16x16.png +0 -0
  320. package/src/client/public/default/favicon-32x32.png +0 -0
  321. package/src/client/public/default/favicon-48x48.png +0 -0
  322. package/src/client/public/default/favicon.ico +0 -0
  323. package/src/client/public/default/manifest.webmanifest +5 -5
  324. package/src/client/public/default/mstile-144x144.png +0 -0
  325. package/src/client/public/default/mstile-150x150.png +0 -0
  326. package/src/client/public/default/mstile-310x150.png +0 -0
  327. package/src/client/public/default/mstile-310x310.png +0 -0
  328. package/src/client/public/default/mstile-70x70.png +0 -0
  329. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  330. package/src/client/public/default/yandex-browser-manifest.json +1 -1
  331. package/src/client/services/cyberia-audio/cyberia-audio.service.js +99 -0
  332. package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +38 -0
  333. package/src/client/services/cyberia-instance/cyberia-instance.management.js +5 -4
  334. package/src/client/services/cyberia-instance/cyberia-instance.service.js +0 -40
  335. package/src/client/services/cyberia-map/cyberia-map.management.js +5 -4
  336. package/src/client/services/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +138 -0
  337. package/src/client/services/object-layer/object-layer.management.js +6 -10
  338. package/src/client/services/object-layer/object-layer.service.js +3 -1
  339. package/src/client/ssr/RootDocument.js +1 -1
  340. package/src/client/ssr/body/404.js +1 -1
  341. package/src/client/ssr/body/500.js +1 -1
  342. package/src/client/ssr/body/CacheControl.js +1 -1
  343. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
  344. package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
  345. package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
  346. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
  347. package/src/client/ssr/head/CryptokoynScripts.js +1 -1
  348. package/src/client/ssr/head/Css.js +1 -1
  349. package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
  350. package/src/client/ssr/head/DefaultScripts.js +1 -1
  351. package/src/client/ssr/head/ItemledgerScripts.js +1 -1
  352. package/src/client/ssr/head/Microdata.js +1 -1
  353. package/src/client/ssr/head/Production.js +1 -1
  354. package/src/client/ssr/head/Pwa.js +1 -1
  355. package/src/client/ssr/head/PwaItemledger.js +1 -1
  356. package/src/client/ssr/head/Seo.js +1 -1
  357. package/src/client/ssr/head/UnderpostScripts.js +1 -1
  358. package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
  359. package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
  360. package/src/client/ssr/views/Cyberia404.js +7 -5
  361. package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
  362. package/src/client/ssr/views/Maintenance.js +1 -1
  363. package/src/client/ssr/views/NoNetworkConnection.js +1 -1
  364. package/src/client/ssr/views/Test.js +1 -1
  365. package/src/client/sw/core.sw.js +20 -14
  366. package/src/client-builder/client-build-docs.js +92 -77
  367. package/src/client-builder/client-build-live.js +2 -2
  368. package/src/client-builder/client-build.js +105 -74
  369. package/src/client-builder/client-bundle.js +347 -0
  370. package/src/client-builder/client-dev-server.js +3 -3
  371. package/src/client-builder/client-icons.js +2 -2
  372. package/src/client-builder/ssr.js +3 -3
  373. package/src/client.build.js +3 -6
  374. package/src/client.dev.js +3 -6
  375. package/src/db/DataBaseProvider.js +186 -3
  376. package/src/db/mariadb/MariaDB.js +3 -2
  377. package/src/db/mongo/MongoBootstrap.js +273 -101
  378. package/src/db/mongo/MongoExpress.js +187 -0
  379. package/src/db/mongo/MongooseDB.js +7 -8
  380. package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
  381. package/src/grpc/cyberia/grpc-server.js +6 -8
  382. package/src/index.js +79 -23
  383. package/src/mailer/EmailRender.js +2 -2
  384. package/src/mailer/MailerInterceptor.js +87 -0
  385. package/src/mailer/MailerProvider.js +50 -6
  386. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +144 -147
  387. package/src/projects/cyberia/atlas-sprite-sheet-store.js +391 -0
  388. package/src/projects/cyberia/besu-genesis-generator.js +8 -17
  389. package/src/projects/cyberia/boot-contract-fixtures.js +32 -0
  390. package/src/projects/cyberia/catalog-cyberia.js +54 -10
  391. package/src/projects/cyberia/gemini-client.js +4 -4
  392. package/src/projects/cyberia/generate-saga.js +5 -12
  393. package/src/projects/cyberia/hot-reload-trigger.js +18 -29
  394. package/src/projects/cyberia/instance-backup.js +210 -0
  395. package/src/projects/cyberia/instance-data.js +178 -258
  396. package/src/projects/cyberia/ipfs-client.js +4 -4
  397. package/src/projects/cyberia/map-preview-generator.js +33 -69
  398. package/src/projects/cyberia/object-layer.js +153 -320
  399. package/src/projects/cyberia/seed-audio.js +139 -0
  400. package/src/projects/cyberia/semantic-layer-generator-skin.js +2 -8
  401. package/src/projects/cyberia/semantic-layer-generator.js +3 -19
  402. package/src/projects/cyberia/stat-balance.js +81 -0
  403. package/src/projects/cyberia/stat-commands.js +23 -0
  404. package/src/projects/cyberia/stat-contract-generator.js +101 -0
  405. package/src/projects/underpost/catalog-underpost.js +9 -1
  406. package/src/proxy.js +4 -7
  407. package/src/runtime/cyberia-client/Dockerfile +17 -8
  408. package/src/runtime/cyberia-client/Dockerfile.dev +13 -4
  409. package/src/runtime/cyberia-server/Dockerfile +18 -6
  410. package/src/runtime/cyberia-server/Dockerfile.dev +16 -3
  411. package/src/runtime/engine-cyberia/Dockerfile +25 -9
  412. package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
  413. package/src/runtime/engine-cyberia/Dockerfile.test +5 -5
  414. package/src/runtime/engine-cyberia/compose.env +17 -5
  415. package/src/runtime/engine-cyberia/docker-compose.yml +23 -17
  416. package/src/runtime/express/Express.js +32 -27
  417. package/src/runtime/lampp/Lampp.js +22 -70
  418. package/src/runtime/nginx/Nginx.js +1 -1
  419. package/src/runtime/wp/Wp.js +16 -48
  420. package/src/server/{catalog.js → build/catalog.js} +15 -5
  421. package/src/server/build/coverage.js +188 -0
  422. package/src/server/build/execution.js +402 -0
  423. package/src/server/build/package.js +508 -0
  424. package/src/server/build/testing.js +578 -0
  425. package/src/server/{dns.js → network/dns.js} +144 -11
  426. package/src/server/{forward-proxy.js → network/forward-proxy.js} +10 -18
  427. package/src/server/{middlewares.js → network/middlewares.js} +11 -5
  428. package/src/server/network/node-capability.js +98 -0
  429. package/src/server/{peer.js → network/peer.js} +3 -3
  430. package/src/server/{proxy.js → network/proxy.js} +7 -13
  431. package/src/server/network/router.js +356 -0
  432. package/src/server/{tls.js → network/tls.js} +2 -2
  433. package/src/server/{underpost-compression.js → network/underpost-compression.js} +1 -1
  434. package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +7 -7
  435. package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +2 -2
  436. package/src/server/{cri.js → ops/cri.js} +2 -2
  437. package/src/server/{cron.js → ops/cron.js} +349 -74
  438. package/src/server/ops/event-notification.js +284 -0
  439. package/src/server/{logger.js → ops/logger.js} +143 -23
  440. package/src/server/ops/monitoring.js +1724 -0
  441. package/src/server/{systemd.js → ops/systemd.js} +55 -1
  442. package/src/server/{conf.js → runtime/conf.js} +516 -423
  443. package/src/server/runtime/config-scope.js +215 -0
  444. package/src/server/runtime/environment.js +149 -0
  445. package/src/server/{process.js → runtime/process.js} +153 -12
  446. package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
  447. package/src/server/{runtime.js → runtime/runtime.js} +12 -8
  448. package/src/server/{start.js → runtime/start.js} +128 -39
  449. package/src/server/{auth.js → security/auth.js} +7 -8
  450. package/src/server/security/container-storage.js +382 -0
  451. package/src/server/{crypto.js → security/crypto.js} +1 -1
  452. package/src/server/{selinux.js → security/selinux.js} +1 -1
  453. package/src/server/{backup.js → storage/backup.js} +17 -8
  454. package/src/server/{data-query.js → storage/data-query.js} +17 -1
  455. package/src/server/storage/downloader.js +121 -0
  456. package/src/server/storage/repository.js +68 -0
  457. package/src/server/storage/zip.js +153 -0
  458. package/src/server.js +4 -7
  459. package/src/ws/IoInterface.js +1 -1
  460. package/src/ws/IoServer.js +1 -1
  461. package/src/ws/core/core.ws.connection.js +1 -1
  462. package/src/ws/core/core.ws.emit.js +1 -1
  463. package/src/ws/core/core.ws.server.js +1 -1
  464. package/src/ws/default/default.ws.connection.js +1 -1
  465. package/src/ws/default/default.ws.emit.js +1 -1
  466. package/src/ws/default/default.ws.server.js +1 -1
  467. package/test/e2e/event-e2e-public-ingress-down.js +45 -0
  468. package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
  469. package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
  470. package/test/{api.test.js → integration/app/api.test.js} +33 -14
  471. package/test/integration/app/cyberia/atlas-sprite-sheet-store.test.js +402 -0
  472. package/test/integration/app/cyberia/atlas-sprite-sheet.test.js +86 -0
  473. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +64 -0
  474. package/test/integration/app/cyberia/cyberia-entity-type-default.test.js +842 -0
  475. package/test/integration/app/cyberia/cyberia-instance-conf-coerce.test.js +53 -0
  476. package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +17 -23
  477. package/test/integration/app/cyberia/cyberia-instance-items.test.js +90 -0
  478. package/test/integration/app/cyberia/cyberia-load.test.js +466 -0
  479. package/test/integration/app/cyberia/cyberia-map-audio-conf.test.js +256 -0
  480. package/test/integration/app/cyberia/cyberia-stats.test.js +150 -0
  481. package/test/integration/app/cyberia/fallback-world-capture.test.js +338 -0
  482. package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
  483. package/test/integration/app/cyberia/object-layer-item-selection.test.js +56 -0
  484. package/test/integration/app/cyberia/object-layer-natural-key.test.js +32 -0
  485. package/test/integration/app/cyberia/seed-audio.test.js +275 -0
  486. package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
  487. package/test/integration/infra/1-security/config-scope.test.js +305 -0
  488. package/test/integration/infra/1-security/container-storage.test.js +356 -0
  489. package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
  490. package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
  491. package/test/{selinux.test.js → integration/infra/1-security/selinux.test.js} +2 -4
  492. package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
  493. package/test/integration/infra/1-security/systemd-service.test.js +70 -0
  494. package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
  495. package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
  496. package/test/integration/infra/2-network/node-capability.test.js +182 -0
  497. package/test/integration/infra/2-network/wireguard-cli.test.js +1187 -0
  498. package/test/{wireguard-edge.test.js → integration/infra/2-network/wireguard-edge.test.js} +649 -55
  499. package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
  500. package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
  501. package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
  502. package/test/integration/infra/3-cluster/mongo-express-deploy.test.js +156 -0
  503. package/test/integration/infra/4-ingress/api-cross-origin.test.js +79 -0
  504. package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
  505. package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
  506. package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
  507. package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +6 -6
  508. package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +4 -4
  509. package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
  510. package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
  511. package/test/integration/infra/5-observability/event-notification.test.js +197 -0
  512. package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
  513. package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
  514. package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
  515. package/test/support/shell-harness.js +73 -0
  516. package/test/unit/build-template.test.js +97 -0
  517. package/test/unit/build-workflow-offline.test.js +132 -0
  518. package/test/unit/catalog.test.js +71 -0
  519. package/test/unit/client-build-docs.test.js +361 -0
  520. package/test/unit/client-bundle.test.js +313 -0
  521. package/test/unit/conf-loading.test.js +303 -0
  522. package/test/unit/conf-resolution.test.js +996 -0
  523. package/test/unit/coverage-artifact.test.js +221 -0
  524. package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
  525. package/test/unit/cyberia/instance-backup.test.js +183 -0
  526. package/test/unit/cyberia/instance-object-layer-items.test.js +46 -0
  527. package/test/unit/cyberia/publish-workflow.test.js +22 -0
  528. package/test/unit/cyberia/stat-balance.test.js +69 -0
  529. package/test/unit/deploy-env-resolution.test.js +38 -0
  530. package/test/unit/deploy-log-table.test.js +518 -0
  531. package/test/unit/downloader-integrity.test.js +98 -0
  532. package/test/unit/execution-profiles.test.js +219 -0
  533. package/test/unit/file-reference-registry.test.js +141 -0
  534. package/test/unit/fleet-sync-source.test.js +149 -0
  535. package/test/unit/fs-storage-paths.test.js +596 -0
  536. package/test/unit/logger-redaction.test.js +141 -0
  537. package/test/unit/package.test.js +457 -0
  538. package/test/unit/prepare-host.test.js +382 -0
  539. package/test/unit/process-environment.test.js +18 -0
  540. package/test/unit/propagation-message.test.js +78 -0
  541. package/test/unit/redeploy-plan.test.js +24 -0
  542. package/test/unit/release-bump.test.js +474 -0
  543. package/test/unit/ssh-output-redaction.test.js +28 -0
  544. package/test/unit/start-options.test.js +46 -0
  545. package/test/unit/test-tiers.test.js +220 -0
  546. package/test/unit/zip-archive.test.js +142 -0
  547. package/vitest.config.js +66 -0
  548. package/.nycrc +0 -9
  549. package/deploy/lib/logging.sh +0 -96
  550. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
  551. package/manifests/mongodb/pv-pvc.yaml +0 -59
  552. package/scripts/coverall-test-cyberia.sh +0 -24
  553. package/scripts/coverall-test.sh +0 -24
  554. package/scripts/link-local-underpost-cli.sh +0 -6
  555. package/src/api/cyberia-instance/cyberia-fallback-default-items.js +0 -63
  556. package/src/api/user/user.build.js +0 -16
  557. package/src/cli/env.js +0 -177
  558. package/src/client/components/core/Blockchain.js +0 -41
  559. package/src/client/components/core/Blog.js +0 -9
  560. package/src/client/components/core/KeyboardAvoidance.js +0 -145
  561. package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +0 -368
  562. package/src/client/public/default/assets/background/dark.jpg +0 -0
  563. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  564. package/src/client/public/default/assets/background/white0.jpg +0 -0
  565. package/src/client/public/doc/favicon.ico +0 -0
  566. package/src/client/public/doc/sitemap +0 -148
  567. package/src/server/downloader.js +0 -73
  568. package/src/server/environment.js +0 -98
@@ -0,0 +1,194 @@
1
+ # Host preparation for deploy/<deploy-id>/*.sh. Sourced, never executed directly.
2
+ # Requires lib/github-actions-logging.sh for deploy_step.
3
+
4
+ LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
+ source "$LIB_DIR/config.sh"
6
+
7
+ # The host configuration store, if this node has one.
8
+ #
9
+ # Every step below drives the CLI through `sudo`, so the store the CLI writes is root's, not the
10
+ # store of whoever sourced this file. Both are looked at, the sourcing account first, so a script
11
+ # run as root and a script run as an operator with sudo read the same node configuration.
12
+ #
13
+ # Usage: host_config_path
14
+ host_config_path() {
15
+ local root path
16
+
17
+ root="$(npm root -g 2>/dev/null)" || root=''
18
+ path="$root/underpost/.env"
19
+ if [ -n "$root" ] && [ -f "$path" ]; then
20
+ printf '%s' "$path"
21
+ return 0
22
+ fi
23
+
24
+ # Only when the sourcing account has no store of its own: `sudo -n` is non-interactive, so a
25
+ # host without passwordless sudo declines instead of prompting.
26
+ root="$(sudo -n -- /bin/bash -lc 'npm root -g' 2>/dev/null)" || root=''
27
+ path="$root/underpost/.env"
28
+ [ -n "$root" ] && [ -f "$path" ] && printf '%s' "$path"
29
+
30
+ return 0
31
+ }
32
+
33
+ # One key of this node's resolved host configuration, read straight out of the store the host
34
+ # domain owns (`underpost host get|set`). Pure shell for the same reason `deploy_id_from_repo`
35
+ # is: it resolves the manifest that makes that CLI runnable, so it cannot ask the CLI.
36
+ #
37
+ # Usage: host_config <key>
38
+ host_config() {
39
+ local key="$1" path value
40
+
41
+ path="$(host_config_path)"
42
+ [ -n "$path" ] || return 0
43
+
44
+ value="$(sed -n "s/^[[:space:]]*${key}[[:space:]]*=[[:space:]]*//p" "$path" | tail -n 1)"
45
+ value="${value%"${value##*[![:space:]]}"}"
46
+ value="${value%\"}"
47
+ value="${value#\"}"
48
+ value="${value%\'}"
49
+ value="${value#\'}"
50
+ printf '%s' "$value"
51
+ }
52
+
53
+ # The repository pair a node prepares itself from: the environment, then the node's own host
54
+ # configuration, where `underpost wireguard --sync` records the pair it moved the node onto.
55
+ # Named nowhere else — left empty, the pull resolves the pairing itself.
56
+ ENGINE_SRC_REPO="${ENGINE_SRC_REPO:-$(host_config ENGINE_SRC_REPO)}"
57
+ ENGINE_SRC_PRIVATE_REPO="${ENGINE_SRC_PRIVATE_REPO:-$(host_config ENGINE_SRC_PRIVATE_REPO)}"
58
+
59
+ # The deploy id a source repository belongs to: `engine-cyberia` and `engine-test-cyberia` are
60
+ # both `dd-cyberia`. Pure shell on purpose — it resolves the manifest that makes the CLI
61
+ # runnable, so it cannot be resolved by running the CLI. Prints nothing for a repository that
62
+ # names no deploy (the monorepo itself), which callers read as "leave the checkout's own".
63
+ #
64
+ # Usage: deploy_id_from_repo [owner/repo]
65
+ deploy_id_from_repo() {
66
+ local name="${1:-$ENGINE_SRC_REPO}"
67
+ name="${name##*/}"
68
+ name="${name#engine-test-}"
69
+ name="${name#engine-}"
70
+ name="${name%-private}"
71
+
72
+ [ -n "$name" ] && [ "$name" != "engine" ] && printf 'dd-%s' "$name"
73
+ }
74
+
75
+ # Installs the node's dependencies from the deploy's own package manifest and links the checkout's
76
+ # CLI globally. Every later bare `underpost` command must execute this checkout, never a package
77
+ # left behind by an older image or host preparation.
78
+ #
79
+ # A deploy id owns its dependency set the same way it owns the rest of its configuration, and
80
+ # `engine-private/conf/<deploy-id>/package.json` is where that set lives. The checkout's own
81
+ # manifest is not it: a product tree declares only what it publishes, so installing against it
82
+ # prunes packages the CLI imports — and the CLI is what pulls and repairs the checkout, so the
83
+ # node loses the ability to fix itself. A deploy with no manifest of its own installs the
84
+ # checkout's, which is the previous behaviour.
85
+ #
86
+ # Usage: install_deploy_dependencies <engine-root> [deploy-id]
87
+ install_deploy_dependencies() {
88
+ local engine_root="${1:-$ENGINE_ROOT}"
89
+ local deploy_id="$2"
90
+ local manifest="engine-private/conf/$deploy_id/package.json"
91
+
92
+ if [ -n "$deploy_id" ] && [ -f "$engine_root/$manifest" ]; then
93
+ deploy_step "Install dependencies ($deploy_id)" \
94
+ sudo -n -- /bin/bash -lc "cd $engine_root && cp -a ./$manifest ./package.json && npm install"
95
+ else
96
+ deploy_step "Install dependencies" \
97
+ sudo -n -- /bin/bash -lc "cd $engine_root && npm install"
98
+ fi
99
+
100
+ # The global `underpost` is a symlink onto this checkout's entrypoint, so the link is only
101
+ # usable while that file carries its executable mode. The mode is tracked in git; the chmod
102
+ # is what carries a checkout that predates it, which is every node still to be synced.
103
+ deploy_step "Link underpost CLI" \
104
+ sudo -n -- /bin/bash -lc \
105
+ "cd $engine_root && chmod +x ./bin/index.js && npm link --force && test -x ./bin/index.js && test \"\$(readlink -f \"\$(command -v underpost)\")\" = \"\$(readlink -f ./bin/index.js)\""
106
+ }
107
+
108
+ # Brings a node to the state every deploy assumes: the engine source at HEAD, its dependencies
109
+ # installed, its CLI globally linked, and the host configuration loaded into the underpost root
110
+ # env store. `host load` is the one entry point for that store — see `underpost host`.
111
+ #
112
+ # Dependencies are installed before the pull, not only after: the pull runs through this
113
+ # checkout's own CLI, so a tree whose node_modules no longer match its manifest cannot repair
114
+ # itself — the entrypoint fails to import long before it can replace the source. They are
115
+ # installed again after it, because the pull resets the checkout to its remote and takes
116
+ # `package.json` with it.
117
+ prepare_host() {
118
+ local engine_root="${1:-$ENGINE_ROOT}"
119
+ local src_repo="${2:-$ENGINE_SRC_REPO}"
120
+ local src_private_repo="${3:-$ENGINE_SRC_PRIVATE_REPO}"
121
+ local deploy_id="${4:-$(deploy_id_from_repo "$src_repo")}"
122
+
123
+ install_deploy_dependencies "$engine_root" "$deploy_id"
124
+
125
+ deploy_step "Pull repository" \
126
+ sudo -n -- /bin/bash -lc \
127
+ "cd $engine_root && node bin run pull $src_repo${src_private_repo:+ --repo-engine-private $src_private_repo}"
128
+
129
+ install_deploy_dependencies "$engine_root" "$deploy_id"
130
+
131
+ deploy_step "Load host config" \
132
+ sudo -n -- /bin/bash -lc "cd $engine_root && node bin host load"
133
+ }
134
+
135
+ # Whether a tracked path carries uncommitted changes, as `1` or empty.
136
+ #
137
+ # An asset repository is committed only when it actually changed, so this stays outside
138
+ # `deploy_step`: its stdout is the value the caller branches on, and a step's logging would
139
+ # swallow it. The engine root is a parameter rather than an inherited global so a script that
140
+ # drives more than one checkout cannot read the wrong one.
141
+ #
142
+ # Usage: has_changes <path> [engine-root]
143
+ has_changes() {
144
+ local path="$1"
145
+ local engine_root="${2:-$ENGINE_ROOT}"
146
+
147
+ sudo -n -- /bin/bash -lc \
148
+ "cd $engine_root && node bin cmt $path --has-changes" | tr -d '\n'
149
+ }
150
+
151
+ # The in-pod bootstrap, emitted as a `--cmd` payload (comma-separated: `underpost deploy`
152
+ # splits on commas, one shell command per element).
153
+ #
154
+ # A pod starts from an image whose global `underpost` is only as new as the last image build,
155
+ # and the engine shells out to that bare command on every production path
156
+ # (`options.dev ? 'node bin' : 'underpost'`). Replacing the image's engine with this deploy's
157
+ # own source and repointing the global bin at it is what makes the pod run the CLI that
158
+ # deployed it rather than the one its image was published with.
159
+ #
160
+ # Pair it with `--skip-pull-repo-base` on the `underpost start` that follows: this *is* the pull
161
+ # `start --build` performs, so leaving it on clones and installs the same tree twice.
162
+ #
163
+ # In-pod bootstrap, emitted as a `--cmd` payload (comma-separated). Three stages, in order:
164
+ # the deploy's own source replaces the image's engine and the global bin is repointed at it;
165
+ # that CLI then stamps `container-status`, which is why the stamp cannot come first — an image
166
+ # predating the state domain answers `unknown command 'state'`. The caller appends the start.
167
+ #
168
+ # The global npm prefix is handed to the container user before either npm call: the manifest's
169
+ # `install` hook installs global tooling and `npm link` publishes the CLI there, and both write
170
+ # a tree the image left owned by root.
171
+ #
172
+ # The paths below are the container's, fixed by the image layout, and deliberately not
173
+ # `$ENGINE_ROOT`: that one names the checkout on the host running this script.
174
+ #
175
+ # Usage: pod_bootstrap_cmd <deploy-id> [env] [owner/repo]
176
+ pod_bootstrap_cmd() {
177
+ local deploy_id="$1"
178
+ local env="${2:-production}"
179
+ local repo="${3:-underpostnet/engine-test-${deploy_id#dd-}}"
180
+ local name="${repo##*/}"
181
+
182
+ printf '%s' "cd /home/dd, \
183
+ underpost clone ${repo}, \
184
+ mkdir -p /home/dd/engine, \
185
+ cp -a /home/dd/${name}/. /home/dd/engine/, \
186
+ rm -rf /home/dd/${name}, \
187
+ cd /home/dd/engine, \
188
+ sudo mkdir -p \$(npm prefix -g)/lib/node_modules \$(npm prefix -g)/bin, \
189
+ sudo chown -R \$(id -u):\$(id -g) \$(npm prefix -g)/lib/node_modules \$(npm prefix -g)/bin, \
190
+ npm install, \
191
+ npm link --force, \
192
+ test \"\$(readlink -f \"\$(command -v underpost)\")\" = \"\$(readlink -f ./bin/index.js)\", \
193
+ underpost state set container-status ${deploy_id}-${env}-build-deployment"
194
+ }
@@ -0,0 +1,65 @@
1
+ # Runtime telemetry streaming. Sourced, never executed directly.
2
+ #
3
+ # The one source of streamed state for every context. Nothing here is conditional on GitHub
4
+ # Actions: annotations are just the rendering the state domain picks when it detects a workflow.
5
+
6
+ LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ source "$LIB_DIR/config.sh"
8
+
9
+ STATE_ENV="${STATE_ENV:-production}"
10
+ STATE_NAMESPACE="${STATE_NAMESPACE:-default}"
11
+ STATE_STREAM="${STATE_STREAM:-1}"
12
+ # Seconds between frames. The live table is the default; 0 observes once and exits, which is
13
+ # what a non-interactive caller wants.
14
+ STATE_WATCH="${STATE_WATCH:-2}"
15
+
16
+ # Streams one observation of a deployment's live execution state, health and metrics.
17
+ #
18
+ # Not wrapped in deploy_step: run_quiet prints only pattern-matched lines and discards its debug
19
+ # log on success, so the payload never reached the terminal. The target defaults to the caller's
20
+ # directory name.
21
+ #
22
+ # Usage: stream_state <engine-root> [deploy-id] [instance-id]
23
+ stream_state() {
24
+ local engine_root="${1:-$ENGINE_ROOT}"
25
+ local deploy_id="${2:-$(basename "$(cd "$(dirname "${BASH_SOURCE[1]}")" && pwd)")}"
26
+ local instance_id="${3:-}"
27
+ local args="deploy-id=${deploy_id}"
28
+ local target="$deploy_id"
29
+
30
+ [ "$STATE_STREAM" = "0" ] && return 0
31
+
32
+ if [ -n "$instance_id" ]; then
33
+ args="${args},instance-id=${instance_id}"
34
+ target="${deploy_id}/${instance_id}"
35
+ fi
36
+
37
+ deploy_start "Runtime state ${target}"
38
+
39
+ if [ "$STATE_WATCH" != "0" ]; then
40
+ # In-place redraw, the same shape run_quiet uses for the deploy table: the cursor is
41
+ # parked above the block and each frame overwrites it. Runs until interrupted.
42
+ local refresh=0 frame lines=0
43
+ printf '\033[?25l'
44
+ trap 'printf "\033[?25h\n"; return 0' INT
45
+ while true; do
46
+ refresh=$((refresh + 1))
47
+ frame=$(sudo -n -- /bin/bash -lc \
48
+ "cd ${engine_root} && node bin state status \
49
+ --env ${STATE_ENV} \
50
+ --namespace ${STATE_NAMESPACE} \
51
+ --args ${args},refresh=${refresh}" 2>/dev/null)
52
+ [ "$lines" -gt 0 ] && printf '\033[%dA' "$lines"
53
+ printf '%s\n' "$frame" | while IFS= read -r line; do printf '%s\033[K\n' "$line"; done
54
+ lines=$(printf '%s\n' "$frame" | wc -l)
55
+ sleep "$STATE_WATCH"
56
+ done
57
+ fi
58
+
59
+ # RUN_QUIET_CI survives the SSH hop; unset in an ordinary shell, where this prints JSON.
60
+ sudo -n -- /bin/bash -lc \
61
+ "cd ${engine_root} && RUN_QUIET_CI=${RUN_QUIET_CI:-} node bin state publish \
62
+ --env ${STATE_ENV} \
63
+ --namespace ${STATE_NAMESPACE} \
64
+ --args ${args}"
65
+ }
@@ -2,71 +2,46 @@
2
2
  set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
- source "$SCRIPT_DIR/../lib/logging.sh"
5
+ source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
6
6
 
7
7
  # Runs in the workflow's rockylinux:9 container against the checked-out
8
8
  # workspace instead of over SSH, so the repository root is this script's
9
9
  # grandparent rather than a fixed remote path.
10
10
  REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
11
11
 
12
+ DEPLOY_ID=dd-github-pages
13
+
12
14
  main() {
13
- echo "Starting github pages deploy"
15
+ deploy_start "Starting github pages deploy"
14
16
 
15
17
  cd "$REPO_ROOT"
16
18
 
17
- run_quiet \
18
- "Install required packages" \
19
- "Target pod:" \
20
- 14 \
19
+ deploy_step "Install required packages" \
21
20
  dnf install -y sudo tar gzip bzip2 git
22
21
 
23
- run_quiet \
24
- "Install curl" \
25
- "Target pod:" \
26
- 14 \
22
+ deploy_step "Install curl" \
27
23
  dnf install -y curl --allowerasing
28
24
 
29
- run_quiet \
30
- "Add Node.js repository" \
31
- "Target pod:" \
32
- 14 \
25
+ deploy_step "Add Node.js repository" \
33
26
  bash -c "curl -fsSL https://rpm.nodesource.com/setup_24.x | bash -"
34
27
 
35
- run_quiet \
36
- "Install Node.js" \
37
- "Target pod:" \
38
- 14 \
28
+ deploy_step "Install Node.js" \
39
29
  dnf install nodejs -y
40
30
 
41
- run_quiet \
42
- "Install dependencies" \
43
- "Target pod:" \
44
- 14 \
31
+ deploy_step "Install dependencies" \
45
32
  npm install
46
33
 
47
- run_quiet \
48
- "Build dd-github-pages configuration" \
49
- "Target pod:" \
50
- 14 \
51
- node bin new --default-conf --conf-workflow-id dd-github-pages
34
+ deploy_step "Build $DEPLOY_ID configuration" \
35
+ node bin new --default-conf --conf-workflow-id $DEPLOY_ID
52
36
 
53
- run_quiet \
54
- "Create dd-github-pages deployment" \
55
- "Target pod:" \
56
- 14 \
57
- node bin new --deploy-id dd-github-pages
37
+ deploy_step "Create $DEPLOY_ID deployment" \
38
+ node bin new --deploy-id $DEPLOY_ID
58
39
 
59
- run_quiet \
60
- "Load dd-github-pages production environment" \
61
- "Target pod:" \
62
- 14 \
63
- node bin env dd-github-pages production
40
+ deploy_step "Load $DEPLOY_ID production environment" \
41
+ node bin app load --env production --args deploy-id=$DEPLOY_ID
64
42
 
65
- run_quiet \
66
- "Build dd-github-pages client" \
67
- "Target pod:" \
68
- 14 \
69
- env NODE_ENV=production node bin client dd-github-pages '' underpostnet.github.io /pwa-microservices-template-ghpkg
43
+ deploy_step "Build $DEPLOY_ID client" \
44
+ env NODE_ENV=production node bin client $DEPLOY_ID '' underpostnet.github.io /pwa-microservices-template-ghpkg
70
45
  }
71
46
 
72
47
  main "$@"
@@ -2,59 +2,27 @@
2
2
  set -euo pipefail
3
3
 
4
4
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5
- source "$SCRIPT_DIR/../lib/logging.sh"
6
-
7
- ENGINE_ROOT=/home/dd/engine
5
+ source "$SCRIPT_DIR/../lib/github-actions-logging.sh"
6
+ source "$SCRIPT_DIR/../lib/host.sh"
8
7
 
9
8
  main() {
10
- echo "Starting remote release deploy"
11
-
12
- run_quiet \
13
- "Pull repository" \
14
- "Target pod:" \
15
- 14 \
16
- sudo -n -- /bin/bash -lc \
17
- "cd $ENGINE_ROOT && node bin run pull"
9
+ deploy_start "Starting remote release deploy"
18
10
 
19
- run_quiet \
20
- "Install dependencies" \
21
- "Target pod:" \
22
- 14 \
23
- sudo -n -- /bin/bash -lc \
24
- "cd $ENGINE_ROOT && npm install"
25
-
26
- run_quiet \
27
- "Sync secrets" \
28
- "Target pod:" \
29
- 14 \
30
- sudo -n -- /bin/bash -lc \
31
- "cd $ENGINE_ROOT && node bin run secret"
11
+ prepare_host "$ENGINE_ROOT"
32
12
 
33
- run_quiet \
34
- "Install underpost CLI" \
35
- "Target pod:" \
36
- 14 \
13
+ deploy_step "Install underpost CLI" \
37
14
  sudo -n -- /bin/bash -lc \
38
15
  "cd $ENGINE_ROOT && npm install -g underpost"
39
16
 
40
- run_quiet \
41
- "Resync secrets" \
42
- "Target pod:" \
43
- 14 \
17
+ deploy_step "Resync secrets" \
44
18
  sudo -n -- /bin/bash -lc \
45
- "cd $ENGINE_ROOT && node bin run secret"
19
+ "cd $ENGINE_ROOT && node bin host load"
46
20
 
47
- run_quiet \
48
- "Configure git" \
49
- "Target pod:" \
50
- 14 \
21
+ deploy_step "Configure git" \
51
22
  sudo -n -- /bin/bash -lc \
52
23
  "cd $ENGINE_ROOT && node bin run --dev git-conf"
53
24
 
54
- run_quiet \
55
- "Build and publish docker images" \
56
- "Target pod:" \
57
- 14 \
25
+ deploy_step "Build and publish docker images" \
58
26
  sudo -n -- /bin/bash -lc \
59
27
  "cd $ENGINE_ROOT && node bin run docker-image"
60
28
  }
package/deployment.yaml CHANGED
@@ -20,11 +20,17 @@ spec:
20
20
  spec:
21
21
  containers:
22
22
  - name: dd-cyberia-development-blue
23
- image: underpost/underpost-engine:v3.3.0
23
+ image: underpost/underpost-engine:v3.3.76
24
24
  imagePullPolicy: IfNotPresent
25
25
  envFrom:
26
26
  - secretRef:
27
27
  name: underpost-config
28
+ # The deployment's own environment, with its .env.<env>.oci overlay already
29
+ # applied by 'app apply'. Optional so a deployment predating that Secret still
30
+ # starts; the in-pod 'app load' resolves the same overlay as a second path.
31
+ - secretRef:
32
+ name: dd-cyberia-development-env
33
+ optional: true
28
34
  env:
29
35
  - name: UNDERPOST_INTERNAL_PORT
30
36
  value: "4004"
@@ -33,7 +39,6 @@ spec:
33
39
  - /bin/sh
34
40
  - -c
35
41
  - >
36
- underpost secret underpost --create-from-env &&
37
42
  underpost start --build --run dd-cyberia development
38
43
  readinessProbe:
39
44
  {
@@ -135,7 +135,7 @@ services:
135
135
  # server starts but rejects connections until seeded). Serves REST/WS on 4005
136
136
  # and the engine gRPC data service on 50051.
137
137
  engine-cyberia-runtime:
138
- image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.0}
138
+ image: ${ENGINE_CYBERIA_IMAGE:-underpost/engine-cyberia-dev}:${ENGINE_CYBERIA_TAG:-v3.3.76}
139
139
  container_name: dd-cyberia-engine
140
140
  command:
141
141
  - /bin/sh
@@ -190,14 +190,16 @@ services:
190
190
  # gateway on host port 8081, so one port can route every instance path.
191
191
 
192
192
  cyberia-server-runtime:
193
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
193
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.76}
194
194
  container_name: dd-cyberia-server
195
195
  environment:
196
196
  INSTANCE_CODE: amethyst-strata-expansion
197
197
  CYBERIA_BASE_PATH: /
198
- ENGINE_API_BASE_URL: ${ENGINE_API_BASE_URL:-http://engine-cyberia}
198
+ CYBERIA_PUBLIC_URL: ${CYBERIA_SERVER_PUBLIC_ORIGIN:-http://localhost:8081}
199
+ CYBERIA_SERVER_API_KEY: ${CYBERIA_SERVER_API_KEY:-}
200
+ CYBERIA_DATA_SERVER_URL: ${CYBERIA_DATA_SERVER_URL:-http://engine-cyberia}
199
201
  ENGINE_PUBLIC_URL: ${ENGINE_PUBLIC_URL:-http://localhost:4005}
200
- ENGINE_GRPC_ADDRESS: ${ENGINE_GRPC_ADDRESS:-engine-cyberia-runtime:50051}
202
+ CYBERIA_DATA_SERVER_GRPC: ${CYBERIA_DATA_SERVER_GRPC:-engine-cyberia-runtime:50051}
201
203
  ENGINE_GRPC_RELOAD_INTERVAL_SEC: ${ENGINE_GRPC_RELOAD_INTERVAL_SEC:-300}
202
204
  STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
203
205
  APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
@@ -226,14 +228,16 @@ services:
226
228
  restart: unless-stopped
227
229
 
228
230
  cyberia-server-forest:
229
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
231
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.76}
230
232
  container_name: dd-cyberia-server-forest
231
233
  environment:
232
234
  INSTANCE_CODE: FOREST
233
235
  CYBERIA_BASE_PATH: /FOREST
234
- ENGINE_API_BASE_URL: ${ENGINE_API_BASE_URL:-http://engine-cyberia}
236
+ CYBERIA_PUBLIC_URL: ${CYBERIA_SERVER_PUBLIC_ORIGIN:-http://localhost:8081}/FOREST
237
+ CYBERIA_SERVER_API_KEY: ${CYBERIA_SERVER_API_KEY:-}
238
+ CYBERIA_DATA_SERVER_URL: ${CYBERIA_DATA_SERVER_URL:-http://engine-cyberia}
235
239
  ENGINE_PUBLIC_URL: ${ENGINE_PUBLIC_URL:-http://localhost:4005}
236
- ENGINE_GRPC_ADDRESS: ${ENGINE_GRPC_ADDRESS:-engine-cyberia-runtime:50051}
240
+ CYBERIA_DATA_SERVER_GRPC: ${CYBERIA_DATA_SERVER_GRPC:-engine-cyberia-runtime:50051}
237
241
  ENGINE_GRPC_RELOAD_INTERVAL_SEC: ${ENGINE_GRPC_RELOAD_INTERVAL_SEC:-300}
238
242
  STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
239
243
  APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
@@ -262,14 +266,16 @@ services:
262
266
  restart: unless-stopped
263
267
 
264
268
  cyberia-server-test:
265
- image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.0}
269
+ image: ${CYBERIA_SERVER_IMAGE:-underpost/cyberia-server-dev}:${CYBERIA_SERVER_TAG:-v3.3.76}
266
270
  container_name: dd-cyberia-server-test
267
271
  environment:
268
272
  INSTANCE_CODE: TEST
269
273
  CYBERIA_BASE_PATH: /TEST
270
- ENGINE_API_BASE_URL: ${ENGINE_API_BASE_URL:-http://engine-cyberia}
274
+ CYBERIA_PUBLIC_URL: ${CYBERIA_SERVER_PUBLIC_ORIGIN:-http://localhost:8081}/TEST
275
+ CYBERIA_SERVER_API_KEY: ${CYBERIA_SERVER_API_KEY:-}
276
+ CYBERIA_DATA_SERVER_URL: ${CYBERIA_DATA_SERVER_URL:-http://engine-cyberia}
271
277
  ENGINE_PUBLIC_URL: ${ENGINE_PUBLIC_URL:-http://localhost:4005}
272
- ENGINE_GRPC_ADDRESS: ${ENGINE_GRPC_ADDRESS:-engine-cyberia-runtime:50051}
278
+ CYBERIA_DATA_SERVER_GRPC: ${CYBERIA_DATA_SERVER_GRPC:-engine-cyberia-runtime:50051}
273
279
  ENGINE_GRPC_RELOAD_INTERVAL_SEC: ${ENGINE_GRPC_RELOAD_INTERVAL_SEC:-300}
274
280
  STATIC_DIR: ${CYBERIA_SERVER_STATIC_DIR:-/home/dd/engine/cyberia-server/public}
275
281
  APP_ENV: ${CYBERIA_SERVER_APP_ENV:-development}
@@ -299,7 +305,7 @@ services:
299
305
 
300
306
  # === Tier 4: presentation, one per variant ===============================
301
307
  # One WASM bundle serves every variant; the instance is resolved from the URL
302
- # sub-path (docker-driver injects CYBERIA_BASE_PATH / _WS_ORIGIN /
308
+ # sub-path (wasm-driver injects CYBERIA_BASE_PATH / _WS_ORIGIN /
303
309
  # _ENGINE_API_ORIGIN / _DEFAULT_INSTANCE). Each client waits ONLY for its own
304
310
  # server, so the three
305
311
  # server->client pipelines advance independently (in parallel) once the shared
@@ -309,7 +315,7 @@ services:
309
315
  # cyberia-server-test -> cyberia-client-test
310
316
 
311
317
  cyberia-client-runtime:
312
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
318
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.76}
313
319
  container_name: dd-cyberia-client
314
320
  environment:
315
321
  CYBERIA_PORT: '8081'
@@ -317,7 +323,7 @@ services:
317
323
  CYBERIA_BASE_PATH: /
318
324
  CYBERIA_DEFAULT_INSTANCE: ${CYBERIA_DEFAULT_INSTANCE:-amethyst-strata-expansion}
319
325
  CYBERIA_WS_ORIGIN: ${CYBERIA_WS_ORIGIN:-ws://localhost:8081}
320
- CYBERIA_ENGINE_API_ORIGIN: ${CYBERIA_ENGINE_API_ORIGIN:-http://localhost}
326
+ CYBERIA_DATA_SERVER_URL: ${CYBERIA_CLIENT_DATA_SERVER_URL:-http://localhost}
321
327
  networks:
322
328
  - dd-cyberia-internal
323
329
  expose:
@@ -334,7 +340,7 @@ services:
334
340
  restart: unless-stopped
335
341
 
336
342
  cyberia-client-forest:
337
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
343
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.76}
338
344
  container_name: dd-cyberia-client-forest
339
345
  environment:
340
346
  CYBERIA_PORT: '8081'
@@ -342,7 +348,7 @@ services:
342
348
  CYBERIA_BASE_PATH: /FOREST
343
349
  CYBERIA_DEFAULT_INSTANCE: ${CYBERIA_DEFAULT_INSTANCE:-amethyst-strata-expansion}
344
350
  CYBERIA_WS_ORIGIN: ${CYBERIA_WS_ORIGIN:-ws://localhost:8081}
345
- CYBERIA_ENGINE_API_ORIGIN: ${CYBERIA_ENGINE_API_ORIGIN:-http://localhost}
351
+ CYBERIA_DATA_SERVER_URL: ${CYBERIA_CLIENT_DATA_SERVER_URL:-http://localhost}
346
352
  networks:
347
353
  - dd-cyberia-internal
348
354
  expose:
@@ -359,7 +365,7 @@ services:
359
365
  restart: unless-stopped
360
366
 
361
367
  cyberia-client-test:
362
- image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.0}
368
+ image: ${CYBERIA_CLIENT_IMAGE:-underpost/cyberia-client-dev}:${CYBERIA_CLIENT_TAG:-v3.3.76}
363
369
  container_name: dd-cyberia-client-test
364
370
  environment:
365
371
  CYBERIA_PORT: '8081'
@@ -367,7 +373,7 @@ services:
367
373
  CYBERIA_BASE_PATH: /TEST
368
374
  CYBERIA_DEFAULT_INSTANCE: ${CYBERIA_DEFAULT_INSTANCE:-amethyst-strata-expansion}
369
375
  CYBERIA_WS_ORIGIN: ${CYBERIA_WS_ORIGIN:-ws://localhost:8081}
370
- CYBERIA_ENGINE_API_ORIGIN: ${CYBERIA_ENGINE_API_ORIGIN:-http://localhost}
376
+ CYBERIA_DATA_SERVER_URL: ${CYBERIA_CLIENT_DATA_SERVER_URL:-http://localhost}
371
377
  networks:
372
378
  - dd-cyberia-internal
373
379
  expose:
@@ -54,23 +54,23 @@ When `--output-path` is provided, the server serves the directory containing the
54
54
 
55
55
  See [`static-config-example.json`](./static-config-example.json) for a complete working example.
56
56
 
57
- | Field | Type | Description |
58
- |-------|------|-------------|
59
- | `page` | `string` | Path to the SSR component to render |
60
- | `outputPath` | `string` | Output HTML file path |
61
- | `buildPath` | `string` | Base path for static documents or assets (default: `"/"`) |
62
- | `env` | `string` | `"production"` or `"development"` |
63
- | `minify` | `boolean` | Minify HTML output |
64
- | `lang` | `string` | HTML `lang` attribute |
65
- | `dir` | `string` | HTML `dir` attribute (`ltr`/`rtl`) |
66
- | `metadata` | `object` | SEO metadata (title, description, keywords, author, themeColor, canonicalURL, thumbnail, locale, siteName) |
67
- | `scripts` | `object` | `{ head: [...], body: [...] }` — inline or external scripts |
68
- | `styles` | `array` | Inline (`content`) or external (`href`) stylesheets |
69
- | `icons` | `object` | `favicon`, `appleTouchIcon`, `manifest` paths |
70
- | `headComponents` | `array` | SSR component paths injected into `<head>` |
71
- | `bodyComponents` | `array` | SSR component paths injected into `<body>` |
72
- | `microdata` | `array` | JSON-LD structured data objects |
73
- | `customPayload` | `object` | Arbitrary data injected into the render payload |
57
+ | Field | Type | Description |
58
+ | ---------------- | --------- | ---------------------------------------------------------------------------------------------------------- |
59
+ | `page` | `string` | Path to the SSR component to render |
60
+ | `outputPath` | `string` | Output HTML file path |
61
+ | `buildPath` | `string` | Base path for static documents or assets (default: `"/"`) |
62
+ | `env` | `string` | `"production"` or `"development"` |
63
+ | `minify` | `boolean` | Minify HTML output |
64
+ | `lang` | `string` | HTML `lang` attribute |
65
+ | `dir` | `string` | HTML `dir` attribute (`ltr`/`rtl`) |
66
+ | `metadata` | `object` | SEO metadata (title, description, keywords, author, themeColor, canonicalURL, thumbnail, locale, siteName) |
67
+ | `scripts` | `object` | `{ head: [...], body: [...] }` — inline or external scripts |
68
+ | `styles` | `array` | Inline (`content`) or external (`href`) stylesheets |
69
+ | `icons` | `object` | `favicon`, `appleTouchIcon`, `manifest` paths |
70
+ | `headComponents` | `array` | SSR component paths injected into `<head>` |
71
+ | `bodyComponents` | `array` | SSR component paths injected into `<body>` |
72
+ | `microdata` | `array` | JSON-LD structured data objects |
73
+ | `customPayload` | `object` | Arbitrary data injected into the render payload |
74
74
 
75
75
  ## CLI Flags
76
76
 
@@ -138,10 +138,10 @@ underpost static --page <path> # SSR component path
138
138
 
139
139
  The page content is defined in an SSR component file. See [`ssr-components/CustomPage.js`](./ssr-components/CustomPage.js) for an example.
140
140
 
141
- A component exports an `SrrComponent` function that returns an HTML template literal:
141
+ A component exports an `SSRComponent` function that returns an HTML template literal:
142
142
 
143
143
  ```js
144
- SrrComponent = () => html`
144
+ SSRComponent = () => html`
145
145
  <div>
146
146
  <h1>Hello World</h1>
147
147
  <p>Your page content here.</p>
@@ -5,10 +5,10 @@
5
5
 
6
6
  /**
7
7
  * SSR Component Example for rendering a custom landing page
8
- * @function SrrComponent
8
+ * @function SSRComponent
9
9
  * @returns {string} HTML string for the page body
10
10
  */
11
- SrrComponent = () => html`
11
+ SSRComponent = () => html`
12
12
  <!-- Main Container -->
13
13
  <div class="custom-page">
14
14
  <!-- Hero Section -->