cyberia 3.0.2 → 3.0.3

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 (47) hide show
  1. package/CHANGELOG.md +323 -290
  2. package/CLI-HELP.md +2 -1
  3. package/bin/build.js +0 -1
  4. package/bin/cyberia.js +98 -4
  5. package/bin/index.js +98 -4
  6. package/conf.js +192 -0
  7. package/deployment.yaml +72 -2
  8. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  9. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  10. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  11. package/manifests/deployment/dd-test-development/deployment.yaml +2 -2
  12. package/package.json +13 -9
  13. package/proxy.yaml +56 -9
  14. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +40 -7
  15. package/src/api/object-layer/object-layer.model.js +61 -19
  16. package/src/api/object-layer/object-layer.service.js +4 -9
  17. package/src/cli/index.js +6 -0
  18. package/src/cli/run.js +30 -2
  19. package/src/client/Underpost.index.js +36 -0
  20. package/src/client/components/core/Modal.js +2 -0
  21. package/src/client/components/core/PublicProfile.js +3 -3
  22. package/src/client/components/core/Router.js +34 -1
  23. package/src/client/components/core/Worker.js +1 -1
  24. package/src/client/components/cryptokoyn/CssCryptokoyn.js +63 -1
  25. package/src/client/components/cyberia/ObjectLayerEngineModal.js +145 -119
  26. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +64 -6
  27. package/src/client/components/itemledger/CssItemledger.js +62 -0
  28. package/src/client/components/underpost/CommonUnderpost.js +29 -0
  29. package/src/client/components/underpost/CssUnderpost.js +222 -0
  30. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
  31. package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
  32. package/src/client/components/underpost/ElementsUnderpost.js +38 -0
  33. package/src/client/components/underpost/LabGalleryUnderpost.js +82 -0
  34. package/src/client/components/underpost/LogInUnderpost.js +20 -0
  35. package/src/client/components/underpost/LogOutUnderpost.js +13 -0
  36. package/src/client/components/underpost/MenuUnderpost.js +605 -0
  37. package/src/client/components/underpost/RoutesUnderpost.js +45 -0
  38. package/src/client/components/underpost/SettingsUnderpost.js +16 -0
  39. package/src/client/components/underpost/SignUpUnderpost.js +9 -0
  40. package/src/client/components/underpost/SocketIoUnderpost.js +54 -0
  41. package/src/client/components/underpost/TranslateUnderpost.js +10 -0
  42. package/src/client/services/object-layer/object-layer.management.js +23 -4
  43. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +83 -0
  44. package/src/client/ssr/head/UnderpostScripts.js +6 -0
  45. package/src/index.js +1 -1
  46. package/src/server/object-layer.js +13 -10
  47. package/src/server/semantic-layer-generator.js +1 -0
@@ -0,0 +1,54 @@
1
+ import { Account } from '../core/Account.js';
2
+ import { Chat } from '../core/Chat.js';
3
+ import { s4 } from '../core/CommonJs.js';
4
+ import { loggerFactory } from '../core/Logger.js';
5
+ import { SocketIo } from '../core/SocketIo.js';
6
+ import { s } from '../core/VanillaJs.js';
7
+ import { ElementsUnderpost } from './ElementsUnderpost.js';
8
+
9
+ const logger = loggerFactory(import.meta);
10
+
11
+ const SocketIoUnderpost = {
12
+ Init: function () {
13
+ return new Promise((resolve) => {
14
+ for (const type of Object.keys(ElementsUnderpost.Data)) {
15
+ SocketIo.Event[type][s4()] = async (args) => {
16
+ args = JSON.parse(args[0]);
17
+ switch (type) {
18
+ case 'chat':
19
+ {
20
+ const idModal = 'modal-chat';
21
+ if (s(`.${idModal}-chat-box`)) Chat.appendChatBox({ idModal, ...args });
22
+ }
23
+ break;
24
+
25
+ default:
26
+ break;
27
+ }
28
+ const { status } = args;
29
+
30
+ switch (status) {
31
+ case 'email-confirmed': {
32
+ const newUser = { ...ElementsUnderpost.Data.user.main.model.user, emailConfirmed: true };
33
+ Account.renderVerifyEmailStatus(newUser);
34
+ Account.triggerUpdateEvent({ user: newUser });
35
+ break;
36
+ }
37
+
38
+ default:
39
+ break;
40
+ }
41
+ };
42
+ }
43
+ SocketIo.Event.connect[s4()] = async (reason) => {
44
+ // ElementsUnderpost.Init({ type, id, element });
45
+ };
46
+ SocketIo.Event.disconnect[s4()] = async (reason) => {
47
+ // ElementsUnderpost.removeAll();
48
+ };
49
+ return resolve();
50
+ });
51
+ },
52
+ };
53
+
54
+ export { SocketIoUnderpost };
@@ -0,0 +1,10 @@
1
+ import { Translate } from '../core/Translate.js';
2
+
3
+ const TranslateUnderpost = {
4
+ Init: async function () {
5
+ Translate.Data['contracultura-cyberpunk'] = { en: 'Contracultura Cyberpunk', es: 'Contracultura Cyberpunk' };
6
+ Translate.Data['lab-gallery'] = { en: 'Lab Gallery', es: 'Lab Gallery' };
7
+ },
8
+ };
9
+
10
+ export { TranslateUnderpost };
@@ -268,7 +268,9 @@ const ObjectLayerManagement = {
268
268
  // IPFS CID of object layer data JSON (fast-json-stable-stringify)
269
269
  const CidRenderer = createCidRenderer((d) => d?.cid);
270
270
  // IPFS CID of the consolidated atlas sprite sheet PNG
271
- const AtlasCidRenderer = createCidRenderer((d) => d?.data?.atlasSpriteSheetCid || d?.atlasSpriteSheetId?.cid);
271
+ const AtlasCidRenderer = createCidRenderer((d) => d?.data?.render?.cid || d?.atlasSpriteSheetId?.cid);
272
+ // IPFS CID of the atlas sprite sheet metadata JSON (fast-json-stable-stringify)
273
+ const MetadataCidRenderer = createCidRenderer((d) => d?.data?.render?.metadataCid);
272
274
 
273
275
  let columnDefs = [
274
276
  // {
@@ -285,6 +287,14 @@ const ObjectLayerManagement = {
285
287
  },
286
288
  { field: 'data.item.type', headerName: 'Item Type', editable: role === 'user' },
287
289
  { field: 'data.item.description', headerName: 'Description', flex: 1, editable: role === 'user' },
290
+ {
291
+ field: 'data.ledger.type',
292
+ headerName: 'Ledger Type',
293
+ width: 160,
294
+ editable: false,
295
+ sortable: false,
296
+ filter: false,
297
+ },
288
298
  {
289
299
  field: 'cid',
290
300
  headerName: 'IPFS CID',
@@ -295,17 +305,26 @@ const ObjectLayerManagement = {
295
305
  filter: false,
296
306
  },
297
307
  {
298
- field: 'data.atlasSpriteSheetCid',
299
- headerName: 'Atlas CID',
308
+ field: 'data.render.cid',
309
+ headerName: 'Render CID',
300
310
  width: 160,
301
311
  cellRenderer: AtlasCidRenderer,
302
312
  editable: false,
303
313
  sortable: false,
304
314
  filter: false,
305
315
  },
316
+ {
317
+ field: 'data.render.metadataCid',
318
+ headerName: 'Render Metadata CID',
319
+ width: 160,
320
+ cellRenderer: MetadataCidRenderer,
321
+ editable: false,
322
+ sortable: false,
323
+ filter: false,
324
+ },
306
325
  {
307
326
  field: 'frame08',
308
- headerName: 'Frame 08 Preview',
327
+ headerName: 'First IDLE frame preview',
309
328
  width: 120,
310
329
  cellRenderer: Frame08Renderer,
311
330
  editable: false,
@@ -0,0 +1,83 @@
1
+ SrrComponent = ({ backgroundImage }) => html`
2
+ ${backgroundImage
3
+ ? html`<style>
4
+ .ssr-background-image {
5
+ background-image: url('${backgroundImage}');
6
+ }
7
+ </style>`
8
+ : ''}
9
+ <style>
10
+ .ssr-top-bar {
11
+ background: #121212;
12
+ height: 100px;
13
+ }
14
+ .ssr-btn {
15
+ height: 40px;
16
+ width: 40px;
17
+ }
18
+ .ssr-btn-0 {
19
+ top: 55px;
20
+ right: 5px;
21
+ }
22
+ .ssr-btn-1 {
23
+ top: 55px;
24
+ right: 55px;
25
+ }
26
+ .ssr-btn-2 {
27
+ top: 55px;
28
+ right: 105px;
29
+ }
30
+ .ssr-btn-3 {
31
+ top: 55px;
32
+ left: 5px;
33
+ }
34
+ .ssr-btn-4 {
35
+ top: 5px;
36
+ left: 5px;
37
+ }
38
+ .ssr-btn-5 {
39
+ top: 5px;
40
+ right: 5px;
41
+ border-radius: 50%;
42
+ }
43
+ .ssr-loader {
44
+ width: auto;
45
+ }
46
+
47
+ .loader {
48
+ height: 6px;
49
+ width: 130px;
50
+ --c: no-repeat linear-gradient(#353535 0 0);
51
+ background: var(--c), var(--c), #e1e1e1;
52
+ background-size: 60% 100%;
53
+ animation: l16 3s infinite;
54
+ }
55
+ @keyframes l16 {
56
+ 0% {
57
+ background-position: -150% 0, -150% 0;
58
+ }
59
+ 66% {
60
+ background-position: 250% 0, -150% 0;
61
+ }
62
+ 100% {
63
+ background-position: 250% 0, 250% 0;
64
+ }
65
+ }
66
+ </style>
67
+ <div class="ssr-background-image"></div>
68
+ <div class="ssr-abs ssr-background" style="opacity: 1">
69
+ <div class="ssr-in ssr-top-bar">
70
+ ${new Array(6)
71
+ .fill()
72
+ .map(
73
+ (v, i) => html`<div class="ssr-abs ssr-btn ssr-btn-${i}">
74
+ <div class="ssr-shimmer-dark"></div>
75
+ </div>`,
76
+ )
77
+ .join('')}
78
+
79
+ <div class="ssr-abs ssr-search-box"><div class="ssr-shimmer-dark-search-box"></div></div>
80
+ </div>
81
+ <div class="ssr-abs ssr-center ssr-loader"><div class="loader"></div></div>
82
+ </div>
83
+ `;
@@ -0,0 +1,6 @@
1
+ SrrComponent = ({ ssrPath }) => html`
2
+ <script type="text/javascript" src="${ssrPath}dist/validator/validator.min.js"></script>
3
+ <script type="text/javascript" src="${ssrPath}dist/ag-grid-community/ag-grid-community.min.js"></script>
4
+ <script type="text/javascript" src="${ssrPath}dist/easymde/easymde.min.js"></script>
5
+ <link rel="stylesheet" href="${ssrPath}dist/easymde/easymde.min.css" />
6
+ `;
package/src/index.js CHANGED
@@ -42,7 +42,7 @@ class Underpost {
42
42
  * @type {String}
43
43
  * @memberof Underpost
44
44
  */
45
- static version = 'v3.0.2';
45
+ static version = 'v3.0.3';
46
46
 
47
47
  /**
48
48
  * Required Node.js major version
@@ -47,8 +47,9 @@ const logger = loggerFactory(import.meta);
47
47
  * @property {string} [data.item.description] - Human-readable description.
48
48
  * @property {boolean} [data.item.activable] - Whether the item can be activated.
49
49
  * @property {Object} data.stats - Statistical attributes of the object layer.
50
- * @property {string} data.seed - Random UUID v4 for unique state generation.
51
- * @property {string} [data.atlasSpriteSheetCid] - IPFS CID for the consolidated atlas sprite sheet PNG.
50
+ * @property {Object} [data.render] - IPFS content identifiers for the consolidated atlas sprite sheet.
51
+ * @property {string} [data.render.cid] - IPFS CID for the consolidated atlas sprite sheet PNG.
52
+ * @property {string} [data.render.metadataCid] - IPFS CID for the atlas sprite sheet metadata JSON (fast-json-stable-stringify).
52
53
  * @property {ObjectLayerRenderFramesData} [objectLayerRenderFramesData] - Render frames data (transient, used before persisting).
53
54
  * @property {import('mongoose').Types.ObjectId} [objectLayerRenderFramesId] - Reference to persisted ObjectLayerRenderFrames document.
54
55
  * @property {string} [sha256] - SHA-256 hash of the object layer data.
@@ -445,7 +446,7 @@ export class ObjectLayerEngine {
445
446
  activable: true,
446
447
  },
447
448
  stats: metadata.data.stats || ObjectLayerEngine.generateRandomStats(),
448
- seed: metadata.data.seed || crypto.randomUUID(),
449
+ ledger: metadata.data.ledger || { type: 'OFF_CHAIN' },
449
450
  },
450
451
  };
451
452
  } else {
@@ -458,7 +459,7 @@ export class ObjectLayerEngine {
458
459
  activable: true,
459
460
  },
460
461
  stats: ObjectLayerEngine.generateRandomStats(),
461
- seed: crypto.randomUUID(),
462
+ ledger: { type: 'OFF_CHAIN' },
462
463
  },
463
464
  };
464
465
  }
@@ -501,7 +502,7 @@ export class ObjectLayerEngine {
501
502
  /**
502
503
  * Computes a SHA-256 hash of the given object layer data using deterministic JSON serialisation.
503
504
  * @static
504
- * @param {Object} data - The `data` sub-document of an ObjectLayer (item, stats, seed, atlasSpriteSheetCid, …).
505
+ * @param {Object} data - The `data` sub-document of an ObjectLayer (item, stats, render).
505
506
  * @returns {string} Hex-encoded SHA-256 hash.
506
507
  * @memberof CyberiaObjectLayer
507
508
  */
@@ -642,7 +643,7 @@ export class ObjectLayerEngine {
642
643
  *
643
644
  * When `generateAtlas` is `true` (the default) the method delegates to
644
645
  * `AtlasSpriteSheetService.generate` and then recomputes the definitive SHA-256
645
- * (which now includes `data.atlasSpriteSheetCid`) and persists an IPFS CID.
646
+ * (which now includes `data.render.cid`) and persists an IPFS CID.
646
647
  *
647
648
  * @static
648
649
  * @param {Object} params - Parameters.
@@ -668,7 +669,8 @@ export class ObjectLayerEngine {
668
669
 
669
670
  // 2. Attach reference + compute temporary SHA-256
670
671
  objectLayerData.objectLayerRenderFramesId = objectLayerRenderFramesDoc._id;
671
- objectLayerData.data.atlasSpriteSheetCid = objectLayerData.data.atlasSpriteSheetCid || '';
672
+ if (!objectLayerData.data.render) objectLayerData.data.render = {};
673
+ objectLayerData.data.render.cid = objectLayerData.data.render.cid || '';
672
674
  objectLayerData.sha256 = ObjectLayerEngine.computeSha256(objectLayerData.data);
673
675
 
674
676
  // 3. Upsert ObjectLayer (handle duplicate sha256 gracefully)
@@ -738,7 +740,8 @@ export class ObjectLayerEngine {
738
740
  }
739
741
 
740
742
  // 2. Compute temporary SHA-256
741
- objectLayerData.data.atlasSpriteSheetCid = objectLayerData.data.atlasSpriteSheetCid || '';
743
+ if (!objectLayerData.data.render) objectLayerData.data.render = {};
744
+ objectLayerData.data.render.cid = objectLayerData.data.render.cid || '';
742
745
  objectLayerData.sha256 = ObjectLayerEngine.computeSha256(objectLayerData.data);
743
746
 
744
747
  // 3. Persist ObjectLayer update
@@ -773,7 +776,7 @@ export class ObjectLayerEngine {
773
776
  * Recomputes the definitive SHA-256, pins the object layer data JSON to IPFS,
774
777
  * and persists both fields on the ObjectLayer document.
775
778
  *
776
- * Intended for use after atlas generation has set `data.atlasSpriteSheetCid`.
779
+ * Intended for use after atlas generation has set `data.render.cid`.
777
780
  *
778
781
  * @static
779
782
  * @param {Object} params - Parameters.
@@ -840,7 +843,7 @@ export class ObjectLayerEngine {
840
843
  logger.error(`Failed to auto-${isNew ? 'generate' : 'update'} atlas for ObjectLayer:`, atlasError);
841
844
  }
842
845
 
843
- // Re-read the objectLayer so data.atlasSpriteSheetCid is up-to-date
846
+ // Re-read the objectLayer so data.render.cid is up-to-date
844
847
  objectLayer = await ObjectLayer.findById(objectLayer._id).populate('objectLayerRenderFramesId');
845
848
 
846
849
  // Compute definitive SHA-256 and IPFS CID
@@ -1052,6 +1052,7 @@ export function generateMultiFrame(options) {
1052
1052
  intelligence: hashMod(seed + ':intelligence', 11),
1053
1053
  utility: hashMod(seed + ':utility', 11),
1054
1054
  },
1055
+ ledger: { type: 'OFF_CHAIN' },
1055
1056
  seed: seedToUUIDv4(seed + ':' + itemId),
1056
1057
  },
1057
1058
  };