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.
Files changed (182) hide show
  1. package/{.env.production → .env.example} +20 -2
  2. package/.github/workflows/engine-cyberia.cd.yml +41 -10
  3. package/.github/workflows/engine-cyberia.ci.yml +53 -14
  4. package/.github/workflows/ghpkg.ci.yml +1 -1
  5. package/.github/workflows/gitlab.ci.yml +1 -1
  6. package/.github/workflows/hardhat.ci.yml +82 -0
  7. package/.github/workflows/npmpkg.ci.yml +37 -8
  8. package/.github/workflows/publish.ci.yml +5 -5
  9. package/.github/workflows/publish.cyberia.ci.yml +5 -5
  10. package/.github/workflows/pwa-microservices-template-page.cd.yml +3 -3
  11. package/.github/workflows/pwa-microservices-template-test.ci.yml +1 -1
  12. package/.github/workflows/release.cd.yml +3 -2
  13. package/.vscode/extensions.json +9 -8
  14. package/.vscode/settings.json +3 -2
  15. package/CHANGELOG.md +533 -290
  16. package/CLI-HELP.md +79 -53
  17. package/WHITE-PAPER.md +1540 -0
  18. package/bin/build.js +16 -11
  19. package/bin/cyberia.js +959 -8
  20. package/bin/deploy.js +103 -270
  21. package/bin/file.js +2 -1
  22. package/bin/index.js +959 -8
  23. package/bin/vs.js +3 -3
  24. package/conf.js +277 -77
  25. package/deployment.yaml +218 -4
  26. package/hardhat/.env.example +31 -0
  27. package/hardhat/README.md +531 -0
  28. package/hardhat/WHITE-PAPER.md +1540 -0
  29. package/hardhat/contracts/ObjectLayerToken.sol +391 -0
  30. package/hardhat/deployments/.gitkeep +0 -0
  31. package/hardhat/deployments/hardhat-ObjectLayerToken.json +11 -0
  32. package/hardhat/hardhat.config.js +136 -0
  33. package/hardhat/ignition/modules/ObjectLayerToken.js +21 -0
  34. package/hardhat/networks/besu-object-layer.network.json +138 -0
  35. package/hardhat/package-lock.json +7628 -0
  36. package/hardhat/package.json +45 -0
  37. package/hardhat/scripts/deployObjectLayerToken.js +98 -0
  38. package/hardhat/test/ObjectLayerToken.js +590 -0
  39. package/jsdoc.dd-cyberia.json +59 -0
  40. package/jsdoc.json +20 -13
  41. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  42. package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +1 -1
  43. package/manifests/deployment/dd-cyberia-development/deployment.yaml +490 -0
  44. package/manifests/deployment/dd-cyberia-development/proxy.yaml +261 -0
  45. package/manifests/deployment/dd-cyberia-development/pv-pvc.yaml +132 -0
  46. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  47. package/manifests/deployment/dd-test-development/deployment.yaml +52 -52
  48. package/manifests/deployment/dd-test-development/proxy.yaml +4 -4
  49. package/manifests/pv-pvc-dd.yaml +1 -1
  50. package/package.json +60 -50
  51. package/proxy.yaml +128 -9
  52. package/pv-pvc.yaml +132 -0
  53. package/scripts/k3s-node-setup.sh +1 -1
  54. package/scripts/ports-ls.sh +2 -0
  55. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +3 -1
  56. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +1 -2
  57. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +40 -7
  58. package/src/api/document/document.service.js +1 -1
  59. package/src/api/file/file.controller.js +3 -1
  60. package/src/api/file/file.service.js +28 -5
  61. package/src/api/ipfs/ipfs.service.js +2 -2
  62. package/src/api/object-layer/object-layer.controller.js +6 -2
  63. package/src/api/object-layer/object-layer.model.js +67 -21
  64. package/src/api/object-layer/object-layer.router.js +668 -42
  65. package/src/api/object-layer/object-layer.service.js +10 -16
  66. package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +1 -2
  67. package/src/api/user/user.router.js +10 -5
  68. package/src/api/user/user.service.js +7 -7
  69. package/src/cli/baremetal.js +6 -10
  70. package/src/cli/cloud-init.js +0 -3
  71. package/src/cli/db.js +54 -71
  72. package/src/cli/deploy.js +64 -12
  73. package/src/cli/env.js +5 -5
  74. package/src/cli/fs.js +0 -2
  75. package/src/cli/image.js +0 -3
  76. package/src/cli/index.js +41 -13
  77. package/src/cli/monitor.js +5 -6
  78. package/src/cli/repository.js +329 -46
  79. package/src/cli/run.js +210 -122
  80. package/src/cli/secrets.js +1 -3
  81. package/src/cli/ssh.js +1 -1
  82. package/src/client/Itemledger.index.js +1 -959
  83. package/src/client/Underpost.index.js +36 -0
  84. package/src/client/components/core/AgGrid.js +20 -5
  85. package/src/client/components/core/Alert.js +2 -2
  86. package/src/client/components/core/Content.js +22 -3
  87. package/src/client/components/core/Docs.js +30 -6
  88. package/src/client/components/core/FileExplorer.js +71 -4
  89. package/src/client/components/core/Input.js +1 -1
  90. package/src/client/components/core/Modal.js +22 -6
  91. package/src/client/components/core/PublicProfile.js +3 -3
  92. package/src/client/components/core/RichText.js +1 -2
  93. package/src/client/components/core/Router.js +34 -1
  94. package/src/client/components/core/Worker.js +1 -1
  95. package/src/client/components/cryptokoyn/CssCryptokoyn.js +63 -1
  96. package/src/client/components/cyberia/ObjectLayerEngineModal.js +145 -119
  97. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +64 -6
  98. package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +1 -0
  99. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +44 -2
  100. package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +0 -1
  101. package/src/client/components/cyberia-portal/MenuCyberiaPortal.js +64 -2
  102. package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +1 -0
  103. package/src/client/components/itemledger/CssItemledger.js +62 -0
  104. package/src/client/components/underpost/CommonUnderpost.js +29 -0
  105. package/src/client/components/underpost/CssUnderpost.js +281 -0
  106. package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +879 -0
  107. package/src/client/components/underpost/DocumentSearchProvider.js +448 -0
  108. package/src/client/components/underpost/ElementsUnderpost.js +38 -0
  109. package/src/client/components/underpost/LabGalleryUnderpost.js +82 -0
  110. package/src/client/components/underpost/LogInUnderpost.js +23 -0
  111. package/src/client/components/underpost/LogOutUnderpost.js +15 -0
  112. package/src/client/components/underpost/MenuUnderpost.js +691 -0
  113. package/src/client/components/underpost/RoutesUnderpost.js +47 -0
  114. package/src/client/components/underpost/SettingsUnderpost.js +16 -0
  115. package/src/client/components/underpost/SignUpUnderpost.js +9 -0
  116. package/src/client/components/underpost/SocketIoUnderpost.js +54 -0
  117. package/src/client/components/underpost/TranslateUnderpost.js +10 -0
  118. package/src/client/public/cryptokoyn/assets/logo/base-icon.png +0 -0
  119. package/src/client/public/cryptokoyn/browserconfig.xml +12 -0
  120. package/src/client/public/cryptokoyn/microdata.json +85 -0
  121. package/src/client/public/cryptokoyn/site.webmanifest +57 -0
  122. package/src/client/public/cryptokoyn/sitemap +3 -3
  123. package/src/client/public/default/sitemap +3 -3
  124. package/src/client/public/itemledger/browserconfig.xml +2 -2
  125. package/src/client/public/itemledger/manifest.webmanifest +4 -4
  126. package/src/client/public/itemledger/microdata.json +71 -0
  127. package/src/client/public/itemledger/sitemap +3 -3
  128. package/src/client/public/itemledger/yandex-browser-manifest.json +2 -2
  129. package/src/client/public/test/sitemap +3 -3
  130. package/src/client/services/object-layer/object-layer.management.js +23 -4
  131. package/src/client/ssr/body/404.js +15 -11
  132. package/src/client/ssr/body/500.js +15 -11
  133. package/src/client/ssr/body/SwaggerDarkMode.js +285 -0
  134. package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +83 -0
  135. package/src/client/ssr/head/PwaItemledger.js +60 -0
  136. package/src/client/ssr/head/UnderpostScripts.js +6 -0
  137. package/src/client/ssr/offline/NoNetworkConnection.js +11 -10
  138. package/src/client/ssr/pages/Test.js +11 -10
  139. package/src/client.build.js +0 -3
  140. package/src/client.dev.js +0 -3
  141. package/src/db/DataBaseProvider.js +17 -2
  142. package/src/db/mariadb/MariaDB.js +14 -9
  143. package/src/db/mongo/MongooseDB.js +17 -1
  144. package/src/index.js +1 -1
  145. package/src/proxy.js +0 -3
  146. package/src/runtime/express/Express.js +15 -9
  147. package/src/runtime/lampp/Lampp.js +6 -13
  148. package/src/server/auth.js +12 -14
  149. package/src/server/backup.js +2 -3
  150. package/src/server/besu-genesis-generator.js +1630 -0
  151. package/src/server/client-build-docs.js +126 -17
  152. package/src/server/client-build-live.js +9 -18
  153. package/src/server/client-build.js +203 -75
  154. package/src/server/client-dev-server.js +14 -13
  155. package/src/server/conf.js +376 -164
  156. package/src/server/cron.js +2 -1
  157. package/src/server/dns.js +28 -12
  158. package/src/server/downloader.js +0 -2
  159. package/src/server/logger.js +27 -9
  160. package/src/server/object-layer.js +92 -16
  161. package/src/server/peer.js +0 -2
  162. package/src/server/process.js +1 -50
  163. package/src/server/proxy.js +4 -8
  164. package/src/server/runtime.js +5 -8
  165. package/src/server/semantic-layer-generator.js +1 -0
  166. package/src/server/ssr.js +0 -3
  167. package/src/server/start.js +19 -12
  168. package/src/server/tls.js +0 -2
  169. package/src/server.js +0 -4
  170. package/.env.development +0 -43
  171. package/.env.test +0 -43
  172. package/hardhat/contracts/CryptoKoyn.sol +0 -59
  173. package/hardhat/contracts/ItemLedger.sol +0 -73
  174. package/hardhat/contracts/Lock.sol +0 -34
  175. package/hardhat/hardhat.config.cjs +0 -45
  176. package/hardhat/ignition/modules/Lock.js +0 -18
  177. package/hardhat/networks/cryptokoyn-itemledger.network.json +0 -29
  178. package/hardhat/scripts/deployCryptokoyn.cjs +0 -25
  179. package/hardhat/scripts/deployItemledger.cjs +0 -25
  180. package/hardhat/test/Lock.js +0 -126
  181. package/hardhat/white-paper.md +0 -581
  182. 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 (!token) false;
392
- const payload = jwtVerify(token, options);
393
- const user = await User.findOne({ _id: payload._id }).lean();
394
- if (!user) return false;
395
- return String(doc.userId) === String(user._id);
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, new: true, setDefaultsOnInsert: 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, { new: true });
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
- res.setHeader('Access-Control-Allow-Origin', '*');
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
- res.setHeader('Access-Control-Allow-Origin', '*');
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 {Data.Stats} data.stats - Statistical attributes of the object layer
53
- * @property {Data.Item} data.item - Item information this layer represents
54
- * @property {string} data.seed - Random UUID for unique state generation
55
- * @property {string} [data.atlasSpriteSheetCid] - IPFS Content Identifier for the consolidated atlas sprite sheet PNG
56
- * @property {string} [cid] - IPFS Content Identifier for the object layer data JSON (fast-json-stable-stringify)
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
- seed: {
70
- type: String,
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 (next) {
163
+ ObjectLayerSchema.pre('save', function () {
118
164
  // Ensure all required fields are present
119
- if (!this.data.stats || !this.data.item || !this.data.seed || !this.sha256) {
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.atlasSpriteSheetCid (atlas PNG) are optional – default to ''
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.atlasSpriteSheetCid': 1,
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.seed': 1,
149
- 'data.atlasSpriteSheetCid': 1,
194
+ 'data.ledger': 1,
195
+ 'data.render': 1,
150
196
  cid: 1,
151
197
  objectLayerRenderFramesId: 1,
152
198
  atlasSpriteSheetId: 1,