cyberia 3.2.5 → 3.2.9

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 (301) hide show
  1. package/.github/workflows/engine-cyberia.cd.yml +2 -2
  2. package/.github/workflows/release.cd.yml +1 -2
  3. package/CHANGELOG.md +351 -1
  4. package/CLI-HELP.md +40 -13
  5. package/Dockerfile +0 -4
  6. package/README.md +242 -497
  7. package/bin/build.js +19 -5
  8. package/bin/cyberia.js +1149 -240
  9. package/bin/deploy.js +570 -1
  10. package/bin/file.js +6 -0
  11. package/bin/index.js +1149 -240
  12. package/bin/vs.js +1 -1
  13. package/conf.js +67 -89
  14. package/deployment.yaml +4 -222
  15. package/hardhat/package-lock.json +32 -32
  16. package/hardhat/package.json +3 -3
  17. package/jsconfig.json +1 -1
  18. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
  19. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
  20. package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -222
  21. package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
  22. package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
  23. package/manifests/deployment/dd-test-development/deployment.yaml +136 -66
  24. package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
  25. package/package.json +23 -14
  26. package/proxy.yaml +10 -118
  27. package/scripts/k3s-node-setup.sh +2 -2
  28. package/scripts/nat-iptables.sh +103 -18
  29. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
  30. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
  31. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +76 -21
  32. package/src/api/core/core.controller.js +10 -10
  33. package/src/api/core/core.service.js +10 -10
  34. package/src/api/crypto/crypto.controller.js +8 -8
  35. package/src/api/crypto/crypto.service.js +8 -8
  36. package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
  37. package/src/api/cyberia-action/cyberia-action.model.js +87 -0
  38. package/src/api/cyberia-action/cyberia-action.router.js +27 -0
  39. package/src/api/cyberia-action/cyberia-action.service.js +42 -0
  40. package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
  41. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
  42. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
  43. package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +16 -16
  44. package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
  45. package/src/api/cyberia-entity/cyberia-entity.service.js +10 -10
  46. package/src/api/cyberia-instance/cyberia-fallback-world.js +19 -209
  47. package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
  48. package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
  49. package/src/api/cyberia-instance/cyberia-instance.service.js +22 -57
  50. package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
  51. package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
  52. package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
  53. package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +216 -55
  54. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +4 -1
  55. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +18 -14
  56. package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
  57. package/src/api/cyberia-map/cyberia-map.service.js +10 -10
  58. package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
  59. package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
  60. package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
  61. package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
  62. package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
  63. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
  64. package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
  65. package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
  66. package/src/api/default/default.controller.js +10 -10
  67. package/src/api/default/default.service.js +10 -10
  68. package/src/api/document/document.controller.js +12 -12
  69. package/src/api/document/document.model.js +10 -16
  70. package/src/api/file/file.controller.js +8 -8
  71. package/src/api/file/file.model.js +10 -10
  72. package/src/api/file/file.service.js +36 -36
  73. package/src/api/instance/instance.controller.js +10 -10
  74. package/src/api/instance/instance.model.js +4 -10
  75. package/src/api/instance/instance.service.js +10 -10
  76. package/src/api/ipfs/ipfs.controller.js +12 -12
  77. package/src/api/ipfs/ipfs.model.js +4 -13
  78. package/src/api/ipfs/ipfs.service.js +14 -28
  79. package/src/api/object-layer/object-layer.controller.js +12 -12
  80. package/src/api/object-layer/object-layer.model.js +4 -17
  81. package/src/api/object-layer/object-layer.service.js +12 -12
  82. package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
  83. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
  84. package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
  85. package/src/api/test/test.controller.js +8 -8
  86. package/src/api/test/test.service.js +8 -8
  87. package/src/api/user/guest.service.js +99 -0
  88. package/src/api/user/user.controller.js +6 -6
  89. package/src/api/user/user.model.js +8 -13
  90. package/src/api/user/user.service.js +3 -20
  91. package/src/cli/cluster.js +61 -14
  92. package/src/cli/db.js +47 -2
  93. package/src/cli/deploy.js +67 -35
  94. package/src/cli/fs.js +79 -8
  95. package/src/cli/image.js +43 -1
  96. package/src/cli/index.js +26 -1
  97. package/src/cli/release.js +57 -1
  98. package/src/cli/repository.js +69 -31
  99. package/src/cli/run.js +415 -36
  100. package/src/cli/ssh.js +1 -1
  101. package/src/cli/static.js +43 -115
  102. package/src/client/Cryptokoyn.index.js +18 -21
  103. package/src/client/CyberiaPortal.index.js +19 -23
  104. package/src/client/Default.index.js +21 -33
  105. package/src/client/Itemledger.index.js +20 -26
  106. package/src/client/Underpost.index.js +19 -23
  107. package/src/client/components/core/404.js +4 -4
  108. package/src/client/components/core/500.js +4 -4
  109. package/src/client/components/core/Account.js +73 -60
  110. package/src/client/components/core/AgGrid.js +23 -33
  111. package/src/client/components/core/Alert.js +12 -13
  112. package/src/client/components/core/AppStore.js +1 -1
  113. package/src/client/components/core/Auth.js +35 -37
  114. package/src/client/components/core/Badge.js +7 -13
  115. package/src/client/components/core/BtnIcon.js +15 -17
  116. package/src/client/components/core/CalendarCore.js +42 -63
  117. package/src/client/components/core/Chat.js +13 -15
  118. package/src/client/components/core/ClientEvents.js +87 -0
  119. package/src/client/components/core/ColorPaletteElement.js +309 -0
  120. package/src/client/components/core/Content.js +17 -14
  121. package/src/client/components/core/Css.js +15 -71
  122. package/src/client/components/core/CssCore.js +12 -16
  123. package/src/client/components/core/D3Chart.js +4 -4
  124. package/src/client/components/core/Docs.js +64 -91
  125. package/src/client/components/core/DropDown.js +69 -91
  126. package/src/client/components/core/EventBus.js +92 -0
  127. package/src/client/components/core/EventsUI.js +14 -17
  128. package/src/client/components/core/FileExplorer.js +96 -228
  129. package/src/client/components/core/FullScreen.js +47 -75
  130. package/src/client/components/core/Input.js +24 -69
  131. package/src/client/components/core/Keyboard.js +25 -18
  132. package/src/client/components/core/KeyboardAvoidance.js +145 -0
  133. package/src/client/components/core/LoadingAnimation.js +25 -31
  134. package/src/client/components/core/LogIn.js +41 -41
  135. package/src/client/components/core/LogOut.js +23 -14
  136. package/src/client/components/core/Modal.js +462 -178
  137. package/src/client/components/core/NotificationManager.js +14 -18
  138. package/src/client/components/core/Panel.js +54 -50
  139. package/src/client/components/core/PanelForm.js +25 -125
  140. package/src/client/components/core/Polyhedron.js +110 -214
  141. package/src/client/components/core/PublicProfile.js +39 -32
  142. package/src/client/components/core/Recover.js +48 -44
  143. package/src/client/components/core/Responsive.js +88 -32
  144. package/src/client/components/core/RichText.js +9 -18
  145. package/src/client/components/core/Router.js +24 -3
  146. package/src/client/components/core/SearchBox.js +37 -37
  147. package/src/client/components/core/SignUp.js +39 -30
  148. package/src/client/components/core/SocketIo.js +31 -2
  149. package/src/client/components/core/SocketIoHandler.js +6 -6
  150. package/src/client/components/core/ToggleSwitch.js +8 -20
  151. package/src/client/components/core/ToolTip.js +5 -17
  152. package/src/client/components/core/Translate.js +56 -59
  153. package/src/client/components/core/Validator.js +26 -16
  154. package/src/client/components/core/Wallet.js +15 -26
  155. package/src/client/components/core/Worker.js +163 -27
  156. package/src/client/components/core/windowGetDimensions.js +7 -7
  157. package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
  158. package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
  159. package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
  160. package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
  161. package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
  162. package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
  163. package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
  164. package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
  165. package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
  166. package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
  167. package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
  168. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
  169. package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
  170. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +305 -61
  171. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
  172. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
  173. package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
  174. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
  175. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
  176. package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
  177. package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
  178. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
  179. package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
  180. package/src/client/components/default/CssDefault.js +12 -12
  181. package/src/client/components/default/LogInDefault.js +6 -4
  182. package/src/client/components/default/LogOutDefault.js +6 -4
  183. package/src/client/components/default/RouterDefault.js +47 -0
  184. package/src/client/components/default/SettingsDefault.js +4 -4
  185. package/src/client/components/default/SignUpDefault.js +6 -4
  186. package/src/client/components/default/TranslateDefault.js +3 -3
  187. package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
  188. package/src/client/components/itemledger/CssItemledger.js +15 -15
  189. package/src/client/components/itemledger/LogInItemledger.js +6 -4
  190. package/src/client/components/itemledger/LogOutItemledger.js +6 -4
  191. package/src/client/components/itemledger/RouterItemledger.js +38 -0
  192. package/src/client/components/itemledger/SettingsItemledger.js +4 -4
  193. package/src/client/components/itemledger/SignUpItemledger.js +6 -4
  194. package/src/client/components/itemledger/TranslateItemledger.js +3 -3
  195. package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
  196. package/src/client/components/underpost/CssUnderpost.js +14 -14
  197. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
  198. package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
  199. package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
  200. package/src/client/components/underpost/LogInUnderpost.js +6 -4
  201. package/src/client/components/underpost/LogOutUnderpost.js +6 -4
  202. package/src/client/components/underpost/RouterUnderpost.js +45 -0
  203. package/src/client/components/underpost/SettingsUnderpost.js +4 -4
  204. package/src/client/components/underpost/SignUpUnderpost.js +6 -4
  205. package/src/client/components/underpost/TranslateUnderpost.js +4 -4
  206. package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
  207. package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
  208. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
  209. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
  210. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
  211. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
  212. package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
  213. package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
  214. package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
  215. package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
  216. package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
  217. package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
  218. package/src/client/services/core/core.service.js +17 -49
  219. package/src/client/services/crypto/crypto.service.js +8 -13
  220. package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
  221. package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
  222. package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
  223. package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
  224. package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
  225. package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
  226. package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
  227. package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
  228. package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
  229. package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
  230. package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
  231. package/src/client/services/default/default.management.js +159 -267
  232. package/src/client/services/default/default.service.js +10 -16
  233. package/src/client/services/document/document.service.js +14 -19
  234. package/src/client/services/file/file.service.js +8 -13
  235. package/src/client/services/instance/instance.management.js +5 -5
  236. package/src/client/services/instance/instance.service.js +10 -15
  237. package/src/client/services/ipfs/ipfs.service.js +12 -18
  238. package/src/client/services/object-layer/object-layer.management.js +12 -12
  239. package/src/client/services/object-layer/object-layer.service.js +20 -26
  240. package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
  241. package/src/client/services/test/test.service.js +8 -13
  242. package/src/client/services/user/guest.service.js +86 -0
  243. package/src/client/services/user/user.management.js +5 -5
  244. package/src/client/services/user/user.service.js +14 -20
  245. package/src/client/ssr/body/404.js +3 -3
  246. package/src/client/ssr/body/500.js +3 -3
  247. package/src/client/ssr/body/CacheControl.js +5 -2
  248. package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
  249. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
  250. package/src/client/ssr/head/PwaItemledger.js +197 -60
  251. package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
  252. package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
  253. package/src/client/ssr/offline/Maintenance.js +12 -11
  254. package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
  255. package/src/client/ssr/pages/Test.js +2 -2
  256. package/src/client/sw/core.sw.js +212 -0
  257. package/src/grpc/cyberia/grpc-server.js +179 -67
  258. package/src/index.js +1 -1
  259. package/src/runtime/cyberia-client/Dockerfile +80 -0
  260. package/src/runtime/cyberia-server/Dockerfile +37 -0
  261. package/src/runtime/express/Dockerfile +4 -4
  262. package/src/runtime/lampp/Dockerfile +8 -7
  263. package/src/runtime/wp/Dockerfile +11 -17
  264. package/src/server/atlas-sprite-sheet-generator.js +4 -2
  265. package/src/server/client-build-docs.js +45 -46
  266. package/src/server/client-build.js +334 -60
  267. package/src/server/client-formatted.js +47 -16
  268. package/src/server/conf.js +5 -4
  269. package/src/server/data-query.js +32 -20
  270. package/src/server/dns.js +22 -0
  271. package/src/server/ipfs-client.js +232 -91
  272. package/src/server/object-layer.js +1 -6
  273. package/src/server/process.js +13 -27
  274. package/src/server/semantic-layer-generator-floor.js +11 -51
  275. package/src/server/semantic-layer-generator-resource.js +259 -0
  276. package/src/server/semantic-layer-generator-skin.js +41 -171
  277. package/src/server/semantic-layer-generator.js +122 -14
  278. package/src/server/shape-generator.js +108 -0
  279. package/src/server/start.js +17 -3
  280. package/src/server/valkey.js +141 -235
  281. package/tsconfig.docs.json +15 -0
  282. package/typedoc.dd-cyberia.json +29 -0
  283. package/typedoc.json +29 -0
  284. package/WHITE-PAPER.md +0 -1540
  285. package/hardhat/README.md +0 -531
  286. package/hardhat/WHITE-PAPER.md +0 -1540
  287. package/jsdoc.dd-cyberia.json +0 -68
  288. package/jsdoc.json +0 -68
  289. package/src/api/object-layer/README.md +0 -672
  290. package/src/client/components/core/ColorPalette.js +0 -5267
  291. package/src/client/components/core/JoyStick.js +0 -80
  292. package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
  293. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
  294. package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
  295. package/src/client/components/default/RoutesDefault.js +0 -49
  296. package/src/client/components/itemledger/RoutesItemledger.js +0 -40
  297. package/src/client/components/underpost/RoutesUnderpost.js +0 -47
  298. package/src/client/sw/default.sw.js +0 -127
  299. package/src/client/sw/template.sw.js +0 -84
  300. package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
  301. package/src/grpc/cyberia/README.md +0 -326
@@ -1,16 +1,14 @@
1
1
  // https://www.ag-grid.com/javascript-data-grid/getting-started/
2
2
  // https://www.ag-grid.com/javascript-data-grid/themes/
3
-
4
3
  import { ThemeEvents, darkTheme } from './Css.js';
5
4
  import { append, htmls, s } from './VanillaJs.js';
6
5
  import { getProxyPath } from './Router.js';
7
6
  import './Pagination.js';
8
7
  import { Modal } from './Modal.js';
9
-
10
- const AgGrid = {
11
- grids: {},
12
- theme: `ag-theme-alpine`, // quartz
13
- Render: async function (options) {
8
+ class AgGrid {
9
+ static grids = {};
10
+ static theme = `ag-theme-alpine`;
11
+ static async instance(options) {
14
12
  let { id, paginationOptions } = options;
15
13
  setTimeout(() => {
16
14
  // Normalize rowSelection from deprecated string form to object form (AG Grid v32.2.1+)
@@ -21,7 +19,6 @@ const AgGrid = {
21
19
  mode: mode === 'multiple' ? 'multiRow' : 'singleRow',
22
20
  };
23
21
  }
24
-
25
22
  // Grid Options: Contains all of the grid configurations
26
23
  const gridOptions = {
27
24
  // Use legacy CSS theme mode to avoid conflict with Theming API (AG Grid v33+)
@@ -63,24 +60,20 @@ const AgGrid = {
63
60
  onSortChanged: options?.onSortChanged,
64
61
  // set background colour on every row, this is probably bad, should be using CSS classes
65
62
  // rowStyle: { background: 'black' },
66
-
67
63
  // set background colour on even rows again, this looks bad, should be using CSS classes
68
64
  // getRowStyle: (params) => {
69
65
  // if (params.node.rowIndex % 2 === 0) {
70
66
  // return { background: 'red' };
71
67
  // }
72
68
  // },
73
-
74
69
  // all rows assigned CSS class 'my-green-class'
75
70
  // rowClass: 'my-green-class',
76
-
77
71
  // all even rows assigned 'my-shaded-effect'
78
72
  // getRowClass: (params) => {
79
73
  // if (params.node.rowIndex % 2 === 0) {
80
74
  // return 'my-shaded-effect';
81
75
  // }
82
76
  // },
83
-
84
77
  // domLayout: 'autoHeight', || 'normal'
85
78
  // Column Definitions: Defines & controls grid columns.
86
79
  columnDefs: options?.gridOptions?.rowData?.[0]
@@ -90,25 +83,23 @@ const AgGrid = {
90
83
  : [],
91
84
  ...gridOptionsOverrides,
92
85
  };
93
-
94
86
  // Your Javascript code to create the grid
95
87
  const myGridElement = s(`.${id}`);
96
- if (this.grids[id]) this.grids[id].destroy();
97
- this.grids[id] = agGrid.createGrid(myGridElement, gridOptions);
88
+ if (AgGrid.grids[id]) AgGrid.grids[id].destroy();
89
+ AgGrid.grids[id] = agGrid.createGrid(myGridElement, gridOptions);
98
90
  // myGridElement.style.setProperty('width', '100%');
99
91
  ThemeEvents[id] = () => {
100
92
  if (s(`.${id}`)) {
101
93
  // darkTheme has already been updated by Css.js when this event fires
102
94
  // If darkTheme is true: remove light class, add dark class
103
95
  // If darkTheme is false: remove dark class, add light class
104
- s(`.${id}`).classList.remove(this.theme, this.theme + '-dark');
105
- s(`.${id}`).classList.add(darkTheme ? this.theme + '-dark' : this.theme);
96
+ s(`.${id}`).classList.remove(AgGrid.theme, AgGrid.theme + '-dark');
97
+ s(`.${id}`).classList.add(darkTheme ? AgGrid.theme + '-dark' : AgGrid.theme);
106
98
  } else {
107
99
  // console.warn('change theme: grid not found');
108
100
  delete ThemeEvents[id];
109
101
  }
110
102
  };
111
-
112
103
  if (!options.style || !options.style.height) {
113
104
  if (options.parentModal && Modal.Data[options.parentModal].options.observer) {
114
105
  Modal.Data[options.parentModal].onObserverListener[id + '-observer'] = ({ width, height }) => {
@@ -127,15 +118,15 @@ const AgGrid = {
127
118
  : '';
128
119
  return html`
129
120
  <div
130
- class="${id} ${darkTheme ? this.theme + '-dark' : this.theme}"
121
+ class="${id} ${darkTheme ? AgGrid.theme + '-dark' : AgGrid.theme}"
131
122
  style="${options?.style
132
123
  ? Object.keys(options.style).map((styleKey) => `${styleKey}: ${options.style[styleKey]}; `)
133
124
  : ''}"
134
125
  ></div>
135
126
  ${usePagination ? `<ag-pagination id="ag-pagination-${id}" ${limitOptionsAttr}></ag-pagination>` : ''}
136
127
  `;
137
- },
138
- RenderStyle: async function (
128
+ }
129
+ static async RenderStyle(
139
130
  options = {
140
131
  eventThemeId: 'AgGrid',
141
132
  style: {
@@ -147,15 +138,15 @@ const AgGrid = {
147
138
  },
148
139
  ) {
149
140
  /*
150
- --ag-foreground-color: rgb(126, 46, 132);
151
- --ag-background-color: rgb(249, 245, 227);
152
- --ag-header-foreground-color: rgb(204, 245, 172);
153
- --ag-header-background-color: rgb(209, 64, 129);
154
- --ag-odd-row-background-color: rgb(0, 0, 0, 0.03);
155
- --ag-header-column-resize-handle-color: rgb(126, 46, 132);
156
-
157
- --ag-font-size: 17px;
158
- */
141
+ --ag-foreground-color: rgb(126, 46, 132);
142
+ --ag-background-color: rgb(249, 245, 227);
143
+ --ag-header-foreground-color: rgb(204, 245, 172);
144
+ --ag-header-background-color: rgb(209, 64, 129);
145
+ --ag-odd-row-background-color: rgb(0, 0, 0, 0.03);
146
+ --ag-header-column-resize-handle-color: rgb(126, 46, 132);
147
+
148
+ --ag-font-size: 17px;
149
+ */
159
150
  if (!s(`.ag-grid-base-style`))
160
151
  append(
161
152
  'head',
@@ -167,7 +158,7 @@ const AgGrid = {
167
158
  /><link
168
159
  rel="stylesheet"
169
160
  type="text/css"
170
- href="${getProxyPath()}styles/ag-grid-community/${this.theme}.min.css"
161
+ href="${getProxyPath()}styles/ag-grid-community/${AgGrid.theme}.min.css"
171
162
  />`,
172
163
  );
173
164
  ThemeEvents[options.eventThemeId] = () => {
@@ -242,7 +233,6 @@ const AgGrid = {
242
233
  </style>`}`,
243
234
  );
244
235
  };
245
- },
246
- };
247
-
236
+ }
237
+ }
248
238
  export { AgGrid };
@@ -1,5 +1,4 @@
1
1
  import { Translate } from './Translate.js';
2
-
3
2
  const maintenance = async () => {
4
3
  const icon = html`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 24 24">
5
4
  <path
@@ -14,10 +13,9 @@ const maintenance = async () => {
14
13
  return html` <div class="abs center" style="top: 45%">
15
14
  ${icon}
16
15
  <br />
17
- <br />${Translate.Render('server-maintenance')}
16
+ <br />${Translate.instance('server-maintenance')}
18
17
  </div>`;
19
18
  };
20
-
21
19
  const noInternet = async () => {
22
20
  const icon = html`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 20 20">
23
21
  <path
@@ -28,10 +26,9 @@ const noInternet = async () => {
28
26
  return html` <div class="abs center" style="top: 45%">
29
27
  ${icon}
30
28
  <br />
31
- <br />${Translate.Render('no-internet-connection')}
29
+ <br />${Translate.instance('no-internet-connection')}
32
30
  </div>`;
33
31
  };
34
-
35
32
  const e404 = async () => {
36
33
  const icon = html`
37
34
  <svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 24 24">
@@ -47,12 +44,11 @@ const e404 = async () => {
47
44
  <br />
48
45
  <span class="bold">404</span>
49
46
  <br />
50
- <br />${Translate.Render('page-not-found')} <br />
47
+ <br />${Translate.instance('page-not-found')} <br />
51
48
  <br />
52
- <a target="_top" href="${location.origin}">${Translate.Render('back')}</a>
49
+ <a target="_top" href="${location.origin}">${Translate.instance('back')}</a>
53
50
  </div>`;
54
51
  };
55
-
56
52
  const e500 = async () => {
57
53
  const icon = html`<svg xmlns="http://www.w3.org/2000/svg" width="80" height="80" viewBox="0 0 20 20">
58
54
  <path
@@ -66,12 +62,15 @@ const e500 = async () => {
66
62
  <br />
67
63
  <span class="bold">500</span>
68
64
  <br />
69
- <br />${Translate.Render('page-broken')} <br />
65
+ <br />${Translate.instance('page-broken')} <br />
70
66
  <br />
71
- <a target="_top" href="${location.origin}">${Translate.Render('back')}</a>
67
+ <a target="_top" href="${location.origin}">${Translate.instance('back')}</a>
72
68
  </div>`;
73
69
  };
74
-
75
- const Alert = { maintenance, noInternet, e404, e500 };
76
-
70
+ class Alert {
71
+ static maintenance = maintenance;
72
+ static noInternet = noInternet;
73
+ static e404 = e404;
74
+ static e500 = e500;
75
+ }
77
76
  export { Alert };
@@ -10,7 +10,7 @@
10
10
  * @classdesc Per-app singleton state store for WebSocket channel data and authenticated user state.
11
11
  *
12
12
  * Usage: `AppStoreX.Data.user.main.model.user` — the authenticated user object.
13
- * `AppStoreX.Data` keys (`chat`, `mailer`, `stream`, etc.) — channel definitions for `SocketIo.Init`.
13
+ * `AppStoreX.Data` keys (`chat`, `mailer`, `stream`, etc.) — channel definitions for `SocketIo.instance`.
14
14
  * @memberof AppStore
15
15
  */
16
16
  class AppStore {
@@ -14,6 +14,7 @@ import { NotificationManager } from './NotificationManager.js';
14
14
  import { SearchBox } from './SearchBox.js';
15
15
  import { Translate } from './Translate.js';
16
16
  import { s } from './VanillaJs.js';
17
+ import { GuestService } from '../../services/user/guest.service.js';
17
18
 
18
19
  const logger = loggerFactory(import.meta, { trace: true });
19
20
 
@@ -22,20 +23,6 @@ const logger = loggerFactory(import.meta, { trace: true });
22
23
  * @memberof AuthClient
23
24
  */
24
25
  class Auth {
25
- /**
26
- * The current user access token (JWT).
27
- * @type {string}
28
- * @method
29
- */
30
- #token = '';
31
-
32
- /**
33
- * The token for anonymous guest sessions.
34
- * @type {string}
35
- * @method
36
- */
37
- #guestToken = '';
38
-
39
26
  /**
40
27
  * Timeout ID for the token refresh schedule.
41
28
  * @type {number | undefined}
@@ -59,7 +46,7 @@ class Auth {
59
46
  * @returns {string} The set token value.
60
47
  */
61
48
  setToken(value = '') {
62
- return (this.#token = value);
49
+ return GuestService.setUserToken(value);
63
50
  }
64
51
 
65
52
  /**
@@ -68,7 +55,7 @@ class Auth {
68
55
  * @returns {string} An empty string.
69
56
  */
70
57
  deleteToken() {
71
- return (this.#token = '');
58
+ return GuestService.clearUserToken();
72
59
  }
73
60
 
74
61
  /**
@@ -77,7 +64,7 @@ class Auth {
77
64
  * @returns {string} The JWT token.
78
65
  */
79
66
  getToken() {
80
- return this.#token;
67
+ return GuestService.getUserToken();
81
68
  }
82
69
 
83
70
  /**
@@ -87,7 +74,7 @@ class Auth {
87
74
  * @returns {string} The set guest token value.
88
75
  */
89
76
  setGuestToken(value = '') {
90
- return (this.#guestToken = value);
77
+ return GuestService.setGuestToken(value);
91
78
  }
92
79
 
93
80
  /**
@@ -96,7 +83,7 @@ class Auth {
96
83
  * @returns {string} An empty string.
97
84
  */
98
85
  deleteGuestToken() {
99
- return (this.#guestToken = '');
86
+ return GuestService.clearGuestToken();
100
87
  }
101
88
 
102
89
  /**
@@ -105,7 +92,7 @@ class Auth {
105
92
  * @returns {string} The guest token.
106
93
  */
107
94
  getGuestToken() {
108
- return this.#guestToken;
95
+ return GuestService.getGuestToken();
109
96
  }
110
97
 
111
98
  /**
@@ -114,9 +101,7 @@ class Auth {
114
101
  * @returns {string} The Bearer token string or an empty string.
115
102
  */
116
103
  getJWT() {
117
- if (this.getToken()) return `Bearer ${this.getToken()}`;
118
- if (this.getGuestToken()) return `Bearer ${this.getGuestToken()}`;
119
- return '';
104
+ return GuestService.getAuthorizationHeader();
120
105
  }
121
106
 
122
107
  /**
@@ -190,7 +175,7 @@ class Auth {
190
175
  */
191
176
  async sessionIn(userServicePayload) {
192
177
  try {
193
- let token = userServicePayload?.data?.token || localStorage.getItem('jwt');
178
+ let token = userServicePayload?.data?.token || GuestService.getUserToken();
194
179
 
195
180
  if (token) {
196
181
  this.setToken(token);
@@ -204,7 +189,11 @@ class Auth {
204
189
  if (status === 'success' && data.token) {
205
190
  // A valid user token was found/refreshed
206
191
  this.setToken(data.token);
207
- localStorage.setItem('jwt', data.token);
192
+ GuestService.clearGuestToken();
193
+ await GuestService.setMeta('session', {
194
+ role: data.user?.role,
195
+ userId: data.user?._id,
196
+ });
208
197
  // Clear cached profile image to ensure fresh load for new user
209
198
  LogIn.Scope.user.main.model.user = {};
210
199
  this.renderSessionUI();
@@ -218,7 +207,7 @@ class Auth {
218
207
  setTimeout(() => {
219
208
  s(`.main-btn-log-in`).click();
220
209
  NotificationManager.Push({
221
- html: Translate.Render(`expired-session`),
210
+ html: Translate.instance(`expired-session`),
222
211
  status: 'warning',
223
212
  });
224
213
  });
@@ -227,17 +216,19 @@ class Auth {
227
216
 
228
217
  // Cleanup failed user session attempt
229
218
  this.deleteToken();
230
- localStorage.removeItem('jwt');
231
219
 
232
220
  // Anon guest session attempt
233
- let guestToken = localStorage.getItem('jwt.g');
221
+ let guestToken = GuestService.getGuestToken();
234
222
  if (guestToken) {
235
223
  this.setGuestToken(guestToken);
236
224
  let { data, status, message } = await UserService.get({ id: 'auth' }); // Verify guest token
237
225
  if (status === 'success' && data.token) {
238
226
  // Guest token is valid and refreshed
239
227
  this.setGuestToken(data.token);
240
- localStorage.setItem('jwt.g', data.token);
228
+ await GuestService.setMeta('guest-session', {
229
+ role: data.user?.role,
230
+ userId: data.user?._id,
231
+ });
241
232
  // Clear cached profile image for fresh guest session
242
233
  LogIn.Scope.user.main.model.user = {};
243
234
  await LogIn.Trigger(data);
@@ -264,10 +255,11 @@ class Auth {
264
255
  * @returns {Promise<object>} A promise resolving to the newly created guest session data.
265
256
  */
266
257
  async sessionOut() {
267
- // 1. End User Session
258
+ // 1. End User Session — skip the network call when there is no active user session
259
+ // (avoids a wasted DELETE round-trip for guests / new visitors)
260
+ const hasUserSession = !!GuestService.getUserToken();
268
261
  try {
269
- const result = await UserService.delete({ id: 'logout' });
270
- localStorage.removeItem('jwt');
262
+ const result = hasUserSession ? await UserService.delete({ id: 'logout' }) : null;
271
263
  SearchBox.RecentResults.clear();
272
264
  this.deleteToken();
273
265
  if (this.#refreshTimeout) {
@@ -277,22 +269,28 @@ class Auth {
277
269
  this.renderGuestUi();
278
270
  // Reset user data in the LogIn state/model
279
271
  LogIn.Scope.user.main.model.user = {};
280
- await LogOut.Trigger(result);
272
+ if (result) await LogOut.Trigger(result);
281
273
  } catch (error) {
282
274
  logger.error('Error during user logout:', error);
283
275
  }
284
276
 
285
277
  // 2. Start Guest Session
286
278
  try {
287
- localStorage.removeItem('jwt.g');
288
279
  this.deleteGuestToken();
289
280
  const result = await UserService.post({ id: 'guest' }); // Request a new guest token
290
281
 
291
282
  if (result.status === 'success' && result.data.token) {
292
- localStorage.setItem('jwt.g', result.data.token);
293
283
  this.setGuestToken(result.data.token);
294
- // Recursively call sessionIn to complete the guest login process (UI update, etc.)
295
- return await this.sessionIn();
284
+ // Use the POST response data directly avoids a redundant GET /user/auth
285
+ // round-trip that would otherwise re-verify the token we just received.
286
+ await GuestService.setMeta('guest-session', {
287
+ role: result.data.user?.role,
288
+ userId: result.data.user?._id,
289
+ });
290
+ LogIn.Scope.user.main.model.user = {};
291
+ await LogIn.Trigger(result.data);
292
+ await Account.updateForm(result.data.user);
293
+ return result.data;
296
294
  } else {
297
295
  logger.error('Failed to get a new guest token.');
298
296
  return { user: UserMock.default };
@@ -2,31 +2,25 @@ import { getId, getIsoDate } from './CommonJs.js';
2
2
  import { Css, renderCssAttr, Themes } from './Css.js';
3
3
  import { Modal } from './Modal.js';
4
4
  import { append, prepend, s } from './VanillaJs.js';
5
-
6
- const Badge = {
7
- Tokens: {},
8
- Render: async function (options = { id: '', type: 'circle-red', classList: '', text: '', style: '' }) {
9
- if (!options.id) options.id = getId(this.Tokens, 'badge-');
5
+ class Badge {
6
+ static Tokens = {};
7
+ static async instance(options = { id: '', type: 'circle-red', classList: '', text: '', style: '' }) {
8
+ if (!options.id) options.id = getId(Badge.Tokens, 'badge-');
10
9
  else options.id = 'badge-' + options.id;
11
10
  if (options && options.style && !options.style.color) options.style.color = 'white';
12
11
  if (!options.classList) options.classList = '';
13
-
14
12
  const { id, type } = options;
15
- this.Tokens[id] = { ...options };
16
-
13
+ Badge.Tokens[id] = { ...options };
17
14
  switch (type) {
18
15
  case 'circle-red':
19
16
  options.classList += ' badge-notification-circle-red ';
20
17
  break;
21
-
22
18
  default:
23
19
  break;
24
20
  }
25
-
26
21
  return html`<div class="badge wfm ${options.classList} ${id}" style="${renderCssAttr(options)}">
27
22
  <div class="badge-text">${options?.text ? options.text : 'B'}</div>
28
23
  </div>`;
29
- },
30
- };
31
-
24
+ }
25
+ }
32
26
  export { Badge };
@@ -2,10 +2,9 @@ import { getId, s4 } from './CommonJs.js';
2
2
  import { renderCssAttr } from './Css.js';
3
3
  import { ToolTip } from './ToolTip.js';
4
4
  import { getAllChildNodes, htmlStrSanitize, s } from './VanillaJs.js';
5
-
6
- const BtnIcon = {
7
- Tokens: {},
8
- Render: async function (
5
+ class BtnIcon {
6
+ static Tokens = {};
7
+ static async instance(
9
8
  options = {
10
9
  class: '',
11
10
  type: '',
@@ -19,9 +18,9 @@ const BtnIcon = {
19
18
  useMenuBtn: false,
20
19
  },
21
20
  ) {
22
- const tokenId = getId(this.Tokens, 'btn-token-');
21
+ const tokenId = getId(BtnIcon.Tokens, 'btn-token-');
23
22
  if (options.useMenuBtn) options.class += ' main-menu-btn-selector';
24
- this.Tokens[tokenId] = { ...options };
23
+ BtnIcon.Tokens[tokenId] = { ...options };
25
24
  setTimeout(() => {
26
25
  if (s(`.a-${tokenId}`)) s(`.a-${tokenId}`).onclick = (e) => e.preventDefault();
27
26
  });
@@ -57,7 +56,7 @@ const BtnIcon = {
57
56
  if (options.tooltipHtml)
58
57
  setTimeout(() => {
59
58
  if (s(`.${tokenId}`))
60
- ToolTip.Render({
59
+ ToolTip.instance({
61
60
  container: `.${tokenId}`,
62
61
  id: tokenId,
63
62
  htmlRender: options.tooltipHtml,
@@ -66,15 +65,15 @@ const BtnIcon = {
66
65
  });
67
66
  });
68
67
  return render;
69
- },
68
+ }
70
69
  // https://developer.mozilla.org/en-US/docs/Games/Techniques/Control_mechanisms/Mobile_touch
71
- TouchTokens: {},
72
- RenderTouch: async function (options = { id: '', Events: {} }) {
70
+ static TouchTokens = {};
71
+ static async RenderTouch(options = { id: '', Events: {} }) {
73
72
  const { id } = options;
74
- this.TouchTokens[id] = { Events: {}, ...options };
73
+ BtnIcon.TouchTokens[id] = { Events: {}, ...options };
75
74
  setTimeout(() => {
76
75
  const triggerTouchEvents = () => {
77
- for (const event of Object.keys(this.TouchTokens[id].Events)) this.TouchTokens[id].Events[event]();
76
+ for (const event of Object.keys(BtnIcon.TouchTokens[id].Events)) BtnIcon.TouchTokens[id].Events[event]();
78
77
  };
79
78
  if (s(`.${id}`)) {
80
79
  s(`.${id}`).addEventListener('touchstart', () => {
@@ -101,11 +100,10 @@ const BtnIcon = {
101
100
  style="${renderCssAttr({ style: { width: '100%', height: '100%', top: '0px', left: '0px', border: 'none' } })}"
102
101
  >
103
102
  </canvas>`;
104
- },
105
- findLabel: (el) =>
103
+ }
104
+ static findLabel = (el) =>
106
105
  getAllChildNodes(el).find((e) => {
107
106
  return e.classList && Array.from(e.classList).find((e) => e.match('BtnIcon-label'));
108
- }),
109
- };
110
-
107
+ });
108
+ }
111
109
  export { BtnIcon };