@underpostnet/cyberia 3.2.90 → 3.3.73

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 (490) hide show
  1. package/.dockerignore +1 -0
  2. package/.env.example +16 -0
  3. package/.github/workflows/coverall.cyberia.ci.yml +107 -0
  4. package/.github/workflows/cyberia-client.cd.yml +6 -18
  5. package/.github/workflows/cyberia-server.cd.yml +6 -18
  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 +6 -78
  13. package/.github/workflows/engine-cyberia.ci.yml +4 -5
  14. package/.github/workflows/ghpkg.ci.yml +42 -21
  15. package/.github/workflows/hardhat.ci.yml +12 -11
  16. package/.github/workflows/npmpkg.ci.yml +17 -15
  17. package/.github/workflows/pwa-microservices-template-page.cd.yml +1 -16
  18. package/.github/workflows/pwa-microservices-template-test.ci.yml +2 -2
  19. package/.github/workflows/release.cd.yml +2 -9
  20. package/.prettierignore +1 -0
  21. package/AGENTS.md +47 -0
  22. package/CHANGELOG.md +581 -2417
  23. package/CLI-HELP.md +416 -127
  24. package/Dockerfile +25 -9
  25. package/Dockerfile.dev +25 -9
  26. package/Dockerfile.test +4 -4
  27. package/README.md +21 -1
  28. package/bin/build.js +70 -43
  29. package/bin/build.template.js +8 -3
  30. package/bin/cyberia.js +372 -135
  31. package/bin/deploy.js +18 -104
  32. package/bin/index.js +372 -135
  33. package/compose.env +16 -0
  34. package/conf.js +93 -4
  35. package/deploy/cyberia-client/deploy.sh +47 -0
  36. package/deploy/cyberia-client/package.sh +18 -0
  37. package/deploy/cyberia-client/state.sh +14 -0
  38. package/deploy/cyberia-server/deploy.sh +47 -0
  39. package/deploy/cyberia-server/package.sh +18 -0
  40. package/deploy/cyberia-server/state.sh +14 -0
  41. package/deploy/dd-cyberia/deploy.sh +22 -0
  42. package/deploy/dd-cyberia/init.sh +55 -0
  43. package/deploy/dd-cyberia/package.sh +17 -0
  44. package/deploy/dd-cyberia/state.sh +14 -0
  45. package/deploy/dd-cyberia/sync-deploy.sh +116 -0
  46. package/deploy/lib/github-actions-logging.sh +594 -0
  47. package/deploy/lib/host.sh +185 -0
  48. package/deploy/lib/state.sh +62 -0
  49. package/deploy/pwa-microservices-template/deploy.sh +45 -0
  50. package/deploy/release/deploy.sh +32 -0
  51. package/deployment.yaml +7 -2
  52. package/docker-compose.yml +31 -37
  53. package/examples/static-page/README.md +19 -19
  54. package/examples/static-page/ssr-components/CustomPage.js +2 -2
  55. package/hardhat/hardhat.config.js +1 -6
  56. package/hardhat/package-lock.json +104 -43
  57. package/hardhat/package.json +3 -3
  58. package/manifests/alertmanager/deployment.yaml +81 -0
  59. package/manifests/blackbox-exporter/deployment.yaml +75 -0
  60. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +36 -7
  61. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +77 -0
  62. package/manifests/deployment/dd-cyberia-development/deployment.yaml +7 -2
  63. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  64. package/manifests/grafana/deployment.yaml +26 -7
  65. package/manifests/grafana/kustomization.yaml +1 -0
  66. package/manifests/grafana/service.yaml +6 -1
  67. package/manifests/mariadb/pv.yaml +1 -0
  68. package/manifests/mongodb/statefulset.yaml +9 -2
  69. package/manifests/mysql/pv-pvc.yaml +14 -1
  70. package/manifests/postgresql/pv.yaml +12 -1
  71. package/manifests/postgresql/pvc.yaml +1 -0
  72. package/manifests/prometheus/deployment.yaml +18 -22
  73. package/package.json +83 -10
  74. package/scripts/audit-selinux.sh +64 -0
  75. package/scripts/event-monitor.sh +56 -0
  76. package/scripts/gpu-diag.sh +0 -0
  77. package/scripts/ip-info.sh +0 -0
  78. package/scripts/k3s-node-setup.sh +30 -14
  79. package/scripts/kubeadm-node-setup.sh +40 -31
  80. package/scripts/lxd-vm-setup.sh +0 -0
  81. package/scripts/maas-nat-firewalld.sh +0 -0
  82. package/scripts/maas-setup.sh +8 -8
  83. package/scripts/nat-iptables.sh +2 -0
  84. package/scripts/rhel-grpc-setup.sh +0 -0
  85. package/scripts/rocky-kickstart.sh +25 -9
  86. package/scripts/selinux-normalize.sh +907 -0
  87. package/scripts/shutdown-machine.sh +843 -0
  88. package/scripts/test-monitor.sh +3 -3
  89. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +1 -1
  90. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +2 -2
  91. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +2 -2
  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 +1 -1
  99. package/src/api/cyberia-action/cyberia-action.service.js +2 -2
  100. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -1
  101. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +1 -1
  102. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +2 -2
  103. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +1 -1
  104. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
  105. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +2 -2
  106. package/src/api/cyberia-entity/cyberia-entity.controller.js +1 -1
  107. package/src/api/cyberia-entity/cyberia-entity.router.js +1 -1
  108. package/src/api/cyberia-entity/cyberia-entity.service.js +2 -2
  109. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +1 -1
  110. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +1 -1
  111. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +2 -2
  112. package/src/api/cyberia-instance/cyberia-fallback-capture.js +466 -0
  113. package/src/api/cyberia-instance/cyberia-fallback-default-items.js +63 -0
  114. package/src/api/cyberia-instance/cyberia-fallback-world.js +16 -1
  115. package/src/api/cyberia-instance/cyberia-instance-map.service.js +1 -1
  116. package/src/api/cyberia-instance/cyberia-instance.controller.js +4 -1
  117. package/src/api/cyberia-instance/cyberia-instance.router.js +15 -2
  118. package/src/api/cyberia-instance/cyberia-instance.service.js +45 -2
  119. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +1 -1
  120. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +1 -0
  121. package/src/api/cyberia-instance-conf/cyberia-instance-conf.router.js +1 -1
  122. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +2 -2
  123. package/src/api/cyberia-map/cyberia-map.controller.js +1 -1
  124. package/src/api/cyberia-map/cyberia-map.router.js +1 -1
  125. package/src/api/cyberia-map/cyberia-map.service.js +2 -2
  126. package/src/api/cyberia-quest/cyberia-quest.controller.js +1 -1
  127. package/src/api/cyberia-quest/cyberia-quest.router.js +1 -1
  128. package/src/api/cyberia-quest/cyberia-quest.service.js +2 -2
  129. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +1 -1
  130. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +1 -1
  131. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +2 -2
  132. package/src/api/cyberia-saga/cyberia-saga.controller.js +1 -1
  133. package/src/api/cyberia-saga/cyberia-saga.router.js +1 -1
  134. package/src/api/cyberia-saga/cyberia-saga.service.js +2 -2
  135. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +16 -29
  136. package/src/api/cyberia-skill/cyberia-skill.controller.js +1 -1
  137. package/src/api/cyberia-skill/cyberia-skill.router.js +1 -1
  138. package/src/api/cyberia-skill/cyberia-skill.service.js +2 -2
  139. package/src/api/default/default.controller.js +1 -1
  140. package/src/api/default/default.router.js +1 -1
  141. package/src/api/default/default.service.js +2 -2
  142. package/src/api/document/document.controller.js +1 -1
  143. package/src/api/document/document.router.js +1 -1
  144. package/src/api/document/document.service.js +2 -2
  145. package/src/api/file/file.controller.js +1 -1
  146. package/src/api/file/file.router.js +1 -1
  147. package/src/api/file/file.service.js +2 -2
  148. package/src/api/instance/instance.controller.js +1 -1
  149. package/src/api/instance/instance.router.js +1 -1
  150. package/src/api/instance/instance.service.js +2 -2
  151. package/src/api/ipfs/ipfs.controller.js +1 -1
  152. package/src/api/ipfs/ipfs.router.js +2 -2
  153. package/src/api/ipfs/ipfs.service.js +2 -2
  154. package/src/api/object-layer/object-layer.controller.js +1 -1
  155. package/src/api/object-layer/object-layer.model.js +204 -3
  156. package/src/api/object-layer/object-layer.router.js +2 -2
  157. package/src/api/object-layer/object-layer.service.js +4 -17
  158. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +1 -1
  159. package/src/api/object-layer-render-frames/object-layer-render-frames.router.js +1 -1
  160. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +2 -2
  161. package/src/api/test/test.controller.js +1 -1
  162. package/src/api/test/test.service.js +1 -1
  163. package/src/api/user/guest.service.js +3 -3
  164. package/src/api/user/user.controller.js +1 -1
  165. package/src/api/user/user.router.js +2 -2
  166. package/src/api/user/user.service.js +4 -4
  167. package/src/api.js +5 -9
  168. package/src/cli/app.js +391 -0
  169. package/src/cli/baremetal.js +30 -36
  170. package/src/cli/client.js +306 -0
  171. package/src/cli/cloud-init.js +3 -3
  172. package/src/cli/cluster.js +242 -135
  173. package/src/cli/db.js +126 -67
  174. package/src/cli/deploy.js +158 -60
  175. package/src/cli/docker-compose.js +5 -5
  176. package/src/cli/domains.js +184 -0
  177. package/src/cli/dotenv-store.js +143 -0
  178. package/src/cli/event.js +2281 -0
  179. package/src/cli/fs.js +3 -3
  180. package/src/cli/host.js +672 -0
  181. package/src/cli/image.js +4 -7
  182. package/src/cli/index.js +426 -134
  183. package/src/cli/ipfs.js +34 -30
  184. package/src/cli/kickstart.js +1 -1
  185. package/src/cli/kubectl.js +218 -41
  186. package/src/cli/lxd.js +3 -3
  187. package/src/cli/monitor.js +1359 -26
  188. package/src/cli/package.js +90 -0
  189. package/src/cli/release.js +73 -34
  190. package/src/cli/repository.js +564 -367
  191. package/src/cli/run.js +362 -654
  192. package/src/cli/secrets.js +2158 -964
  193. package/src/cli/ssh.js +651 -331
  194. package/src/cli/state.js +394 -0
  195. package/src/cli/static.js +2 -2
  196. package/src/cli/system.js +26 -13
  197. package/src/cli/test.js +199 -125
  198. package/src/cli/vultr.js +623 -0
  199. package/src/cli/wireguard.js +2930 -0
  200. package/src/client/components/core/CalendarCore.js +53 -96
  201. package/src/client/components/core/Docs.js +258 -211
  202. package/src/client/components/core/FileExplorer.js +0 -21
  203. package/src/client/components/core/PanelForm.js +4 -4
  204. package/src/client/components/core/Repository.js +56 -0
  205. package/src/client/components/core/Translate.js +7 -0
  206. package/src/client/components/core/{FullScreen.js → ViewModeController.js} +42 -39
  207. package/src/client/components/core/Wallet.js +0 -11
  208. package/src/client/components/core/Worker.js +7 -1
  209. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +2 -2
  210. package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +368 -0
  211. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +35 -1
  212. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +4 -0
  213. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +2 -2
  214. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -0
  215. package/src/client/components/default/AppShellDefault.js +1 -1
  216. package/src/client/components/default/SettingsDefault.js +2 -2
  217. package/src/client/components/itemledger/SettingsItemledger.js +2 -2
  218. package/src/client/components/underpost/AppShellUnderpost.js +3 -2
  219. package/src/client/components/underpost/SettingsUnderpost.js +2 -2
  220. package/src/client/public/cyberia-docs/ARCHITECTURE.md +17 -3
  221. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +32 -5
  222. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +1 -1
  223. package/src/client/public/cyberia-docs/CYBERIA.md +21 -1
  224. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +23 -6
  225. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  226. package/src/client/public/cyberia-docs/WHITE-PAPER.md +1 -1
  227. package/src/client/public/default/android-chrome-144x144.png +0 -0
  228. package/src/client/public/default/android-chrome-192x192.png +0 -0
  229. package/src/client/public/default/android-chrome-256x256.png +0 -0
  230. package/src/client/public/default/android-chrome-36x36.png +0 -0
  231. package/src/client/public/default/android-chrome-384x384.png +0 -0
  232. package/src/client/public/default/android-chrome-48x48.png +0 -0
  233. package/src/client/public/default/android-chrome-512x512.png +0 -0
  234. package/src/client/public/default/android-chrome-72x72.png +0 -0
  235. package/src/client/public/default/android-chrome-96x96.png +0 -0
  236. package/src/client/public/default/apple-touch-icon-1024x1024.png +0 -0
  237. package/src/client/public/default/apple-touch-icon-114x114.png +0 -0
  238. package/src/client/public/default/apple-touch-icon-120x120.png +0 -0
  239. package/src/client/public/default/apple-touch-icon-144x144.png +0 -0
  240. package/src/client/public/default/apple-touch-icon-152x152.png +0 -0
  241. package/src/client/public/default/apple-touch-icon-167x167.png +0 -0
  242. package/src/client/public/default/apple-touch-icon-180x180.png +0 -0
  243. package/src/client/public/default/apple-touch-icon-57x57.png +0 -0
  244. package/src/client/public/default/apple-touch-icon-60x60.png +0 -0
  245. package/src/client/public/default/apple-touch-icon-72x72.png +0 -0
  246. package/src/client/public/default/apple-touch-icon-76x76.png +0 -0
  247. package/src/client/public/default/apple-touch-icon-precomposed.png +0 -0
  248. package/src/client/public/default/apple-touch-icon.png +0 -0
  249. package/src/client/public/default/apple-touch-startup-image-1125x2436.png +0 -0
  250. package/src/client/public/default/apple-touch-startup-image-1136x640.png +0 -0
  251. package/src/client/public/default/apple-touch-startup-image-1170x2532.png +0 -0
  252. package/src/client/public/default/apple-touch-startup-image-1179x2556.png +0 -0
  253. package/src/client/public/default/apple-touch-startup-image-1242x2208.png +0 -0
  254. package/src/client/public/default/apple-touch-startup-image-1242x2688.png +0 -0
  255. package/src/client/public/default/apple-touch-startup-image-1284x2778.png +0 -0
  256. package/src/client/public/default/apple-touch-startup-image-1290x2796.png +0 -0
  257. package/src/client/public/default/apple-touch-startup-image-1334x750.png +0 -0
  258. package/src/client/public/default/apple-touch-startup-image-1488x2266.png +0 -0
  259. package/src/client/public/default/apple-touch-startup-image-1536x2048.png +0 -0
  260. package/src/client/public/default/apple-touch-startup-image-1620x2160.png +0 -0
  261. package/src/client/public/default/apple-touch-startup-image-1640x2160.png +0 -0
  262. package/src/client/public/default/apple-touch-startup-image-1668x2224.png +0 -0
  263. package/src/client/public/default/apple-touch-startup-image-1668x2388.png +0 -0
  264. package/src/client/public/default/apple-touch-startup-image-1792x828.png +0 -0
  265. package/src/client/public/default/apple-touch-startup-image-2048x1536.png +0 -0
  266. package/src/client/public/default/apple-touch-startup-image-2048x2732.png +0 -0
  267. package/src/client/public/default/apple-touch-startup-image-2160x1620.png +0 -0
  268. package/src/client/public/default/apple-touch-startup-image-2160x1640.png +0 -0
  269. package/src/client/public/default/apple-touch-startup-image-2208x1242.png +0 -0
  270. package/src/client/public/default/apple-touch-startup-image-2224x1668.png +0 -0
  271. package/src/client/public/default/apple-touch-startup-image-2266x1488.png +0 -0
  272. package/src/client/public/default/apple-touch-startup-image-2388x1668.png +0 -0
  273. package/src/client/public/default/apple-touch-startup-image-2436x1125.png +0 -0
  274. package/src/client/public/default/apple-touch-startup-image-2532x1170.png +0 -0
  275. package/src/client/public/default/apple-touch-startup-image-2556x1179.png +0 -0
  276. package/src/client/public/default/apple-touch-startup-image-2688x1242.png +0 -0
  277. package/src/client/public/default/apple-touch-startup-image-2732x2048.png +0 -0
  278. package/src/client/public/default/apple-touch-startup-image-2778x1284.png +0 -0
  279. package/src/client/public/default/apple-touch-startup-image-2796x1290.png +0 -0
  280. package/src/client/public/default/apple-touch-startup-image-640x1136.png +0 -0
  281. package/src/client/public/default/apple-touch-startup-image-750x1334.png +0 -0
  282. package/src/client/public/default/apple-touch-startup-image-828x1792.png +0 -0
  283. package/src/client/public/default/assets/background/white.jpg +0 -0
  284. package/src/client/public/default/browserconfig.xml +1 -1
  285. package/src/client/public/default/favicon-16x16.png +0 -0
  286. package/src/client/public/default/favicon-32x32.png +0 -0
  287. package/src/client/public/default/favicon-48x48.png +0 -0
  288. package/src/client/public/default/favicon.ico +0 -0
  289. package/src/client/public/default/manifest.webmanifest +5 -5
  290. package/src/client/public/default/mstile-144x144.png +0 -0
  291. package/src/client/public/default/mstile-150x150.png +0 -0
  292. package/src/client/public/default/mstile-310x150.png +0 -0
  293. package/src/client/public/default/mstile-310x310.png +0 -0
  294. package/src/client/public/default/mstile-70x70.png +0 -0
  295. package/src/client/public/default/yandex-browser-50x50.png +0 -0
  296. package/src/client/public/default/yandex-browser-manifest.json +1 -1
  297. package/src/client/services/cyberia-instance/cyberia-instance.service.js +40 -0
  298. package/src/client/services/object-layer/object-layer.management.js +4 -4
  299. package/src/client/ssr/RootDocument.js +1 -1
  300. package/src/client/ssr/body/404.js +1 -1
  301. package/src/client/ssr/body/500.js +1 -1
  302. package/src/client/ssr/body/CacheControl.js +1 -1
  303. package/src/client/ssr/body/CyberiaDefaultSplashScreen.js +1 -1
  304. package/src/client/ssr/body/DefaultSplashScreen.js +1 -1
  305. package/src/client/ssr/body/SwaggerDarkMode.js +1 -1
  306. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +1 -1
  307. package/src/client/ssr/head/CryptokoynScripts.js +1 -1
  308. package/src/client/ssr/head/Css.js +1 -1
  309. package/src/client/ssr/head/CyberiaPortalScripts.js +1 -1
  310. package/src/client/ssr/head/DefaultScripts.js +1 -1
  311. package/src/client/ssr/head/ItemledgerScripts.js +1 -1
  312. package/src/client/ssr/head/Microdata.js +1 -1
  313. package/src/client/ssr/head/Production.js +1 -1
  314. package/src/client/ssr/head/Pwa.js +1 -1
  315. package/src/client/ssr/head/PwaItemledger.js +1 -1
  316. package/src/client/ssr/head/Seo.js +1 -1
  317. package/src/client/ssr/head/UnderpostScripts.js +1 -1
  318. package/src/client/ssr/mailer/DefaultRecoverEmail.js +1 -1
  319. package/src/client/ssr/mailer/DefaultVerifyEmail.js +1 -1
  320. package/src/client/ssr/views/Cyberia404.js +7 -5
  321. package/src/client/ssr/views/CyberiaServerMetrics.js +1 -1
  322. package/src/client/ssr/views/Maintenance.js +1 -1
  323. package/src/client/ssr/views/NoNetworkConnection.js +1 -1
  324. package/src/client/ssr/views/Test.js +1 -1
  325. package/src/client/sw/core.sw.js +20 -14
  326. package/src/client-builder/client-build-docs.js +61 -46
  327. package/src/client-builder/client-build-live.js +2 -2
  328. package/src/client-builder/client-build.js +58 -44
  329. package/src/client-builder/client-dev-server.js +3 -3
  330. package/src/client-builder/client-icons.js +2 -2
  331. package/src/client-builder/ssr.js +3 -3
  332. package/src/client.build.js +3 -6
  333. package/src/client.dev.js +3 -6
  334. package/src/db/DataBaseProvider.js +186 -3
  335. package/src/db/mariadb/MariaDB.js +3 -2
  336. package/src/db/mongo/MongoBootstrap.js +273 -101
  337. package/src/db/mongo/MongooseDB.js +11 -8
  338. package/src/{server/valkey.js → db/valkey/Valkey.js} +5 -4
  339. package/src/grpc/cyberia/grpc-server.js +1 -1
  340. package/src/index.js +103 -23
  341. package/src/mailer/EmailRender.js +2 -2
  342. package/src/mailer/MailerInterceptor.js +87 -0
  343. package/src/mailer/MailerProvider.js +50 -6
  344. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +1 -1
  345. package/src/projects/cyberia/besu-genesis-generator.js +3 -3
  346. package/src/projects/cyberia/catalog-cyberia.js +54 -6
  347. package/src/projects/cyberia/gemini-client.js +1 -1
  348. package/src/projects/cyberia/generate-saga.js +15 -24
  349. package/src/projects/cyberia/hot-reload-trigger.js +1 -1
  350. package/src/projects/cyberia/instance-data.js +22 -3
  351. package/src/projects/cyberia/ipfs-client.js +4 -4
  352. package/src/projects/cyberia/map-preview-generator.js +1 -1
  353. package/src/projects/cyberia/object-layer.js +12 -22
  354. package/src/projects/cyberia/semantic-layer-generator.js +1 -1
  355. package/src/projects/underpost/catalog-underpost.js +13 -2
  356. package/src/proxy.js +4 -7
  357. package/src/runtime/cyberia-client/Dockerfile +9 -4
  358. package/src/runtime/cyberia-client/Dockerfile.dev +8 -2
  359. package/src/runtime/cyberia-server/Dockerfile +9 -4
  360. package/src/runtime/cyberia-server/Dockerfile.dev +8 -2
  361. package/src/runtime/engine-cyberia/Dockerfile +25 -9
  362. package/src/runtime/engine-cyberia/Dockerfile.dev +25 -9
  363. package/src/runtime/engine-cyberia/Dockerfile.test +4 -4
  364. package/src/runtime/engine-cyberia/compose.env +16 -0
  365. package/src/runtime/engine-cyberia/docker-compose.yml +31 -37
  366. package/src/runtime/express/Express.js +32 -27
  367. package/src/runtime/lampp/Lampp.js +22 -70
  368. package/src/runtime/nginx/Nginx.js +1 -1
  369. package/src/runtime/wp/Wp.js +16 -48
  370. package/src/server/{catalog.js → build/catalog.js} +15 -5
  371. package/src/server/build/coverage.js +117 -0
  372. package/src/server/build/execution.js +402 -0
  373. package/src/server/build/package.js +465 -0
  374. package/src/server/build/testing.js +528 -0
  375. package/src/server/{dns.js → network/dns.js} +241 -14
  376. package/src/server/network/forward-proxy.js +541 -0
  377. package/src/server/{middlewares.js → network/middlewares.js} +59 -4
  378. package/src/server/network/node-capability.js +98 -0
  379. package/src/server/{peer.js → network/peer.js} +3 -3
  380. package/src/server/{proxy.js → network/proxy.js} +7 -13
  381. package/src/server/network/router.js +356 -0
  382. package/src/server/{tls.js → network/tls.js} +2 -2
  383. package/src/server/network/underpost-compression.js +186 -0
  384. package/src/server/{underpost-gateway.js → network/underpost-gateway.js} +26 -16
  385. package/src/server/{underpost-ingress.js → network/underpost-ingress.js} +19 -3
  386. package/src/server/{cri.js → ops/cri.js} +2 -2
  387. package/src/server/ops/cron.js +949 -0
  388. package/src/server/ops/event-notification.js +284 -0
  389. package/src/server/{logger.js → ops/logger.js} +108 -23
  390. package/src/server/ops/monitoring.js +1724 -0
  391. package/src/server/ops/systemd.js +259 -0
  392. package/src/server/{conf.js → runtime/conf.js} +521 -520
  393. package/src/server/runtime/config-scope.js +215 -0
  394. package/src/server/runtime/environment.js +149 -0
  395. package/src/server/{process.js → runtime/process.js} +153 -13
  396. package/src/server/{runtime-status.js → runtime/runtime-status.js} +155 -16
  397. package/src/server/{runtime.js → runtime/runtime.js} +12 -8
  398. package/src/server/{start.js → runtime/start.js} +128 -39
  399. package/src/server/{auth.js → security/auth.js} +7 -8
  400. package/src/server/security/container-storage.js +382 -0
  401. package/src/server/{crypto.js → security/crypto.js} +1 -1
  402. package/src/server/security/selinux.js +185 -0
  403. package/src/server/{backup.js → storage/backup.js} +17 -8
  404. package/src/server/{data-query.js → storage/data-query.js} +1 -1
  405. package/src/server/{downloader.js → storage/downloader.js} +2 -2
  406. package/src/server/storage/repository.js +68 -0
  407. package/src/server.js +4 -7
  408. package/src/ws/IoInterface.js +1 -1
  409. package/src/ws/IoServer.js +1 -1
  410. package/src/ws/core/core.ws.connection.js +1 -1
  411. package/src/ws/core/core.ws.emit.js +1 -1
  412. package/src/ws/core/core.ws.server.js +1 -1
  413. package/src/ws/default/default.ws.connection.js +1 -1
  414. package/src/ws/default/default.ws.emit.js +1 -1
  415. package/src/ws/default/default.ws.server.js +1 -1
  416. package/test/e2e/event-e2e-public-ingress-down.js +45 -0
  417. package/test/e2e/event-e2e-wireguard-server-down.js +38 -0
  418. package/test/e2e/event-e2e-wireguard-spoke-down.js +40 -0
  419. package/test/{api.test.js → integration/app/api.test.js} +33 -14
  420. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +30 -0
  421. package/test/{cyberia-instance-conf-defaults.test.js → integration/app/cyberia/cyberia-instance-conf-defaults.test.js} +2 -1
  422. package/test/integration/app/cyberia/cyberia-load.test.js +467 -0
  423. package/test/integration/app/cyberia/fallback-world-capture.test.js +253 -0
  424. package/test/integration/app/cyberia/object-layer-item-id.test.js +327 -0
  425. package/test/{shape-generator.test.js → integration/app/cyberia/shape-generator.test.js} +1 -1
  426. package/test/integration/infra/1-security/config-scope.test.js +305 -0
  427. package/test/integration/infra/1-security/container-storage.test.js +356 -0
  428. package/test/integration/infra/1-security/in-pod-cli-surface.test.js +86 -0
  429. package/test/integration/infra/1-security/secret-onboarding.test.js +930 -0
  430. package/test/integration/infra/1-security/selinux.test.js +69 -0
  431. package/test/{sops-secret-store.test.js → integration/infra/1-security/sops-secret-store.test.js} +415 -61
  432. package/test/integration/infra/1-security/systemd-service.test.js +70 -0
  433. package/test/integration/infra/1-security/underpost-config-secret.test.js +367 -0
  434. package/test/integration/infra/2-network/dns-firewall.test.js +566 -0
  435. package/test/integration/infra/2-network/node-capability.test.js +182 -0
  436. package/test/integration/infra/2-network/wireguard-cli.test.js +1163 -0
  437. package/test/integration/infra/2-network/wireguard-edge.test.js +1731 -0
  438. package/test/{cluster-instances.test.js → integration/infra/3-cluster/cluster-instances.test.js} +11 -15
  439. package/test/{deploy-node-placement.test.js → integration/infra/3-cluster/deploy-node-placement.test.js} +3 -3
  440. package/test/integration/infra/3-cluster/docker-compose-stack.test.js +313 -0
  441. package/test/integration/infra/4-ingress/deploy-routes.test.js +379 -0
  442. package/test/integration/infra/4-ingress/gateway-static-assets.test.js +453 -0
  443. package/test/{instance-traffic-plan.test.js → integration/infra/4-ingress/instance-traffic-plan.test.js} +10 -6
  444. package/test/{underpost-gateway.test.js → integration/infra/4-ingress/underpost-gateway.test.js} +47 -6
  445. package/test/{underpost-ingress.test.js → integration/infra/4-ingress/underpost-ingress.test.js} +56 -4
  446. package/test/integration/infra/5-observability/cron-jobs.test.js +652 -0
  447. package/test/{deploy-monitor.test.js → integration/infra/5-observability/deploy-monitor.test.js} +29 -31
  448. package/test/integration/infra/5-observability/event-notification.test.js +197 -0
  449. package/test/integration/infra/5-observability/event-remediation.test.js +502 -0
  450. package/test/integration/infra/5-observability/event-targets.test.js +1174 -0
  451. package/test/integration/infra/5-observability/monitoring-stack.test.js +902 -0
  452. package/test/support/shell-harness.js +73 -0
  453. package/test/unit/build-template.test.js +97 -0
  454. package/test/unit/build-workflow-offline.test.js +132 -0
  455. package/test/unit/catalog.test.js +71 -0
  456. package/test/unit/client-build-docs.test.js +334 -0
  457. package/test/unit/conf-loading.test.js +303 -0
  458. package/test/unit/conf-resolution.test.js +979 -0
  459. package/test/unit/coverage-artifact.test.js +130 -0
  460. package/test/{crypto.test.js → unit/crypto.test.js} +1 -1
  461. package/test/unit/deploy-env-resolution.test.js +38 -0
  462. package/test/unit/deploy-log-table.test.js +447 -0
  463. package/test/unit/execution-profiles.test.js +219 -0
  464. package/test/unit/fleet-sync-source.test.js +149 -0
  465. package/test/unit/logger-redaction.test.js +112 -0
  466. package/test/unit/package.test.js +403 -0
  467. package/test/unit/prepare-host.test.js +299 -0
  468. package/test/unit/process-environment.test.js +18 -0
  469. package/test/unit/propagation-message.test.js +78 -0
  470. package/test/unit/redeploy-plan.test.js +24 -0
  471. package/test/unit/release-bump.test.js +474 -0
  472. package/test/unit/ssh-output-redaction.test.js +28 -0
  473. package/test/unit/start-options.test.js +46 -0
  474. package/test/unit/test-tiers.test.js +193 -0
  475. package/vitest.config.js +58 -0
  476. package/.nycrc +0 -9
  477. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +0 -48
  478. package/manifests/mongodb/pv-pvc.yaml +0 -59
  479. package/scripts/link-local-underpost-cli.sh +0 -6
  480. package/src/api/user/user.build.js +0 -16
  481. package/src/cli/env.js +0 -177
  482. package/src/client/components/core/Blockchain.js +0 -41
  483. package/src/client/components/core/Blog.js +0 -9
  484. package/src/client/components/core/KeyboardAvoidance.js +0 -145
  485. package/src/client/public/default/assets/background/dark.jpg +0 -0
  486. package/src/client/public/default/assets/background/white0-min.jpg +0 -0
  487. package/src/client/public/default/assets/background/white0.jpg +0 -0
  488. package/src/client/public/doc/favicon.ico +0 -0
  489. package/src/client/public/doc/sitemap +0 -148
  490. package/src/server/cron.js +0 -476
@@ -0,0 +1,193 @@
1
+ 'use strict';
2
+
3
+ import { expect } from 'chai';
4
+ import fs from 'node:fs';
5
+ import {
6
+ TEST_TIERS,
7
+ UNDERPOST_TESTING,
8
+ coverageIncludeFactory,
9
+ coverageThresholdFactory,
10
+ resolveTestSelection,
11
+ testProjectsFactory,
12
+ testSuiteNames,
13
+ } from '../../src/server/build/testing.js';
14
+
15
+ // The table declares every tier the platform ships. A product build slices the
16
+ // tree, so whether a tier's directory is present here is a catalog question,
17
+ // asserted in catalog.test.js — these are about the table itself.
18
+ describe('test tiers', () => {
19
+ it('names every tier uniquely', () => {
20
+ const names = TEST_TIERS.map(({ name }) => name);
21
+ expect(new Set(names).size).to.equal(names.length);
22
+ });
23
+
24
+ it('never leaves a tier on group order 0', () => {
25
+ // Vitest routes a single-worker project on the default 0 into a bucket it
26
+ // appends after every ordered group, which would run that tier last.
27
+ for (const { name, groupOrder } of TEST_TIERS) expect(groupOrder, name).to.be.greaterThan(0);
28
+ });
29
+
30
+ it('declares tiers in the order they run', () => {
31
+ const orders = TEST_TIERS.map(({ groupOrder }) => groupOrder);
32
+ expect(orders).to.deep.equal([...orders].sort((a, b) => a - b));
33
+ });
34
+
35
+ it('keeps delegated tiers in the last group', () => {
36
+ // They run after the Vitest pass, so an earlier group order would describe
37
+ // an execution order that does not happen.
38
+ const lastGroup = Math.max(...TEST_TIERS.map(({ groupOrder }) => groupOrder));
39
+ for (const { name, groupOrder, delegate } of TEST_TIERS) if (delegate) expect(groupOrder, name).to.equal(lastGroup);
40
+ });
41
+
42
+ it('exposes only non-delegated tiers as Vitest projects', () => {
43
+ const projects = testProjectsFactory().map(({ test }) => test.name);
44
+ expect(projects).to.deep.equal(TEST_TIERS.filter(({ delegate }) => !delegate).map(({ name }) => name));
45
+ });
46
+ });
47
+
48
+ describe('test tier selection', () => {
49
+ it('runs every tier when nothing is selected', () => {
50
+ for (const selector of ['', 'all']) {
51
+ const { projects, runVitest, delegated } = resolveTestSelection(selector);
52
+ // No explicit project list: Vitest runs them all, and a product build
53
+ // that strips one must not fail on a name it no longer ships.
54
+ expect(projects, selector).to.be.empty;
55
+ expect(runVitest, selector).to.equal(true);
56
+ expect(
57
+ delegated.map(({ name }) => name),
58
+ selector,
59
+ ).to.deep.equal(TEST_TIERS.filter(({ delegate }) => delegate).map(({ name }) => name));
60
+ }
61
+ });
62
+
63
+ it('expands a suite into its tiers', () => {
64
+ expect(resolveTestSelection('infra').projects).to.deep.equal(
65
+ TEST_TIERS.filter(({ name }) => name.startsWith('infra:')).map(({ name }) => name),
66
+ );
67
+ });
68
+
69
+ it('skips the Vitest pass when only delegated tiers are selected', () => {
70
+ const { runVitest, delegated } = resolveTestSelection('contracts');
71
+ expect(runVitest).to.equal(false);
72
+ expect(delegated.map(({ name }) => name)).to.deep.equal(['contracts']);
73
+ });
74
+
75
+ it('rejects an unknown selector instead of reporting an empty green run', () => {
76
+ expect(() => resolveTestSelection('not-a-suite')).to.throw(/unknown suite/);
77
+ });
78
+
79
+ it('offers every suite prefix as a selector', () => {
80
+ for (const suite of testSuiteNames()) expect(() => resolveTestSelection(suite), suite).to.not.throw();
81
+ });
82
+ });
83
+
84
+ describe('delegated tier commands', () => {
85
+ const delegated = TEST_TIERS.filter(({ delegate }) => delegate);
86
+
87
+ it('ships at least one delegated tier to assert against', () => {
88
+ expect(delegated).to.not.be.empty;
89
+ });
90
+
91
+ it('writes results only when a destination is given', () => {
92
+ for (const { name, delegate } of delegated) {
93
+ expect(delegate({}), name).to.not.include('--test-reporter-destination=/');
94
+ expect(delegate({ resultsPath: '/results/TEST-x.xml' }), name).to.include('/results/TEST-x.xml');
95
+ }
96
+ });
97
+
98
+ it('passes a name filter through to its runner', () => {
99
+ for (const { name, delegate } of delegated) expect(delegate({ grep: 'Burning' }), name).to.include('Burning');
100
+ });
101
+
102
+ // Under an outer `npm`, npx resolves the root project as the local prefix and
103
+ // pulls its own copy of a nested tool from the registry, which Hardhat then
104
+ // refuses to run as a non-local installation.
105
+ it('runs nested tooling from the nested install rather than through npx', () => {
106
+ for (const { name, delegate } of delegated) {
107
+ expect(delegate({}), name).to.not.match(/\bnpx\b/);
108
+ expect(delegate({}), name).to.include('./node_modules/.bin/');
109
+ }
110
+ });
111
+
112
+ // A directory left behind by an interrupted install passes a `-d` probe while
113
+ // holding none of the binaries the tier runs.
114
+ it('probes the installed binary before skipping the install', () => {
115
+ for (const { name, delegate } of delegated)
116
+ expect(delegate({}), name).to.match(/\[ -x node_modules\/\.bin\/[\w.-]+ \] \|\| npm ci/);
117
+ });
118
+ });
119
+
120
+ describe('coverage threshold', () => {
121
+ it('reports without gating until a run opts in', () => {
122
+ // A tier selection measures a slice of the tree, so the whole-suite number is
123
+ // not the bar it should be held to.
124
+ expect(coverageThresholdFactory({})).to.equal(null);
125
+ expect(coverageThresholdFactory({ COVERAGE_ENFORCE: '0' })).to.equal(null);
126
+ });
127
+
128
+ it('gates an opted-in run on the shipped threshold', () => {
129
+ for (const COVERAGE_ENFORCE of ['1', 'true'])
130
+ expect(coverageThresholdFactory({ COVERAGE_ENFORCE }), COVERAGE_ENFORCE).to.equal(
131
+ UNDERPOST_TESTING.coverageThreshold,
132
+ );
133
+ });
134
+
135
+ it('lets a repository ratchet its own bar', () => {
136
+ expect(coverageThresholdFactory({ COVERAGE_MIN: '25' })).to.equal(25);
137
+ // An unset repository variable arrives as an empty string, not as absent.
138
+ expect(coverageThresholdFactory({ COVERAGE_ENFORCE: '1', COVERAGE_MIN: '' })).to.equal(
139
+ UNDERPOST_TESTING.coverageThreshold,
140
+ );
141
+ });
142
+
143
+ it('refuses a bar that is not a percentage', () => {
144
+ for (const COVERAGE_MIN of ['eighty', '-1', '101'])
145
+ expect(() => coverageThresholdFactory({ COVERAGE_MIN }), COVERAGE_MIN).to.throw('COVERAGE_MIN');
146
+ });
147
+ });
148
+
149
+ describe('coverage scope', () => {
150
+ const vitestTiers = TEST_TIERS.filter(({ delegate }) => !delegate);
151
+
152
+ it('makes every Vitest tier accountable for the sources it drives', () => {
153
+ for (const { name, sources } of vitestTiers) expect(sources, name).to.not.be.empty;
154
+ });
155
+
156
+ it('leaves a delegated tier out of the Vitest report', () => {
157
+ // Its runner measures its own coverage, and this table only feeds Vitest.
158
+ for (const { name, sources, delegate } of TEST_TIERS) if (delegate) expect(sources, name).to.equal(undefined);
159
+ });
160
+
161
+ it('points every glob at something this tree ships', () => {
162
+ // A source that moved leaves the tier silently measuring nothing, which
163
+ // reads as coverage rather than as the missing measurement it is. A product
164
+ // build slices the tree, so only tiers it kept are asserted.
165
+ for (const { name, directory, sources } of vitestTiers) {
166
+ if (!fs.existsSync(directory)) continue;
167
+ for (const glob of sources) expect(fs.globSync(glob), `${name}: ${glob}`).to.not.be.empty;
168
+ }
169
+ });
170
+
171
+ it('measures every tier when the run selects none', () => {
172
+ const everySource = new Set(vitestTiers.flatMap(({ sources }) => sources));
173
+ expect(coverageIncludeFactory([])).to.have.members([...everySource]);
174
+ });
175
+
176
+ it('measures only the selected tiers', () => {
177
+ const unit = TEST_TIERS.find(({ name }) => name === 'unit').sources;
178
+ for (const argv of [['--project', 'unit'], ['--project=unit']])
179
+ expect(coverageIncludeFactory(['npx', 'vitest', 'run', ...argv, '--coverage']), argv.join(' ')).to.deep.equal(
180
+ unit,
181
+ );
182
+ });
183
+
184
+ it('counts a source two tiers drive once', () => {
185
+ const include = coverageIncludeFactory(['--project', 'infra:3-cluster', '--project', 'infra:4-ingress']);
186
+ expect(new Set(include).size).to.equal(include.length);
187
+ expect(include).to.include('src/server/runtime/conf.js');
188
+ });
189
+
190
+ it('rejects a selection that matches no tier', () => {
191
+ expect(() => coverageIncludeFactory(['--project', 'not-a-tier'])).to.throw(/unknown suite/);
192
+ });
193
+ });
@@ -0,0 +1,58 @@
1
+ import { defineConfig } from 'vitest/config';
2
+ import {
3
+ UNDERPOST_TESTING,
4
+ coverageIncludeFactory,
5
+ coverageThresholdFactory,
6
+ testProjectsFactory,
7
+ } from './src/server/build/testing.js';
8
+
9
+ const allureResultsDirectory = process.env[UNDERPOST_TESTING.allureResultsEnvKey];
10
+ const coverageThreshold = coverageThresholdFactory(process.env);
11
+ const coverageInclude = coverageIncludeFactory(process.argv);
12
+
13
+ // Spread into every tier: a Vitest project inherits nothing from the root
14
+ // `test` block, and only `coverage` and `reporters` are read from it.
15
+ const projectDefaults = {
16
+ // Mocha's `describe`/`it` and the hooks stay global, so the suites read the
17
+ // same either side of the migration and carry no runner import.
18
+ globals: true,
19
+ environment: 'node',
20
+ // A tier is only meaningful if its failures are attributable to it, and a
21
+ // suite that reads `dd.routes` or binds a fixed port cannot share a worker
22
+ // with another doing the same.
23
+ fileParallelism: false,
24
+ ...(allureResultsDirectory ? { setupFiles: ['allure-vitest/setup'] } : {}),
25
+ };
26
+
27
+ export default defineConfig({
28
+ test: {
29
+ reporters: [
30
+ 'default',
31
+ ...(allureResultsDirectory ? [['allure-vitest/reporter', { resultsDir: allureResultsDirectory }]] : []),
32
+ ],
33
+ coverage: {
34
+ provider: 'v8',
35
+ reportsDirectory: UNDERPOST_TESTING.coverageDirectory,
36
+ // `lcov` is what Coveralls ingests, `json` is what a merged multi-job
37
+ // report is assembled from, `text` is what a local run reads.
38
+ reporter: ['text', 'lcov', 'json'],
39
+ // Written even when the run fails: the coverage workflows upload the report
40
+ // from a job the threshold step is meant to fail, and without it the badge
41
+ // freezes at the last passing build instead of moving with the tree.
42
+ reportOnFailure: true,
43
+ // The tiers in the selection decide what is measured, so a partial run
44
+ // reports the slice it drives and the whole run reports the whole of it —
45
+ // rather than every module the CLI barrel drags into a worker on import.
46
+ include: coverageInclude,
47
+ // Only the suites themselves: an `include` whitelist already keeps
48
+ // dependencies, bundles and generated assets out, and a directory pattern
49
+ // here is not anchored to the root — `test/**` also excluded the API
50
+ // surfaces named `test`, so the tier covering them reported nothing.
51
+ exclude: ['**/*.{test,spec}.js'],
52
+ // Absent unless the run opted in, so a single-tier run reports its slice
53
+ // instead of failing against a number it never measured.
54
+ ...(coverageThreshold === null ? {} : { thresholds: { lines: coverageThreshold } }),
55
+ },
56
+ projects: testProjectsFactory(projectDefaults),
57
+ },
58
+ });
package/.nycrc DELETED
@@ -1,9 +0,0 @@
1
- {
2
- "exclude": [],
3
- "include": ["test"],
4
- "output": "reports",
5
- "reporter": ["html", "text", "lcov", "text-lcov", "cobertura"],
6
- "sourceMap": true,
7
- "instrument": true,
8
- "all": true
9
- }
@@ -1,48 +0,0 @@
1
- apiVersion: batch/v1
2
- kind: CronJob
3
- metadata:
4
- name: dd-cron-dns
5
- namespace: default
6
- labels:
7
- app: dd-cron-dns
8
- managed-by: underpost
9
- spec:
10
- schedule: "* * * * *"
11
- concurrencyPolicy: Forbid
12
- startingDeadlineSeconds: 200
13
- successfulJobsHistoryLimit: 3
14
- failedJobsHistoryLimit: 1
15
- suspend: false
16
- jobTemplate:
17
- spec:
18
- template:
19
- metadata:
20
- labels:
21
- app: dd-cron-dns
22
- managed-by: underpost
23
- spec:
24
- containers:
25
- - name: dd-cron-dns
26
- image: underpost/underpost-engine:v3.2.90
27
- command:
28
- - /bin/sh
29
- - -c
30
- - >
31
- cd /home/dd/engine &&
32
- node bin env dd-cron production &&
33
- node bin cron dd-cron dns --git --kubeadm
34
- volumeMounts:
35
- - mountPath: /home/dd/engine
36
- name: underpost-cron-container-volume
37
- - mountPath: /usr/lib/node_modules/underpost
38
- name: underpost-share-env
39
- volumes:
40
- - hostPath:
41
- path: /home/dd/engine
42
- type: Directory
43
- name: underpost-cron-container-volume
44
- - hostPath:
45
- path: /root/.nvm/versions/node/v24.15.0/lib/node_modules/underpost
46
- type: DirectoryOrCreate
47
- name: underpost-share-env
48
- restartPolicy: OnFailure
@@ -1,59 +0,0 @@
1
- apiVersion: v1
2
- kind: PersistentVolume
3
- metadata:
4
- name: mongodb-pv-0
5
- labels:
6
- app: mongodb
7
- spec:
8
- capacity:
9
- storage: 5Gi
10
- accessModes:
11
- - ReadWriteOnce
12
- persistentVolumeReclaimPolicy: Retain
13
- storageClassName: mongodb-storage-class
14
- claimRef:
15
- namespace: default
16
- name: mongodb-storage-mongodb-0
17
- hostPath:
18
- path: /data/mongodb/v0
19
- type: DirectoryOrCreate
20
- ---
21
- apiVersion: v1
22
- kind: PersistentVolume
23
- metadata:
24
- name: mongodb-pv-1
25
- labels:
26
- app: mongodb
27
- spec:
28
- capacity:
29
- storage: 5Gi
30
- accessModes:
31
- - ReadWriteOnce
32
- persistentVolumeReclaimPolicy: Retain
33
- storageClassName: mongodb-storage-class
34
- claimRef:
35
- namespace: default
36
- name: mongodb-storage-mongodb-1
37
- hostPath:
38
- path: /data/mongodb/v1
39
- type: DirectoryOrCreate
40
- ---
41
- apiVersion: v1
42
- kind: PersistentVolume
43
- metadata:
44
- name: mongodb-pv-2
45
- labels:
46
- app: mongodb
47
- spec:
48
- capacity:
49
- storage: 5Gi
50
- accessModes:
51
- - ReadWriteOnce
52
- persistentVolumeReclaimPolicy: Retain
53
- storageClassName: mongodb-storage-class
54
- claimRef:
55
- namespace: default
56
- name: mongodb-storage-mongodb-2
57
- hostPath:
58
- path: /data/mongodb/v2
59
- type: DirectoryOrCreate
@@ -1,6 +0,0 @@
1
-
2
- #!/usr/bin/env bash
3
- set -euo pipefail
4
-
5
- cd /home/dd && underpost clone underpostnet/pwa-microservices-template
6
- cd /home/dd/pwa-microservices-template && npm install && npm link
@@ -1,16 +0,0 @@
1
- import fs from 'fs-extra';
2
- import { faBase64Png, getBufferPngText } from '../../server/client-icons.js';
3
-
4
- process.exit(0);
5
-
6
- fs.writeFileSync(
7
- './tmp/api-user-invalid-token.png',
8
- await getBufferPngText({ text: 'Invalid token', textColor: '#ff0000' }),
9
- 'utf8',
10
- );
11
- fs.writeFileSync(
12
- './tmp/api-user-recover.png',
13
- Buffer.from(faBase64Png('rotate-left', 50, 50, '#ffffff'), 'base64'),
14
- 'utf8',
15
- );
16
- fs.writeFileSync('./tmp/api-user-check.png', Buffer.from(faBase64Png('check', 50, 50), 'base64'), 'utf8');
package/src/cli/env.js DELETED
@@ -1,177 +0,0 @@
1
- /**
2
- * Environment module for managing the environment variables of the underpost root
3
- * @module src/cli/env.js
4
- * @namespace UnderpostEnv
5
- */
6
-
7
- import { getNpmRootPath, writeEnv } from '../server/conf.js';
8
- import fs from 'fs-extra';
9
- import { loggerFactory } from '../server/logger.js';
10
- import dotenv from 'dotenv';
11
- import { pbcopy } from '../server/process.js';
12
-
13
- const logger = loggerFactory(import.meta);
14
-
15
- /**
16
- * Guards an env file path against stale directory artifacts.
17
- * Removes the path if it exists as a directory (e.g. `.env/` created by a previous EISDIR bug).
18
- * @param {string} envPath - The path to the environment file.
19
- * @memberof UnderpostEnv
20
- */
21
- const guardEnvPath = (envPath) => {
22
- if (fs.existsSync(envPath) && !fs.statSync(envPath).isFile()) {
23
- logger.warn(`Removing stale directory at env path: ${envPath}`);
24
- fs.removeSync(envPath);
25
- }
26
- };
27
-
28
- /**
29
- * @class UnderpostRootEnv
30
- * @description Manages the environment variables of the underpost root.
31
- * @memberof UnderpostEnv
32
- */
33
- class UnderpostRootEnv {
34
- static API = {
35
- /**
36
- * @method set
37
- * @description Sets an environment variable in the underpost root environment.
38
- * @param {string} key - The key of the environment variable to set.
39
- * @param {string} value - The value of the environment variable to set.
40
- * @param {object} options - Options for setting the environment variable.
41
- * @param {string} [options.deployId=''] - Deployment ID associated with the environment variable.
42
- * @param {boolean} [options.build=false] - If true, sets the environment variable using custom --deploy-id or all dd.router deploy ids configured.
43
- * @memberof UnderpostEnv
44
- */
45
- set(key, value, options = { deployId: '', build: false }) {
46
- const _set = (envPath, key, value) => {
47
- guardEnvPath(envPath);
48
- let env = {};
49
- if (fs.existsSync(envPath)) env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
50
- env[key] = value;
51
- writeEnv(envPath, env);
52
- };
53
- if (options.build) {
54
- const deployIdList = options.deployId
55
- ? [options.deployId]
56
- : fs.existsSync(`./engine-private/deploy/dd.router`)
57
- ? fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').split(',')
58
- : [DEFAULT_DEPLOY_ID];
59
- for (const deployId of deployIdList)
60
- for (const envFile of ['test', 'development', 'production'])
61
- _set(`./engine-private/conf/${deployId}/.env.${envFile}`, key, value);
62
- return;
63
- }
64
- const exeRootPath = `${getNpmRootPath()}/underpost`;
65
- fs.ensureDirSync(exeRootPath);
66
- const envPath = `${exeRootPath}/.env`;
67
- _set(envPath, key, value);
68
- },
69
- /**
70
- * @method delete
71
- * @description Deletes an environment variable from the underpost root environment.
72
- * @param {string} key - The key of the environment variable to delete.
73
- * @memberof UnderpostEnv
74
- */
75
- delete(key) {
76
- const exeRootPath = `${getNpmRootPath()}/underpost`;
77
- const envPath = `${exeRootPath}/.env`;
78
- guardEnvPath(envPath);
79
- let env = {};
80
- if (fs.existsSync(envPath)) env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
81
- delete env[key];
82
- writeEnv(envPath, env);
83
- },
84
- /**
85
- * @method get
86
- * @description Gets an environment variable from the underpost root environment.
87
- * @param {string} key - The key of the environment variable to get.
88
- * @param {string} value - The value of the environment variable to get.
89
- * @param {object} options - Options for getting the environment variable.
90
- * @param {boolean} [options.plain=false] - If true, returns the environment variable value as a string.
91
- * @param {boolean} [options.disableLog=false] - If true, disables logging of the environment variable value.
92
- * @param {boolean} [options.copy=false] - If true, copies the environment variable value to the clipboard.
93
- * @memberof UnderpostEnv
94
- */
95
- get(key, value, options = { plain: false, disableLog: false, copy: false }) {
96
- const exeRootPath = `${getNpmRootPath()}/underpost`;
97
- const envPath = `${exeRootPath}/.env`;
98
- if (!fs.existsSync(envPath) || !fs.statSync(envPath).isFile()) return undefined;
99
- const env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
100
- if (!options.disableLog)
101
- options?.plain === true ? console.log(env[key]) : logger.info(`${key}(${typeof env[key]})`, env[key]);
102
- if (options.copy === true) pbcopy(env[key]);
103
- return env[key];
104
- },
105
- /**
106
- * @method list
107
- * @description Lists all environment variables in the underpost root environment.
108
- * @param {string} key - Not used for list operation.
109
- * @param {string} value - Not used for list operation.
110
- * @param {object} options - Options for listing environment variables.
111
- * @param {string} [options.filter] - Filter keyword to match against keys or values.
112
- * @memberof UnderpostEnv
113
- */
114
- list(key, value, options = {}) {
115
- const exeRootPath = `${getNpmRootPath()}/underpost`;
116
- const envPath = `${exeRootPath}/.env`;
117
- guardEnvPath(envPath);
118
- if (!fs.existsSync(envPath)) {
119
- logger.warn(`Empty environment variables`);
120
- return {};
121
- }
122
- let env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
123
-
124
- // Apply filter if provided
125
- if (options.filter) {
126
- const filterKeyword = options.filter.toLowerCase();
127
- const filtered = {};
128
- for (const [envKey, envValue] of Object.entries(env)) {
129
- const keyMatch = envKey.toLowerCase().includes(filterKeyword);
130
- const valueMatch = String(envValue).toLowerCase().includes(filterKeyword);
131
- if (keyMatch || valueMatch) {
132
- filtered[envKey] = envValue;
133
- }
134
- }
135
- env = filtered;
136
- logger.info(`underpost root (filtered by: ${options.filter})`, env);
137
- } else {
138
- logger.info('underpost root', env);
139
- }
140
-
141
- return env;
142
- },
143
- /**
144
- * @method clean
145
- * @description Cleans the underpost root environment by removing the environment file.
146
- * @param {object} options - Options for cleaning the environment.
147
- * @param {Array<string>} [options.keepKeys=[]] - List of keys to keep in the environment file. If provided, only these keys will be retained.
148
- * @memberof UnderpostEnv
149
- */
150
- clean(options = { keepKeys: [] }) {
151
- const { keepKeys } = options;
152
- const exeRootPath = `${getNpmRootPath()}/underpost`;
153
- const envPath = `${exeRootPath}/.env`;
154
- if (keepKeys && keepKeys.length > 0 && fs.existsSync(envPath)) {
155
- const env = dotenv.parse(fs.readFileSync(envPath, 'utf8'));
156
- const filteredEnv = Object.fromEntries(Object.entries(env).filter(([key]) => keepKeys.includes(key)));
157
- writeEnv(envPath, filteredEnv);
158
- } else {
159
- fs.removeSync(envPath);
160
- }
161
- },
162
- /**
163
- * @method isInsideContainer
164
- * @description Detects whether the current process is running inside a container.
165
- * Checks for Kubernetes service injection or Docker's .dockerenv marker.
166
- * @returns {boolean} True if running inside a container.
167
- * @memberof UnderpostEnv
168
- */
169
- isInsideContainer() {
170
- return !!process.env.KUBERNETES_SERVICE_HOST || fs.existsSync('/.dockerenv');
171
- },
172
- };
173
- }
174
-
175
- export default UnderpostRootEnv;
176
-
177
- export { guardEnvPath };
@@ -1,41 +0,0 @@
1
- import { BlockChainService } from '../../services/blockchain/blockchain.service.js';
2
- import { BtnIcon } from './BtnIcon.js';
3
- import { dynamicCol } from './Css.js';
4
- import { EventsUI } from './EventsUI.js';
5
- import { Input } from './Input.js';
6
- import { Translate } from './Translate.js';
7
-
8
- const BlockChainManagement = {
9
- Render: async function (options) {
10
- setTimeout(() => {
11
- EventsUI.onClick(`.btn-upload-blockchain`, async () => {
12
- // const { result, status } = new BlockChainService.post();
13
- });
14
- });
15
- return html` ${dynamicCol({ containerSelector: options.idModal, id: 'blockchain' })}
16
- <div class="fl">
17
- <div class="in fll blockchain-col-a">
18
- <div class="in section-mp">
19
- <div class="in sub-title-modal"><i class="fa-solid fa-sliders"></i> ${Translate.Render('config')}</div>
20
- <div class="in">
21
- ${await Input.Render({
22
- id: `blockchain-seed`,
23
- label: html`<i class="fa-solid fa-pen-to-square"></i> ${Translate.Render('blockchain-seed')}`,
24
- containerClass: 'section-mp width-mini-box input-container',
25
- placeholder: true,
26
- })}
27
- ${await BtnIcon.Render({
28
- class: `inl section-mp btn-custom btn-upload-blockchain`,
29
- label: html`<i class="fas fa-plus"></i> ${Translate.Render(`create`)}`,
30
- })}
31
- </div>
32
- </div>
33
- </div>
34
- <div class="in fll blockchain-col-b">
35
- <div class="in section-mp"></div>
36
- </div>
37
- </div>`;
38
- },
39
- };
40
-
41
- export { BlockChainManagement };
@@ -1,9 +0,0 @@
1
- import { RichText } from './RichText.js';
2
-
3
- const Blog = {
4
- Render: async function () {
5
- return html`${await RichText.Render()}`;
6
- },
7
- };
8
-
9
- export { Blog };