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.
- package/CHANGELOG.md +323 -290
- package/CLI-HELP.md +2 -1
- package/bin/build.js +0 -1
- package/bin/cyberia.js +98 -4
- package/bin/index.js +98 -4
- package/conf.js +192 -0
- package/deployment.yaml +72 -2
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +2 -2
- package/package.json +13 -9
- package/proxy.yaml +56 -9
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +40 -7
- package/src/api/object-layer/object-layer.model.js +61 -19
- package/src/api/object-layer/object-layer.service.js +4 -9
- package/src/cli/index.js +6 -0
- package/src/cli/run.js +30 -2
- package/src/client/Underpost.index.js +36 -0
- package/src/client/components/core/Modal.js +2 -0
- package/src/client/components/core/PublicProfile.js +3 -3
- package/src/client/components/core/Router.js +34 -1
- package/src/client/components/core/Worker.js +1 -1
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +63 -1
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +145 -119
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +64 -6
- package/src/client/components/itemledger/CssItemledger.js +62 -0
- package/src/client/components/underpost/CommonUnderpost.js +29 -0
- package/src/client/components/underpost/CssUnderpost.js +222 -0
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
- package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
- package/src/client/components/underpost/ElementsUnderpost.js +38 -0
- package/src/client/components/underpost/LabGalleryUnderpost.js +82 -0
- package/src/client/components/underpost/LogInUnderpost.js +20 -0
- package/src/client/components/underpost/LogOutUnderpost.js +13 -0
- package/src/client/components/underpost/MenuUnderpost.js +605 -0
- package/src/client/components/underpost/RoutesUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +16 -0
- package/src/client/components/underpost/SignUpUnderpost.js +9 -0
- package/src/client/components/underpost/SocketIoUnderpost.js +54 -0
- package/src/client/components/underpost/TranslateUnderpost.js +10 -0
- package/src/client/services/object-layer/object-layer.management.js +23 -4
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +83 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/index.js +1 -1
- package/src/server/object-layer.js +13 -10
- 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?.
|
|
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.
|
|
299
|
-
headerName: '
|
|
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: '
|
|
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
|
@@ -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 {
|
|
51
|
-
* @property {string} [data.
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
};
|