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
package/src/proxy.js CHANGED
@@ -3,14 +3,11 @@
3
3
  // https://nodejs.org/api
4
4
  // https://expressjs.com/en/4x/api.html
5
5
 
6
- import dotenv from 'dotenv';
7
6
  import { loggerFactory } from './server/logger.js';
8
7
  import { buildProxy } from './server/proxy.js';
9
8
  import { ProcessController } from './server/process.js';
10
9
  import { Config } from './server/conf.js';
11
10
 
12
- dotenv.config();
13
-
14
11
  await Config.build(process.argv[2], process.argv[3], process.argv[4]);
15
12
 
16
13
  const logger = loggerFactory(import.meta);
@@ -165,14 +165,7 @@ class ExpressService {
165
165
  });
166
166
  }
167
167
 
168
- // Swagger UI setup
169
- if (fs.existsSync(swaggerJsonPath)) {
170
- const swaggerDoc = JSON.parse(fs.readFileSync(swaggerJsonPath, 'utf8'));
171
- const swaggerUiOptions = await buildSwaggerUiOptions();
172
- app.use(swaggerPath, swaggerUi.serve, swaggerUi.setup(swaggerDoc, swaggerUiOptions));
173
- }
174
-
175
- // Security and CORS
168
+ // Security and CORS — must run before swagger-ui so CSP headers are included in swagger responses
176
169
  if (process.env.NODE_ENV === 'development' && useLocalSsl)
177
170
  origins = origins.map((origin) => origin.replace('http', 'https'));
178
171
 
@@ -180,6 +173,13 @@ class ExpressService {
180
173
  origin: origins,
181
174
  });
182
175
 
176
+ // Swagger UI setup (after security middleware so responses carry correct CSP headers)
177
+ if (fs.existsSync(swaggerJsonPath)) {
178
+ const swaggerDoc = JSON.parse(fs.readFileSync(swaggerJsonPath, 'utf8'));
179
+ const swaggerUiOptions = await buildSwaggerUiOptions();
180
+ app.use(swaggerPath, swaggerUi.serve, swaggerUi.setup(swaggerDoc, swaggerUiOptions));
181
+ }
182
+
183
183
  // Database and Valkey connections
184
184
  if (db && apis) await DataBaseProvider.load({ apis, host, path, db });
185
185
 
@@ -249,7 +249,13 @@ class ExpressService {
249
249
  for (const [_, ssrMiddleware] of Object.entries(ssr)) app.use(ssrMiddleware);
250
250
 
251
251
  // Start listening on the main port
252
- if (useLocalSsl && process.env.NODE_ENV === 'development') {
252
+ // When behind a dev proxy (isDevProxyContext), the proxy handles TLS termination,
253
+ // so backend servers should listen on plain HTTP to be reachable via http://localhost:PORT
254
+ if (
255
+ (useLocalSsl || process.argv.find((arg) => arg === 'tls')) &&
256
+ process.env.NODE_ENV === 'development' &&
257
+ !isDevProxyContext()
258
+ ) {
253
259
  if (!Underpost.tls.validateSecureContext()) shellExec(`node bin/deploy tls`);
254
260
  const { ServerSSL } = await Underpost.tls.createSslServer(app);
255
261
  await Underpost.start.listenPortController(ServerSSL, port, runningData);
@@ -21,11 +21,11 @@ const logger = loggerFactory(import.meta);
21
21
  class LamppService {
22
22
  /**
23
23
  * @method
24
- * @type {string | undefined}
24
+ * @type {string}
25
25
  * @description Stores the accumulated Apache virtual host configuration (router definition).
26
26
  * @memberof LamppService
27
27
  */
28
- router;
28
+ router = '';
29
29
 
30
30
  /**
31
31
  * @public
@@ -42,7 +42,7 @@ class LamppService {
42
42
  * @memberof LamppService
43
43
  */
44
44
  constructor() {
45
- this.router = undefined;
45
+ this.router = '';
46
46
  this.ports = [];
47
47
  }
48
48
 
@@ -125,7 +125,6 @@ class LamppService {
125
125
 
126
126
  // 6. Start the service
127
127
  cmd = `sudo /opt/lampp/lampp start`;
128
- if (this.router) fs.writeFileSync(`./tmp/lampp-router.conf`, this.router, 'utf-8');
129
128
  shellExec(cmd);
130
129
  }
131
130
 
@@ -139,13 +138,7 @@ class LamppService {
139
138
  * @memberof LamppService
140
139
  */
141
140
  appendRouter(render) {
142
- if (!this.router) {
143
- if (fs.existsSync(`./tmp/lampp-router.conf`)) {
144
- this.router = fs.readFileSync(`./tmp/lampp-router.conf`, 'utf-8');
145
- return this.router + render;
146
- }
147
- return (this.router = render);
148
- }
141
+ if (!this.router) return (this.router = render);
149
142
  return (this.router += render);
150
143
  }
151
144
 
@@ -154,10 +147,10 @@ class LamppService {
154
147
  *
155
148
  * @memberof LamppService
156
149
  * @returns {void}
150
+ * @method removeRouter
157
151
  */
158
152
  removeRouter() {
159
- this.router = undefined;
160
- if (fs.existsSync(`./tmp/lampp-router.conf`)) fs.rmSync(`./tmp/lampp-router.conf`);
153
+ this.router = '';
161
154
  }
162
155
 
163
156
  /**
@@ -4,7 +4,6 @@
4
4
  * @namespace Auth
5
5
  */
6
6
 
7
- import dotenv from 'dotenv';
8
7
  import jwt from 'jsonwebtoken';
9
8
  import { loggerFactory } from './logger.js';
10
9
  import crypto from 'crypto';
@@ -19,7 +18,6 @@ import cookieParser from 'cookie-parser';
19
18
  import { DataBaseProvider } from '../db/DataBaseProvider.js';
20
19
  import { isDevProxyContext } from './conf.js';
21
20
 
22
- dotenv.config();
23
21
  const logger = loggerFactory(import.meta);
24
22
 
25
23
  // Promisified crypto functions
@@ -349,12 +347,7 @@ const cookieOptionsFactory = (req, host) => {
349
347
  secure,
350
348
  sameSite,
351
349
  path: '/',
352
- domain:
353
- process.env.NODE_ENV === 'production' ||
354
- isDevProxyContext() ||
355
- (req.headers.host && req.headers.host.toLocaleLowerCase().match(host))
356
- ? host
357
- : 'localhost',
350
+ domain: process.env.NODE_ENV === 'production' || isDevProxyContext() ? host : 'localhost',
358
351
  maxAge,
359
352
  };
360
353
 
@@ -389,7 +382,11 @@ async function createSessionAndUserToken(user, User, req, res, options = { host:
389
382
  };
390
383
 
391
384
  // push session
392
- const updatedUser = await User.findByIdAndUpdate(user._id, { $push: { activeSessions: newSession } }, { new: true });
385
+ const updatedUser = await User.findByIdAndUpdate(
386
+ user._id,
387
+ { $push: { activeSessions: newSession } },
388
+ { returnDocument: 'after' },
389
+ );
393
390
  const session = updatedUser.activeSessions[updatedUser.activeSessions.length - 1];
394
391
  const jwtid = session._id.toString();
395
392
 
@@ -616,13 +613,13 @@ function applySecurity(app, opts = {}) {
616
613
  frameAncestors: frameAncestors,
617
614
  imgSrc: ["'self'", 'data:', httpDirective, 'https:', 'blob:'],
618
615
  objectSrc: ["'none'"],
619
- // script-src and script-src-elem include dynamic nonce
620
- scriptSrc: [
616
+ // script-src and script-src-elem: use 'unsafe-inline' for swagger (no nonce, otherwise
617
+ // the nonce causes 'unsafe-inline' to be ignored per CSP3 spec), nonce for everything else.
618
+ scriptSrc: ["'self'", (req, res) => (res.locals.isSwagger ? "'unsafe-inline'" : `'nonce-${res.locals.nonce}'`)],
619
+ scriptSrcElem: [
621
620
  "'self'",
622
- (req, res) => `'nonce-${res.locals.nonce}'`,
623
- (req, res) => (res.locals.isSwagger ? "'unsafe-inline'" : ''),
621
+ (req, res) => (res.locals.isSwagger ? "'unsafe-inline'" : `'nonce-${res.locals.nonce}'`),
624
622
  ],
625
- scriptSrcElem: ["'self'", (req, res) => `'nonce-${res.locals.nonce}'`],
626
623
  // style-src: avoid 'unsafe-inline' when possible; if you must inline styles,
627
624
  // use a nonce for them too (or hash).
628
625
  styleSrc: [
@@ -630,6 +627,7 @@ function applySecurity(app, opts = {}) {
630
627
  httpDirective,
631
628
  (req, res) => (res.locals.isSwagger ? "'unsafe-inline'" : `'nonce-${res.locals.nonce}'`),
632
629
  ],
630
+ styleSrcAttr: [(req, res) => (res.locals.isSwagger ? "'unsafe-inline'" : "'none'")],
633
631
  // deny plugins
634
632
  objectSrc: ["'none'"],
635
633
  },
@@ -7,10 +7,8 @@
7
7
  import fs from 'fs-extra';
8
8
  import { loggerFactory } from './logger.js';
9
9
  import { shellExec } from './process.js';
10
- import dotenv from 'dotenv';
11
10
  import Underpost from '../index.js';
12
-
13
- dotenv.config();
11
+ import { loadCronDeployEnv } from './conf.js';
14
12
 
15
13
  const logger = loggerFactory(import.meta);
16
14
 
@@ -33,6 +31,7 @@ class BackUp {
33
31
  * @memberof UnderpostBakcUp
34
32
  */
35
33
  static callback = async function (deployList, options = { git: false }) {
34
+ loadCronDeployEnv();
36
35
  if ((!deployList || deployList === 'dd') && fs.existsSync(`./engine-private/deploy/dd.router`))
37
36
  deployList = fs.readFileSync(`./engine-private/deploy/dd.router`, 'utf8').trim();
38
37