cyberia 3.0.2 → 3.1.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/{.env.production → .env.example} +20 -2
- package/.github/workflows/engine-cyberia.cd.yml +41 -10
- package/.github/workflows/engine-cyberia.ci.yml +53 -14
- package/.github/workflows/ghpkg.ci.yml +1 -1
- package/.github/workflows/gitlab.ci.yml +1 -1
- package/.github/workflows/hardhat.ci.yml +82 -0
- package/.github/workflows/npmpkg.ci.yml +37 -8
- package/.github/workflows/publish.ci.yml +5 -5
- package/.github/workflows/publish.cyberia.ci.yml +5 -5
- package/.github/workflows/pwa-microservices-template-page.cd.yml +3 -3
- package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
- package/.github/workflows/release.cd.yml +3 -2
- package/.vscode/extensions.json +9 -8
- package/.vscode/settings.json +3 -2
- package/CHANGELOG.md +533 -290
- package/CLI-HELP.md +79 -53
- package/WHITE-PAPER.md +1540 -0
- package/bin/build.js +16 -11
- package/bin/cyberia.js +959 -8
- package/bin/deploy.js +103 -270
- package/bin/file.js +2 -1
- package/bin/index.js +959 -8
- package/bin/vs.js +3 -3
- package/conf.js +277 -77
- package/deployment.yaml +218 -4
- package/hardhat/.env.example +31 -0
- package/hardhat/README.md +531 -0
- package/hardhat/WHITE-PAPER.md +1540 -0
- package/hardhat/contracts/ObjectLayerToken.sol +391 -0
- package/hardhat/deployments/.gitkeep +0 -0
- package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
- package/hardhat/hardhat.config.js +136 -0
- package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
- package/hardhat/networks/besu-object-layer.network.json +138 -0
- package/hardhat/package-lock.json +7628 -0
- package/hardhat/package.json +45 -0
- package/hardhat/scripts/deployObjectLayerToken.js +98 -0
- package/hardhat/test/ObjectLayerToken.js +590 -0
- package/jsdoc.dd-cyberia.json +59 -0
- package/jsdoc.json +20 -13
- 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-cyberia-development/deployment.yaml +490 -0
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +261 -0
- package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +132 -0
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
- package/manifests/deployment/dd-test-development/deployment.yaml +52 -52
- package/manifests/deployment/dd-test-development/proxy.yaml +4 -4
- package/manifests/pv-pvc-dd.yaml +1 -1
- package/package.json +60 -50
- package/proxy.yaml +128 -9
- package/pv-pvc.yaml +132 -0
- package/scripts/k3s-node-setup.sh +1 -1
- package/scripts/ports-ls.sh +2 -0
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +3 -1
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +1 -2
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +40 -7
- package/src/api/document/document.service.js +1 -1
- package/src/api/file/file.controller.js +3 -1
- package/src/api/file/file.service.js +28 -5
- package/src/api/ipfs/ipfs.service.js +2 -2
- package/src/api/object-layer/object-layer.controller.js +6 -2
- package/src/api/object-layer/object-layer.model.js +67 -21
- package/src/api/object-layer/object-layer.router.js +668 -42
- package/src/api/object-layer/object-layer.service.js +10 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +1 -2
- package/src/api/user/user.router.js +10 -5
- package/src/api/user/user.service.js +7 -7
- package/src/cli/baremetal.js +6 -10
- package/src/cli/cloud-init.js +0 -3
- package/src/cli/db.js +54 -71
- package/src/cli/deploy.js +64 -12
- package/src/cli/env.js +5 -5
- package/src/cli/fs.js +0 -2
- package/src/cli/image.js +0 -3
- package/src/cli/index.js +41 -13
- package/src/cli/monitor.js +5 -6
- package/src/cli/repository.js +329 -46
- package/src/cli/run.js +210 -122
- package/src/cli/secrets.js +1 -3
- package/src/cli/ssh.js +1 -1
- package/src/client/Itemledger.index.js +1 -959
- package/src/client/Underpost.index.js +36 -0
- package/src/client/components/core/AgGrid.js +20 -5
- package/src/client/components/core/Alert.js +2 -2
- package/src/client/components/core/Content.js +22 -3
- package/src/client/components/core/Docs.js +30 -6
- package/src/client/components/core/FileExplorer.js +71 -4
- package/src/client/components/core/Input.js +1 -1
- package/src/client/components/core/Modal.js +22 -6
- package/src/client/components/core/PublicProfile.js +3 -3
- package/src/client/components/core/RichText.js +1 -2
- 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/cyberia-portal/CommonCyberiaPortal.js +1 -0
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +44 -2
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +0 -1
- package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +64 -2
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +1 -0
- 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 +281 -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 +23 -0
- package/src/client/components/underpost/LogOutUnderpost.js +15 -0
- package/src/client/components/underpost/MenuUnderpost.js +691 -0
- package/src/client/components/underpost/RoutesUnderpost.js +47 -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/public/cryptokoyn/assets/logo/base-icon.png +0 -0
- package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
- package/src/client/public/cryptokoyn/microdata.json +85 -0
- package/src/client/public/cryptokoyn/site.webmanifest +57 -0
- package/src/client/public/cryptokoyn/sitemap +3 -3
- package/src/client/public/default/sitemap +3 -3
- package/src/client/public/itemledger/browserconfig.xml +2 -2
- package/src/client/public/itemledger/manifest.webmanifest +4 -4
- package/src/client/public/itemledger/microdata.json +71 -0
- package/src/client/public/itemledger/sitemap +3 -3
- package/src/client/public/itemledger/yandex-browser-manifest.json +2 -2
- package/src/client/public/test/sitemap +3 -3
- package/src/client/services/object-layer/object-layer.management.js +23 -4
- package/src/client/ssr/body/404.js +15 -11
- package/src/client/ssr/body/500.js +15 -11
- package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +83 -0
- package/src/client/ssr/head/PwaItemledger.js +60 -0
- package/src/client/ssr/head/UnderpostScripts.js +6 -0
- package/src/client/ssr/offline/NoNetworkConnection.js +11 -10
- package/src/client/ssr/pages/Test.js +11 -10
- package/src/client.build.js +0 -3
- package/src/client.dev.js +0 -3
- package/src/db/DataBaseProvider.js +17 -2
- package/src/db/mariadb/MariaDB.js +14 -9
- package/src/db/mongo/MongooseDB.js +17 -1
- package/src/index.js +1 -1
- package/src/proxy.js +0 -3
- package/src/runtime/express/Express.js +15 -9
- package/src/runtime/lampp/Lampp.js +6 -13
- package/src/server/auth.js +12 -14
- package/src/server/backup.js +2 -3
- package/src/server/besu-genesis-generator.js +1630 -0
- package/src/server/client-build-docs.js +126 -17
- package/src/server/client-build-live.js +9 -18
- package/src/server/client-build.js +203 -75
- package/src/server/client-dev-server.js +14 -13
- package/src/server/conf.js +376 -164
- package/src/server/cron.js +2 -1
- package/src/server/dns.js +28 -12
- package/src/server/downloader.js +0 -2
- package/src/server/logger.js +27 -9
- package/src/server/object-layer.js +92 -16
- package/src/server/peer.js +0 -2
- package/src/server/process.js +1 -50
- package/src/server/proxy.js +4 -8
- package/src/server/runtime.js +5 -8
- package/src/server/semantic-layer-generator.js +1 -0
- package/src/server/ssr.js +0 -3
- package/src/server/start.js +19 -12
- package/src/server/tls.js +0 -2
- package/src/server.js +0 -4
- package/.env.development +0 -43
- package/.env.test +0 -43
- package/hardhat/contracts/CryptoKoyn.sol +0 -59
- package/hardhat/contracts/ItemLedger.sol +0 -73
- package/hardhat/contracts/Lock.sol +0 -34
- package/hardhat/hardhat.config.cjs +0 -45
- package/hardhat/ignition/modules/Lock.js +0 -18
- package/hardhat/networks/cryptokoyn-itemledger.network.json +0 -29
- package/hardhat/scripts/deployCryptokoyn.cjs +0 -25
- package/hardhat/scripts/deployItemledger.cjs +0 -25
- package/hardhat/test/Lock.js +0 -126
- package/hardhat/white-paper.md +0 -581
- package/white-paper.md +0 -581
|
@@ -387,12 +387,35 @@ const FileService = {
|
|
|
387
387
|
if (doc.isPublic) return true;
|
|
388
388
|
|
|
389
389
|
// Otherwise, user must be authenticated and own the document
|
|
390
|
+
// Try bearer token first
|
|
390
391
|
const token = getBearerToken(req);
|
|
391
|
-
if (
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
392
|
+
if (token) {
|
|
393
|
+
try {
|
|
394
|
+
const payload = jwtVerify(token, options);
|
|
395
|
+
const user = await User.findOne({ _id: payload._id }).lean();
|
|
396
|
+
if (user && String(doc.userId) === String(user._id)) return true;
|
|
397
|
+
} catch (bearerErr) {
|
|
398
|
+
logger.warn('Bearer token verification failed, trying cookie session fallback:', bearerErr.message);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Fallback: check cookie-based session (refreshToken cookie)
|
|
403
|
+
const refreshToken = req.cookies?.refreshToken;
|
|
404
|
+
if (refreshToken) {
|
|
405
|
+
try {
|
|
406
|
+
const user = await User.findOne({ 'activeSessions.tokenHash': refreshToken }).lean();
|
|
407
|
+
if (user) {
|
|
408
|
+
const session = user.activeSessions.find((s) => s.tokenHash === refreshToken);
|
|
409
|
+
if (session && (!session.expiresAt || session.expiresAt >= new Date())) {
|
|
410
|
+
return String(doc.userId) === String(user._id);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
} catch (cookieErr) {
|
|
414
|
+
logger.warn('Cookie session verification failed:', cookieErr.message);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
return false;
|
|
396
419
|
} catch (err) {
|
|
397
420
|
console.log(err);
|
|
398
421
|
logger.error('Authorization check failed:', err);
|
|
@@ -24,7 +24,7 @@ const createPinRecord = async ({ cid, userId, options }) => {
|
|
|
24
24
|
const record = await Ipfs.findOneAndUpdate(
|
|
25
25
|
{ cid, userId },
|
|
26
26
|
{ cid, userId },
|
|
27
|
-
{ upsert: true,
|
|
27
|
+
{ upsert: true, returnDocument: 'after', setDefaultsOnInsert: true },
|
|
28
28
|
);
|
|
29
29
|
|
|
30
30
|
logger.info(`IPFS pin record upserted – CID: ${cid}, userId: ${userId}`);
|
|
@@ -107,7 +107,7 @@ const IpfsService = {
|
|
|
107
107
|
put: async (req, res, options) => {
|
|
108
108
|
/** @type {import('./ipfs.model.js').IpfsModel} */
|
|
109
109
|
const Ipfs = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.Ipfs;
|
|
110
|
-
return await Ipfs.findByIdAndUpdate(req.params.id, req.body, {
|
|
110
|
+
return await Ipfs.findByIdAndUpdate(req.params.id, req.body, { returnDocument: 'after' });
|
|
111
111
|
},
|
|
112
112
|
|
|
113
113
|
delete: async (req, res, options) => {
|
|
@@ -21,7 +21,9 @@ const ObjectLayerController = {
|
|
|
21
21
|
},
|
|
22
22
|
get: async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
|
-
|
|
24
|
+
if (req && req.headers && req.headers.origin) {
|
|
25
|
+
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
26
|
+
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
25
27
|
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
26
28
|
const result = await ObjectLayerService.get(req, res, options);
|
|
27
29
|
return res.status(200).json({
|
|
@@ -39,7 +41,9 @@ const ObjectLayerController = {
|
|
|
39
41
|
generateWebp: async (req, res, options) => {
|
|
40
42
|
try {
|
|
41
43
|
const result = await ObjectLayerService.generateWebp(req, res, options);
|
|
42
|
-
|
|
44
|
+
if (req && req.headers && req.headers.origin) {
|
|
45
|
+
res.set('Access-Control-Allow-Origin', req.headers.origin);
|
|
46
|
+
} else res.setHeader('Access-Control-Allow-Origin', '*');
|
|
43
47
|
res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
|
|
44
48
|
res.setHeader('Content-Type', 'image/webp');
|
|
45
49
|
res.setHeader(
|
|
@@ -46,14 +46,67 @@ const ItemSchema = new Schema(
|
|
|
46
46
|
{ _id: false },
|
|
47
47
|
);
|
|
48
48
|
|
|
49
|
+
/**
|
|
50
|
+
* @typedef {Object} Ledger
|
|
51
|
+
* Blockchain protocol metadata linking the visual object-layer prefab to its economic reality.
|
|
52
|
+
* Uses ERC-1155 as the single multi-token standard for both fungible (CryptoKoyn) and
|
|
53
|
+
* non-fungible / semi-fungible Object Layer items within one contract.
|
|
54
|
+
* @property {string} type - The token standard or off-chain designation (ERC1155, OFF_CHAIN).
|
|
55
|
+
* @property {string} address - The Solidity smart contract address (ObjectLayerToken).
|
|
56
|
+
* @property {string} tokenId - The uint256 ERC-1155 token ID (derived from keccak256 of the item identifier).
|
|
57
|
+
* @memberof CyberiaObjectLayerModel
|
|
58
|
+
*/
|
|
59
|
+
const LedgerSchema = new Schema(
|
|
60
|
+
{
|
|
61
|
+
type: {
|
|
62
|
+
type: String,
|
|
63
|
+
enum: ['ERC1155', 'OFF_CHAIN'],
|
|
64
|
+
required: true,
|
|
65
|
+
},
|
|
66
|
+
address: { type: String }, // ObjectLayerToken ERC-1155 contract address
|
|
67
|
+
tokenId: { type: String, default: '' }, // uint256 ERC-1155 token ID (hex or decimal string)
|
|
68
|
+
},
|
|
69
|
+
{ _id: false },
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @typedef {Object} Render
|
|
74
|
+
* IPFS content identifiers for the consolidated atlas sprite sheet.
|
|
75
|
+
* @property {string} cid - IPFS Content Identifier for the consolidated atlas sprite sheet PNG
|
|
76
|
+
* @property {string} metadataCid - IPFS Content Identifier for the atlas sprite sheet metadata JSON (fast-json-stable-stringify)
|
|
77
|
+
* @memberof CyberiaObjectLayerModel
|
|
78
|
+
*/
|
|
79
|
+
const RenderSchema = new Schema(
|
|
80
|
+
{
|
|
81
|
+
cid: { type: String, default: '', trim: true },
|
|
82
|
+
metadataCid: { type: String, default: '', trim: true },
|
|
83
|
+
},
|
|
84
|
+
{ _id: false },
|
|
85
|
+
);
|
|
86
|
+
|
|
49
87
|
/**
|
|
50
88
|
* @typedef {Object} ObjectLayer
|
|
51
89
|
* @property {Object} data - Object layer data
|
|
52
|
-
* @property {
|
|
53
|
-
* @property {
|
|
54
|
-
* @property {
|
|
55
|
-
* @property {
|
|
56
|
-
* @property {
|
|
90
|
+
* @property {Object} data.stats - Statistical or mechanical attributes for the object layer
|
|
91
|
+
* @property {number} data.stats.effect - The effect attribute value
|
|
92
|
+
* @property {number} data.stats.resistance - The resistance attribute value
|
|
93
|
+
* @property {number} data.stats.agility - The agility attribute value
|
|
94
|
+
* @property {number} data.stats.range - The range attribute value
|
|
95
|
+
* @property {number} data.stats.intelligence - The intelligence attribute value
|
|
96
|
+
* @property {number} data.stats.utility - The utility attribute value
|
|
97
|
+
* @property {Object} data.item - Human-readable item information for the object layer
|
|
98
|
+
* @property {string} data.item.id - Unique identifier for the item
|
|
99
|
+
* @property {string} data.item.type - Type of the item
|
|
100
|
+
* @property {string} data.item.description - Description of the item
|
|
101
|
+
* @property {boolean} data.item.activable - Whether the item can be activated
|
|
102
|
+
* @property {Object} data.ledger - Blockchain protocol metadata linking the visual object-layer prefab to its economic reality
|
|
103
|
+
* @property {string} data.ledger.type - The token standard or off-chain designation (ERC1155, OFF_CHAIN).
|
|
104
|
+
* @property {string} data.ledger.address - The ObjectLayerToken ERC-1155 smart contract address.
|
|
105
|
+
* @property {string} data.ledger.tokenId - The uint256 ERC-1155 token ID (hex or decimal string).
|
|
106
|
+
* @property {Object} data.render - IPFS content identifiers for the consolidated atlas sprite sheet
|
|
107
|
+
* @property {string} data.render.cid - IPFS Content Identifier for the consolidated atlas sprite sheet PNG
|
|
108
|
+
* @property {string} data.render.metadataCid - IPFS Content Identifier for the atlas sprite sheet metadata JSON (fast-json-stable-stringify)
|
|
109
|
+
* @property {string} cid - IPFS Content Identifier for the object layer data JSON (fast-json-stable-stringify)
|
|
57
110
|
* @property {Types.ObjectId} objectLayerRenderFramesId - Reference to ObjectLayerRenderFrames document
|
|
58
111
|
* @property {Types.ObjectId} atlasSpriteSheetId - Reference to AtlasSpriteSheet document
|
|
59
112
|
* @property {string} sha256 - SHA-256 hash of the object layer data
|
|
@@ -66,15 +119,8 @@ const ObjectLayerSchema = new Schema(
|
|
|
66
119
|
data: {
|
|
67
120
|
stats: { type: StatsSchema, required: true },
|
|
68
121
|
item: { type: ItemSchema, required: true },
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
required: true,
|
|
72
|
-
match: [
|
|
73
|
-
/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,
|
|
74
|
-
'Please provide a valid UUID v4',
|
|
75
|
-
],
|
|
76
|
-
},
|
|
77
|
-
atlasSpriteSheetCid: { type: String, default: '', trim: true },
|
|
122
|
+
ledger: { type: LedgerSchema, required: true },
|
|
123
|
+
render: { type: RenderSchema, default: () => ({}) },
|
|
78
124
|
},
|
|
79
125
|
cid: { type: String, default: '', trim: true },
|
|
80
126
|
objectLayerRenderFramesId: { type: Schema.Types.ObjectId, ref: 'ObjectLayerRenderFrames' },
|
|
@@ -114,13 +160,12 @@ ObjectLayerSchema.index(
|
|
|
114
160
|
);
|
|
115
161
|
|
|
116
162
|
// Pre-save hook to ensure data consistency
|
|
117
|
-
ObjectLayerSchema.pre('save', function (
|
|
163
|
+
ObjectLayerSchema.pre('save', function () {
|
|
118
164
|
// Ensure all required fields are present
|
|
119
|
-
if (!this.data.stats || !this.data.item || !this.
|
|
165
|
+
if (!this.data.stats || !this.data.item || !this.sha256) {
|
|
120
166
|
throw new Error('Missing required fields');
|
|
121
167
|
}
|
|
122
|
-
// cid (object layer data JSON) and data.
|
|
123
|
-
next();
|
|
168
|
+
// cid (object layer data JSON) and data.render.cid (atlas PNG) are optional – default to ''
|
|
124
169
|
});
|
|
125
170
|
|
|
126
171
|
// Create and export the model
|
|
@@ -134,7 +179,8 @@ const ObjectLayerDto = {
|
|
|
134
179
|
return {
|
|
135
180
|
_id: 1,
|
|
136
181
|
'data.item': 1,
|
|
137
|
-
'data.
|
|
182
|
+
'data.ledger': 1,
|
|
183
|
+
'data.render': 1,
|
|
138
184
|
cid: 1,
|
|
139
185
|
objectLayerRenderFramesId: 1,
|
|
140
186
|
atlasSpriteSheetId: 1,
|
|
@@ -145,8 +191,8 @@ const ObjectLayerDto = {
|
|
|
145
191
|
_id: 1,
|
|
146
192
|
'data.item': 1,
|
|
147
193
|
'data.stats': 1,
|
|
148
|
-
'data.
|
|
149
|
-
'data.
|
|
194
|
+
'data.ledger': 1,
|
|
195
|
+
'data.render': 1,
|
|
150
196
|
cid: 1,
|
|
151
197
|
objectLayerRenderFramesId: 1,
|
|
152
198
|
atlasSpriteSheetId: 1,
|