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
@@ -6,8 +6,9 @@ import { RouterReady } from '../core/Router.js';
6
6
  import { s } from '../core/VanillaJs.js';
7
7
  import { commonUserGuard } from '../core/CommonJs.js';
8
8
 
9
- const LogInUnderpost = async function () {
10
- LogIn.Event['LogInUnderpost'] = async (options) => {
9
+ class LogInUnderpost {
10
+ static async instance() {
11
+ LogIn.onLogin(async (options) => {
11
12
  const { token, user } = options;
12
13
 
13
14
  AppStoreUnderpost.Data.user.main.model.user = user;
@@ -15,9 +16,10 @@ const LogInUnderpost = async function () {
15
16
  await RouterReady;
16
17
  await PanelForm.Data['underpost-panel'].updatePanel();
17
18
  if (s(`.main-btn-cloud`) && commonUserGuard(user.role)) s(`.main-btn-cloud`).classList.remove('hide');
18
- };
19
+ }, { key: 'LogInUnderpost' });
19
20
  const { user } = await Auth.sessionIn();
20
21
  AppStoreUnderpost.Data.user.main.model.user = user;
21
- };
22
+ }
23
+ }
22
24
 
23
25
  export { LogInUnderpost };
@@ -3,13 +3,15 @@ import { AppStoreUnderpost } from './AppStoreUnderpost.js';
3
3
  import { PanelForm } from '../core/PanelForm.js';
4
4
  import { s } from '../core/VanillaJs.js';
5
5
 
6
- const LogOutUnderpost = async function () {
7
- LogOut.Event['LogOutUnderpost'] = async (result = { user: { _id: '' } }) => {
6
+ class LogOutUnderpost {
7
+ static async instance() {
8
+ LogOut.onLogout(async (result = { user: { _id: '' } }) => {
8
9
  AppStoreUnderpost.Data.user.main.model.user = result.user;
9
10
 
10
11
  PanelForm.Data['underpost-panel'].updatePanel();
11
12
  if (s(`.main-btn-cloud`)) s(`.main-btn-cloud`).classList.add('hide');
12
- };
13
- };
13
+ }, { key: 'LogOutUnderpost' });
14
+ }
15
+ }
14
16
 
15
17
  export { LogOutUnderpost };
@@ -0,0 +1,45 @@
1
+ import { loggerFactory } from '../core/Logger.js';
2
+ import { Modal } from '../core/Modal.js';
3
+ import { s } from '../core/VanillaJs.js';
4
+
5
+ const logger = loggerFactory(import.meta);
6
+
7
+ const BannerAppTemplate = html`underpost.net`;
8
+
9
+ class RouterUnderpost {
10
+ static routes() {
11
+ return {
12
+ '/': {
13
+ title: 'Home',
14
+ render: () => Modal.onHomeRouterEvent(),
15
+ },
16
+ '/contracultura-cyberpunk': {
17
+ title: 'contracultura-cyberpunk',
18
+ render: () => s(`.main-btn-contracultura-cyberpunk`).click(),
19
+ },
20
+ '/lab-gallery': { title: 'lab-gallery', render: () => s(`.main-btn-lab-gallery`).click() },
21
+ '/log-in': { title: 'log-in', render: () => s(`.main-btn-log-in`).click() },
22
+ '/sign-up': { title: 'sign-up', render: () => s(`.main-btn-sign-up`).click() },
23
+ '/log-out': {
24
+ title: 'log-out',
25
+ render: () => s(`.main-btn-log-out`).click(),
26
+ },
27
+ '/account': {
28
+ title: 'account',
29
+ render: () => s(`.main-btn-account`).click(),
30
+ },
31
+ '/u': { title: 'public-profile', render: () => s(`.main-btn-public-profile`).click() },
32
+ '/settings': { title: 'settings', render: () => s(`.main-btn-settings`).click() },
33
+ '/recover': { title: 'recover', render: () => s(`.main-btn-recover`).click() },
34
+ '/content': { title: 'content', render: () => s(`.main-btn-content`).click() },
35
+ '/cloud': { title: 'cloud', render: () => s(`.main-btn-cloud`).click() },
36
+ '/polyhedron': { title: 'polyhedron', render: () => s(`.main-btn-polyhedron`).click() },
37
+ };
38
+ }
39
+
40
+ static instance() {
41
+ return { Routes: RouterUnderpost.routes };
42
+ }
43
+ }
44
+
45
+ export { RouterUnderpost, BannerAppTemplate };
@@ -3,14 +3,14 @@ import { FullScreen } from '../core/FullScreen.js';
3
3
  import { Translate } from '../core/Translate.js';
4
4
  import { Worker } from '../core/Worker.js';
5
5
 
6
- const SettingsUnderpost = {
7
- Render: async function () {
6
+ class SettingsUnderpost {
7
+ static async instance() {
8
8
  let render = await FullScreen.RenderSetting();
9
9
  render += await Css.RenderSetting();
10
10
  render += await Translate.RenderSetting();
11
11
  render += await Worker.RenderSetting();
12
12
  return render;
13
- },
14
- };
13
+ }
14
+ }
15
15
 
16
16
  export { SettingsUnderpost };
@@ -1,9 +1,11 @@
1
1
  import { SignUp } from '../core/SignUp.js';
2
2
 
3
- const SignUpUnderpost = function () {
4
- SignUp.Event['SignUpUnderpost'] = async (options) => {
3
+ class SignUpUnderpost {
4
+ static instance() {
5
+ SignUp.onSignup(async (options) => {
5
6
  const { user } = options;
6
- };
7
- };
7
+ }, { key: 'SignUpUnderpost' });
8
+ }
9
+ }
8
10
 
9
11
  export { SignUpUnderpost };
@@ -1,10 +1,10 @@
1
1
  import { Translate } from '../core/Translate.js';
2
2
 
3
- const TranslateUnderpost = {
4
- Init: async function () {
3
+ class TranslateUnderpost {
4
+ static async instance() {
5
5
  Translate.Data['contracultura-cyberpunk'] = { en: 'Contracultura Cyberpunk', es: 'Contracultura Cyberpunk' };
6
6
  Translate.Data['lab-gallery'] = { en: 'Lab Gallery', es: 'Lab Gallery' };
7
- },
8
- };
7
+ }
8
+ }
9
9
 
10
10
  export { TranslateUnderpost };
@@ -0,0 +1,235 @@
1
+ # Action System
2
+
3
+ **Module:** `src/api/cyberia-action` · `src/api/cyberia-dialogue`
4
+
5
+ ---
6
+
7
+ ## Overview
8
+
9
+ The Action System defines how NPC entities interact with players. An **Action** is a spatial, typed payload attached to a map entity that the player activates by tapping the NPC. Actions drive dialogue, shops, crafting, storage, and quest grant events.
10
+
11
+ > **Implementation status — Pre-alpha:** The CyberiaAction and CyberiaDialogue MongoDB schemas and Engine REST API (`src/api/cyberia-action`, `src/api/cyberia-dialogue`) are defined. Go server integration (NPC tap routing to action handlers, shop/craft transaction processing, quest grant on dialogue completion) is planned for the **Alpha milestone**. The `freeze_start`/`freeze_end` WS messages for modal protection are implemented in the Go server today.
12
+
13
+ ---
14
+
15
+ ## Data Model
16
+
17
+ ### CyberiaAction Schema
18
+
19
+ ```
20
+ CyberiaAction {
21
+ code: String // stable unique slug
22
+ type: String // see Action Types below
23
+ label: String // display label on interaction button
24
+
25
+ // Spatial origin — NPC entity cell providing this action
26
+ sourceMapCode: String
27
+ sourceCellX: Number
28
+ sourceCellY: Number
29
+
30
+ // Identity — used to match quest objectives of type 'talk'
31
+ provideItemId: String // entity's active skin ObjectLayer item ID (e.g. 'wason', 'alex')
32
+
33
+ // Quest grant — first interaction with this NPC starts the linked quest chain
34
+ grantQuestCode: String // empty = no quest granted
35
+
36
+ // Dialogue
37
+ dialogCode: String // greeting dialogue shown on tap
38
+ questDialogueCodes: [String] // ordered dialogue codes that satisfy 'talk' quest objectives
39
+
40
+ // Type-specific payloads:
41
+ shopItems: [{
42
+ itemId: String // ObjectLayer item ID being sold
43
+ priceItemId: String // currency item ID (default: 'coin')
44
+ priceQty: Number // price quantity
45
+ }]
46
+
47
+ craftRecipes: [{
48
+ outputItems: [{ itemId: String, qty: Number }]
49
+ ingredients: [{ itemId: String, qty: Number }]
50
+ }]
51
+
52
+ storageSlots: Number // storage capacity (type='storage' only)
53
+ }
54
+ ```
55
+
56
+ ### CyberiaDialogue Schema
57
+
58
+ ```
59
+ CyberiaDialogue {
60
+ code: String // grouping key (e.g. "wason-intro")
61
+ order: Number // 0-based sequence within the group
62
+ speaker: String // display name above the dialogue line
63
+ text: String // dialogue line content
64
+ mood: String // emotion hint: neutral | angry | sad | happy | ...
65
+ }
66
+ ```
67
+
68
+ A single `code` groups many ordered dialogue lines. The C client fetches all lines for a given code in one request, then displays them sequentially.
69
+
70
+ ---
71
+
72
+ ## Action Types
73
+
74
+ | Type | Description | Active Payload |
75
+ | ------------ | -------------------------------------------------------------- | ---------------------------------------------------- |
76
+ | `quest-talk` | Grants a quest on first interaction, then shows dialogue | `grantQuestCode`, `dialogCode`, `questDialogueCodes` |
77
+ | `talk` | NPC dialogue only — satisfies `talk` quest objectives | `dialogCode`, `questDialogueCodes` |
78
+ | `shop` | Item shop — player buys items with in-game currency | `shopItems[]` |
79
+ | `craft` | Crafting station — consume ingredients to produce output items | `craftRecipes[]` |
80
+ | `storage` | Personal item storage vault | `storageSlots` |
81
+
82
+ ---
83
+
84
+ ## Action–Quest Integration
85
+
86
+ The Action System and Quest System are linked through `provideItemId` and `questDialogueCodes`:
87
+
88
+ ```mermaid
89
+ graph LR
90
+ Quest["CyberiaQuest\nstep.objective:\n{ type: 'talk', itemId: 'wason' }"]
91
+ Action["CyberiaAction\nprovideItemId: 'wason'\ngrantQuestCode: 'wason-intro'\nquestDialogueCodes: ['wason-intro']"]
92
+ Progress["CyberiaQuestProgress\nstep.objectiveProgress[i].current++"]
93
+
94
+ Quest -->|matched by provideItemId| Action
95
+ Action -->|player completes dialogue| Progress
96
+ ```
97
+
98
+ **Talk objective satisfaction flow:**
99
+
100
+ 1. Player taps NPC → interaction bubble shown.
101
+ 2. Player taps interaction bubble → Action is fetched by spatial coordinates.
102
+ 3. Client displays `dialogCode` dialogue sequence.
103
+ 4. On first tap, if `grantQuestCode` is set → server grants the quest.
104
+ 5. After viewing all `questDialogueCodes` dialogue lines → server increments the matching `talk` objective's `current` counter.
105
+
106
+ ---
107
+
108
+ ## Shop Transaction Flow
109
+
110
+ ```mermaid
111
+ sequenceDiagram
112
+ participant P as Player
113
+ participant G as Go Server
114
+ participant E as Engine (Node.js)
115
+
116
+ P->>G: Tap shop NPC
117
+ G->>E: GET /api/cyberia-action?sourceMapCode=...&sourceCellX=...
118
+ E-->>G: CyberiaAction { type: 'shop', shopItems: [...] }
119
+ G-->>P: init_data → shop payload (item list + prices)
120
+ P-->>G: FrozenInteractionState (modal open)
121
+
122
+ P->>G: Buy request { itemId, quantity }
123
+ G->>E: GET player coin balance
124
+ Note over G: balance >= price * quantity?
125
+ G->>E: Deduct coins + grant item to inventory
126
+ G-->>P: FCT: CoinLoss + ItemGain events
127
+ G-->>P: ThawPlayer (modal close allowed)
128
+ ```
129
+
130
+ ---
131
+
132
+ ## Craft Transaction Flow
133
+
134
+ ```mermaid
135
+ sequenceDiagram
136
+ participant P as Player
137
+ participant G as Go Server
138
+ participant E as Engine (Node.js)
139
+ participant BC as ObjectLayerToken
140
+
141
+ P->>G: Tap craft NPC
142
+ G-->>P: FrozenInteractionState
143
+ P->>G: Craft request { recipeIndex }
144
+ Note over G: Verify player has all ingredients
145
+ G->>E: Deduct ingredient quantities from inventory
146
+ G->>E: Grant output items to inventory
147
+ opt Item has on-chain token (ERC-1155)
148
+ G->>BC: burn(ingredientTokenId, qty) per ingredient
149
+ G->>BC: mint(outputTokenId, qty)
150
+ end
151
+ G-->>P: FCT: ItemLoss per ingredient + ItemGain per output
152
+ G-->>P: ThawPlayer
153
+ ```
154
+
155
+ ---
156
+
157
+ ## Spatial Binding and Instance Init
158
+
159
+ `sourceMapCode + sourceCellX + sourceCellY` links an Action to a specific entity cell in a specific map. During instance initialization:
160
+
161
+ 1. `instance_loader.go` reads each `CyberiaEntity` at its `initCellX/initCellY`.
162
+ 2. For entities with matching Action source coordinates, the Go server attaches the Action payload to the runtime entity.
163
+ 3. The entity's `entityStatus` is set to `action-provider` (ESI id=8) — the bouncing chat icon renders above its nameplate.
164
+
165
+ ---
166
+
167
+ ## Dialogue System
168
+
169
+ Dialogue groups allow multi-line sequential NPC speech:
170
+
171
+ ```json
172
+ [
173
+ {
174
+ "code": "wason-intro",
175
+ "order": 0,
176
+ "speaker": "Wason",
177
+ "text": "Young traveler... you've finally arrived.",
178
+ "mood": "neutral"
179
+ },
180
+ {
181
+ "code": "wason-intro",
182
+ "order": 1,
183
+ "speaker": "Wason",
184
+ "text": "The village is in danger. I need your help.",
185
+ "mood": "sad"
186
+ },
187
+ {
188
+ "code": "wason-intro",
189
+ "order": 2,
190
+ "speaker": "Wason",
191
+ "text": "Collect 5 herbs from the forest and return to me.",
192
+ "mood": "neutral"
193
+ }
194
+ ]
195
+ ```
196
+
197
+ The C client fetches the full `code` group sorted by `order`, then renders lines one at a time in `modal_dialogue.c`. The player advances through lines by tapping.
198
+
199
+ ---
200
+
201
+ ## Indexes
202
+
203
+ ```javascript
204
+ // CyberiaAction
205
+ { code: 1 } // unique
206
+ { provideItemId: 1 }
207
+ { grantQuestCode: 1 } // sparse
208
+ { sourceMapCode: 1, sourceCellX: 1, sourceCellY: 1 }
209
+
210
+ // CyberiaDialogue
211
+ { code: 1 }
212
+ { code: 1, order: 1 }
213
+ ```
214
+
215
+ ---
216
+
217
+ ## Example Action Document
218
+
219
+ ```json
220
+ {
221
+ "code": "wason-npc",
222
+ "type": "quest-talk",
223
+ "label": "Talk",
224
+ "sourceMapCode": "cyberia-village",
225
+ "sourceCellX": 12,
226
+ "sourceCellY": 8,
227
+ "provideItemId": "wason",
228
+ "grantQuestCode": "wason-intro",
229
+ "dialogCode": "wason-intro",
230
+ "questDialogueCodes": ["wason-intro"],
231
+ "shopItems": [],
232
+ "craftRecipes": [],
233
+ "storageSlots": 0
234
+ }
235
+ ```