@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,356 @@
1
+ /**
2
+ * The deploy route registry, and the routers built from it.
3
+ *
4
+ * Two levels of "route" meet here, which is why they share a module:
5
+ *
6
+ * - `engine-private/deploy/dd.routes` lists the deploy ids this engine serves.
7
+ * It is the cluster's route table at the deploy level, and every command that
8
+ * accepts the `dd` meta id expands it through this file.
9
+ * - The proxy routers map `<host><path>` to the local port a runtime bound, and
10
+ * are derived from each deploy's `conf.server.json`.
11
+ *
12
+ * Keeping both here means the file path is written once and the port arithmetic
13
+ * lives beside the list it is computed for.
14
+ *
15
+ * @module src/server/network/router.js
16
+ * @namespace ServerRouter
17
+ */
18
+
19
+ import fs from 'fs-extra';
20
+ import { newInstance, orderArrayFromAttrInt, range } from '../../client/components/core/CommonJs.js';
21
+ import { loggerFactory } from '../ops/logger.js';
22
+ import { Config, DEFAULT_DEPLOY_ID, isDevProxyContext, isTlsDevProxy, loadConfServerJson } from '../runtime/conf.js';
23
+
24
+ const logger = loggerFactory(import.meta);
25
+
26
+ /**
27
+ * @constant DEPLOY_ROUTES_PATH
28
+ * @description The deploy route table: a comma separated list of the deploy ids
29
+ * this engine serves.
30
+ * @memberof ServerRouter
31
+ */
32
+ const DEPLOY_ROUTES_PATH = './engine-private/deploy/dd.routes';
33
+
34
+ /**
35
+ * @method deployRoutesExists
36
+ * @description Whether the route table is present.
37
+ * @returns {boolean} True when the engine has a route table.
38
+ * @memberof ServerRouter
39
+ */
40
+ const deployRoutesExists = () => fs.existsSync(DEPLOY_ROUTES_PATH);
41
+
42
+ /**
43
+ * @method readDeployRoutes
44
+ * @description The deploy ids in the route table, trimmed and without empties.
45
+ * @returns {string[]} Deploy ids, empty when no table exists.
46
+ * @memberof ServerRouter
47
+ */
48
+ const readDeployRoutes = () =>
49
+ deployRoutesExists() ? parseDeployRoutes(fs.readFileSync(DEPLOY_ROUTES_PATH, 'utf8')) : [];
50
+
51
+ /**
52
+ * @method parseDeployRoutes
53
+ * @description Parses route table contents. Kept separate from the read so the
54
+ * parsing is testable without a checkout.
55
+ * @param {string} [contents] - Raw route table contents.
56
+ * @returns {string[]} Deploy ids, trimmed, empties dropped.
57
+ * @memberof ServerRouter
58
+ */
59
+ const parseDeployRoutes = (contents = '') =>
60
+ `${contents || ''}`
61
+ .split(',')
62
+ .map((id) => id.trim())
63
+ .filter(Boolean);
64
+
65
+ /**
66
+ * @method registerDeployRoute
67
+ * @description Appends a deploy id to the route table, creating it when absent.
68
+ *
69
+ * Idempotent: a deploy already routed is left alone rather than listed twice,
70
+ * which would make every `dd` fan-out build and deploy it twice.
71
+ * @param {string} deployId - Deploy id to route.
72
+ * @returns {string[]} The resulting route table.
73
+ * @memberof ServerRouter
74
+ */
75
+ const registerDeployRoute = (deployId) => {
76
+ const id = `${deployId || ''}`.trim();
77
+ if (!id) return readDeployRoutes();
78
+ const routes = readDeployRoutes();
79
+ if (routes.includes(id)) return routes;
80
+ routes.push(id);
81
+ fs.outputFileSync(DEPLOY_ROUTES_PATH, routes.join(','), 'utf8');
82
+ return routes;
83
+ };
84
+
85
+ /**
86
+ * @method resolveDeployList
87
+ * @description Resolves the concrete deploy ids a run should iterate over.
88
+ *
89
+ * The meta deploy id `dd` fans out to the route table; when no table exists
90
+ * (e.g. the private repository is not checked out) it falls back to
91
+ * {@link ServerConfBuilder.DEFAULT_DEPLOY_ID}. Any other value is parsed as a
92
+ * comma separated list.
93
+ * @param {string} deployId - A deploy id, a comma separated list, or the `dd` meta id.
94
+ * @returns {string[]} Ordered list of concrete deploy ids.
95
+ * @memberof ServerRouter
96
+ */
97
+ const resolveDeployList = (deployId) => {
98
+ if (deployId !== 'dd') return parseDeployRoutes(deployId);
99
+ const routes = readDeployRoutes();
100
+ return routes.length > 0 ? routes : parseDeployRoutes(DEFAULT_DEPLOY_ID);
101
+ };
102
+
103
+ /**
104
+ * @method buildProxyRouter
105
+ * @description Builds the proxy router.
106
+ * @memberof ServerRouter
107
+ */
108
+ const buildProxyRouter = () => {
109
+ const confServer = newInstance(Config.default.server);
110
+ let currentPort = parseInt(process.env.PORT) + 1;
111
+ const proxyRouter = {};
112
+ for (const host of Object.keys(confServer)) {
113
+ for (const path of Object.keys(confServer[host])) {
114
+ if (confServer[host][path].singleReplica) continue;
115
+
116
+ if (isDevProxyContext()) confServer[host][path].proxy = [isTlsDevProxy() ? 443 : 80];
117
+
118
+ confServer[host][path].port = newInstance(currentPort);
119
+ for (const port of confServer[host][path].proxy) {
120
+ if (!(port in proxyRouter)) proxyRouter[port] = {};
121
+ proxyRouter[port][`${host}${path}`] = {
122
+ // target: `http://${host}:${confServer[host][path].port}${path}`,
123
+ target: `http://localhost:${confServer[host][path].port}`,
124
+ // target: `http://127.0.0.1:${confServer[host][path].port}`,
125
+ proxy: confServer[host][path].proxy,
126
+ redirect: confServer[host][path].redirect,
127
+ host,
128
+ path,
129
+ };
130
+ }
131
+ currentPort++;
132
+ if (confServer[host][path].peer) {
133
+ const peerPath = path === '/' ? `/peer` : `${path}/peer`;
134
+ confServer[host][peerPath] = newInstance(confServer[host][path]);
135
+ confServer[host][peerPath].port = newInstance(currentPort);
136
+ for (const port of confServer[host][path].proxy) {
137
+ if (!(port in proxyRouter)) proxyRouter[port] = {};
138
+ proxyRouter[port][`${host}${peerPath}`] = {
139
+ // target: `http://${host}:${confServer[host][peerPath].port}${peerPath}`,
140
+ target: `http://localhost:${confServer[host][peerPath].port}`,
141
+ // target: `http://127.0.0.1:${confServer[host][peerPath].port}`,
142
+ proxy: confServer[host][peerPath].proxy,
143
+ host,
144
+ path: peerPath,
145
+ };
146
+ }
147
+ currentPort++;
148
+ }
149
+ }
150
+ }
151
+
152
+ return proxyRouter;
153
+ };
154
+
155
+ /**
156
+ * @method pathPortAssignmentFactory
157
+ * @description Creates the path port assignment.
158
+ * @param {string} deployId - The deploy ID.
159
+ * @param {object} router - The router.
160
+ * @param {object} confServer - The server configuration.
161
+ * @memberof ServerRouter
162
+ */
163
+ const pathPortAssignmentFactory = async (deployId, router, confServer) => {
164
+ const pathPortAssignmentData = {};
165
+ for (const host of Object.keys(confServer)) {
166
+ const pathPortAssignment = [];
167
+ for (const path of Object.keys(confServer[host])) {
168
+ const { peer } = confServer[host][path];
169
+ if (!router[`${host}${path === '/' ? '' : path}`]) continue;
170
+ const port = parseInt(router[`${host}${path === '/' ? '' : path}`].split(':')[2]);
171
+ // logger.info('', { host, port, path });
172
+ pathPortAssignment.push({
173
+ port,
174
+ path,
175
+ });
176
+
177
+ if (peer) {
178
+ // logger.info('', { host, port: port + 1, path: '/peer' });
179
+ pathPortAssignment.push({
180
+ port: port + 1,
181
+ path: `${path === '/' ? '' : path}/peer`,
182
+ });
183
+ }
184
+ }
185
+ pathPortAssignmentData[host] = pathPortAssignment;
186
+ }
187
+ if (fs.existsSync(`./engine-private/replica`)) {
188
+ const singleReplicas = await fs.readdir(`./engine-private/replica`);
189
+ for (let replica of singleReplicas) {
190
+ if (replica.startsWith(deployId)) {
191
+ const replicaServerConf = loadConfServerJson(`./engine-private/replica/${replica}/conf.server.json`);
192
+ for (const host of Object.keys(replicaServerConf)) {
193
+ const pathPortAssignment = [];
194
+ for (const path of Object.keys(replicaServerConf[host])) {
195
+ const { peer } = replicaServerConf[host][path];
196
+ if (!router[`${host}${path === '/' ? '' : path}`]) continue;
197
+ const port = parseInt(router[`${host}${path === '/' ? '' : path}`].split(':')[2]);
198
+ // logger.info('', { host, port, path });
199
+ pathPortAssignment.push({
200
+ port,
201
+ path,
202
+ });
203
+
204
+ if (peer) {
205
+ // logger.info('', { host, port: port + 1, path: '/peer' });
206
+ pathPortAssignment.push({
207
+ port: port + 1,
208
+ path: `${path === '/' ? '' : path}/peer`,
209
+ });
210
+ }
211
+ }
212
+ pathPortAssignmentData[host] = pathPortAssignmentData[host].concat(pathPortAssignment);
213
+ }
214
+ }
215
+ }
216
+ }
217
+ return pathPortAssignmentData;
218
+ };
219
+
220
+ /**
221
+ * @method deployRangePortFactory
222
+ * @description Creates the deploy range port factory.
223
+ * @param {object} router - The router.
224
+ * @returns {object} - The deploy range port factory.
225
+ * @memberof ServerRouter
226
+ */
227
+ const deployRangePortFactory = (router) => {
228
+ const ports = Object.values(router).map((p) => parseInt(p.split(':')[2]));
229
+ const fromPort = Math.min(...ports);
230
+ const toPort = Math.max(...ports);
231
+ return { ports, fromPort, toPort };
232
+ };
233
+
234
+ /**
235
+ * @method buildKindPorts
236
+ * @description Builds the kind ports.
237
+ * @param {number} from - The from port.
238
+ * @param {number} to - The to port.
239
+ * @returns {string} - The kind ports.
240
+ * @memberof ServerRouter
241
+ */
242
+ const buildKindPorts = (from, to) =>
243
+ range(parseInt(from), parseInt(to))
244
+ .map(
245
+ (port) => ` - name: 'tcp-${port}'
246
+ protocol: TCP
247
+ port: ${port}
248
+ targetPort: ${port}
249
+ - name: 'udp-${port}'
250
+ protocol: UDP
251
+ port: ${port}
252
+ targetPort: ${port}
253
+ `,
254
+ )
255
+ .join('\n');
256
+
257
+ /**
258
+ * @method buildPortProxyRouter
259
+ * @description Builds the port proxy router.
260
+ * @param {object} options - The options.
261
+ * @param {number} [options.port=4000] - The port.
262
+ * @param {object} options.proxyRouter - The proxy router.
263
+ * @param {object} [options.hosts] - The hosts.
264
+ * @param {boolean} [options.orderByPathLength=false] - Whether to order by path length.
265
+ * @param {boolean} [options.devProxyContext=false] - Whether to use dev proxy context.
266
+ * @returns {object} - The port proxy router.
267
+ * @memberof ServerRouter
268
+ */
269
+ const buildPortProxyRouter = (
270
+ options = { port: 4000, proxyRouter, hosts, orderByPathLength: false, devProxyContext: false },
271
+ ) => {
272
+ let { port, proxyRouter, hosts, orderByPathLength } = options;
273
+ hosts = hosts || proxyRouter[port] || {};
274
+
275
+ const router = {};
276
+ // build router
277
+ Object.keys(hosts).map((hostKey) => {
278
+ let { host, path, target, proxy, peer } = hosts[hostKey];
279
+
280
+ if (!proxy.includes(port)) {
281
+ logger.warn('Proxy port not set on conf', { port, host, path, proxy, target });
282
+ if (process.env.NODE_ENV === 'production') {
283
+ logger.warn('Omitting host', { host, path, target });
284
+ return;
285
+ }
286
+ }
287
+ // ${process.env.NODE_ENV === 'development' && !isDevProxyContext() ? `:${port}` : ''}
288
+ const absoluteHost = [80, 443].includes(port)
289
+ ? `${host}${path === '/' ? '' : path}`
290
+ : `${host}:${port}${path === '/' ? '' : path}`;
291
+
292
+ if (absoluteHost in router)
293
+ logger.warn('Overwrite: Absolute host already exists on router', { absoluteHost, target });
294
+
295
+ if (options.devProxyContext === true) {
296
+ const appDevPort = parseInt(target.split(':')[2]) - process.env.DEV_PROXY_PORT_OFFSET;
297
+ router[absoluteHost] = `http://localhost:${appDevPort}`;
298
+ } else router[absoluteHost] = target;
299
+ }); // order router
300
+
301
+ if (Object.keys(router).length === 0) return router;
302
+
303
+ const devApiConfPath = `./engine-private/conf/${process.argv[3]}/conf.server.dev.${process.argv[4]}-dev-api.json`;
304
+ if (options.devProxyContext === true && process.env.NODE_ENV === 'development' && fs.existsSync(devApiConfPath)) {
305
+ const confDevApiServer = JSON.parse(fs.readFileSync(devApiConfPath, 'utf8'));
306
+ let devApiHosts = [];
307
+ let origins = [];
308
+ for (const _host of Object.keys(confDevApiServer))
309
+ for (const _path of Object.keys(confDevApiServer[_host])) {
310
+ if (confDevApiServer[_host][_path].origins && confDevApiServer[_host][_path].origins.length) {
311
+ origins.push(...confDevApiServer[_host][_path].origins);
312
+ if (_path !== 'peer' && devApiHosts.length === 0)
313
+ devApiHosts.push(
314
+ `${_host}${[80, 443].includes(port) && isDevProxyContext() ? '' : `:${port}`}${_path == '/' ? '' : _path}`,
315
+ );
316
+ }
317
+ }
318
+ origins = Array.from(new Set(origins));
319
+ console.log({
320
+ origins,
321
+ devApiHosts,
322
+ });
323
+ for (const devApiHost of devApiHosts) {
324
+ if (devApiHost in router) {
325
+ const target = router[devApiHost];
326
+ delete router[devApiHost];
327
+ router[`${devApiHost}/${process.env.BASE_API}`] = target;
328
+ router[`${devApiHost}/socket.io`] = target;
329
+ for (const origin of origins) router[devApiHost] = origin;
330
+ }
331
+ }
332
+ }
333
+
334
+ if (orderByPathLength === true) {
335
+ const reOrderRouter = {};
336
+ for (const absoluteHostKey of orderArrayFromAttrInt(Object.keys(router), 'length'))
337
+ reOrderRouter[absoluteHostKey] = router[absoluteHostKey];
338
+ return reOrderRouter;
339
+ }
340
+
341
+ return router;
342
+ };
343
+
344
+ export {
345
+ DEPLOY_ROUTES_PATH,
346
+ buildKindPorts,
347
+ buildPortProxyRouter,
348
+ buildProxyRouter,
349
+ deployRangePortFactory,
350
+ deployRoutesExists,
351
+ parseDeployRoutes,
352
+ pathPortAssignmentFactory,
353
+ readDeployRoutes,
354
+ registerDeployRoute,
355
+ resolveDeployList,
356
+ };
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Transport Layer Security (TLS) / SSL utilities and HTTPS server creation and management.
3
- * @module src/server/tls.js
3
+ * @module src/server/network/tls.js
4
4
  * @namespace UnderpostTLS
5
5
  */
6
6
 
7
7
  import fs from 'fs-extra';
8
8
  import https from 'https';
9
9
  import path from 'path';
10
- import { loggerFactory } from './logger.js';
10
+ import { loggerFactory } from '../ops/logger.js';
11
11
 
12
12
  const logger = loggerFactory(import.meta);
13
13
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Response compression policy for the Nginx workloads on the request path.
3
3
  *
4
- * @module src/server/underpost-compression.js
4
+ * @module src/server/network/underpost-compression.js
5
5
  * @namespace UnderpostCompression
6
6
  */
7
7
 
@@ -23,19 +23,19 @@
23
23
  * `www.cyberiaonline.com` + `/` + 404 becomes
24
24
  * `www.cyberiaonline.com/root/status-pages/404/index.html`.
25
25
  *
26
- * @module src/server/underpost-gateway.js
26
+ * @module src/server/network/underpost-gateway.js
27
27
  * @namespace UnderpostGateway
28
28
  */
29
29
 
30
30
  import crypto from 'node:crypto';
31
31
  import fs from 'fs-extra';
32
32
  import nodePath from 'node:path';
33
- import { timer } from '../client/components/core/CommonJs.js';
34
- import { instanceStatusPageEntriesFactory, loadConfServerJson, loadReplicas } from './conf.js';
33
+ import { timer } from '../../client/components/core/CommonJs.js';
34
+ import { instanceStatusPageEntriesFactory, loadConfServerJson, loadReplicas } from '../runtime/conf.js';
35
35
  import { compressionConfFactory, compressionModulesConfFactory, nginxImageFactory } from './underpost-compression.js';
36
- import Underpost from '../index.js';
37
- import { loggerFactory } from './logger.js';
38
- import { shellExec } from './process.js';
36
+ import Underpost from '../../index.js';
37
+ import { loggerFactory } from '../ops/logger.js';
38
+ import { shellExec } from '../runtime/process.js';
39
39
 
40
40
  const logger = loggerFactory(import.meta);
41
41
 
@@ -194,7 +194,7 @@ const defaultStatusPagePath = (status = 404) => `${UNDERPOST_GATEWAY.defaultHost
194
194
  * Compression is applied here rather than further out because this is the last
195
195
  * hop that holds a response body in the clear — and, for every host whose
196
196
  * errors are intercepted, the hop every site path already passes through. See
197
- * {@link module:src/server/underpost-compression.js}.
197
+ * {@link module:src/server/network/underpost-compression.js}.
198
198
  * @param {string} [resolver] - Cluster DNS ClusterIP.
199
199
  * @param {object} [compression] - Overrides for the compression policy.
200
200
  * @returns {string} nginx.conf contents.
@@ -20,7 +20,7 @@
20
20
  * holding every host's certificate and re-negotiating ALPN. Passing the bytes
21
21
  * through keeps certificates, HTTP/2 and mTLS exactly where they already work.
22
22
  *
23
- * @module src/server/underpost-ingress.js
23
+ * @module src/server/network/underpost-ingress.js
24
24
  * @namespace UnderpostIngress
25
25
  */
26
26
 
@@ -107,7 +107,7 @@ const underpostIngressHostMapFactory = ({ contourHosts = [], gatewayHosts = [],
107
107
  * the module makes everywhere else: an L7 hop holds a body it can encode, while
108
108
  * `:443` carries bytes this process never decrypts. Whatever leaves through the
109
109
  * tunnel on that port was compressed where TLS terminates — see
110
- * {@link module:src/server/underpost-compression.js}.
110
+ * {@link module:src/server/network/underpost-compression.js}.
111
111
  * @param {Array<object>} [entries] - Host table from {@link UnderpostIngress.underpostIngressHostMapFactory}.
112
112
  * @param {object} backends - `{contour: {http, tls}, gateway: {http, tls}}`; a missing stack is omitted.
113
113
  * @param {string} [defaultBackend] - Backend for an unmatched hostname.
@@ -3,11 +3,11 @@
3
3
  * that shells out to `crictl`: the cluster CLI, image management, and the
4
4
  * database bootstraps. Lives under `src/server` so the db layer can import it
5
5
  * without depending on the CLI god-object.
6
- * @module src/server/cri.js
6
+ * @module src/server/ops/cri.js
7
7
  * @namespace CriEndpoint
8
8
  */
9
9
 
10
- import { shellExec } from './process.js';
10
+ import { shellExec } from '../runtime/process.js';
11
11
 
12
12
  const CRIO_SOCKET_PATH = '/var/run/crio/crio.sock';
13
13