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/package.json CHANGED
@@ -2,25 +2,30 @@
2
2
  "type": "module",
3
3
  "main": "src/index.js",
4
4
  "name": "cyberia",
5
- "version": "3.0.2",
5
+ "version": "3.1.3",
6
6
  "description": "Cyberia Engine - Object Layer and Assets Management Microservice",
7
7
  "scripts": {
8
- "start": "env-cmd -f .env.production node --max-old-space-size=8192 src/server",
9
- "build": "node bin/deploy build-full-client",
10
- "test": "env-cmd -f .env.test c8 mocha",
11
- "dev": "env-cmd -f .env.development nodemon src/server",
12
- "dev-img": "env-cmd -f .env.development node src/server",
13
- "prod-img": "env-cmd -f .env.production node src/server",
14
- "dev-api": "env-cmd -f .env.development nodemon --watch src --ignore src/client src/api",
15
- "dev-client": "env-cmd -f .env.development node src/client.dev",
16
- "dev-proxy": "env-cmd -f .env.development node src/proxy proxy",
8
+ "start": "node --max-old-space-size=8192 src/server dd-core",
9
+ "build": "node bin client",
10
+ "test": "NODE_ENV=test c8 mocha",
11
+ "dev": "NODE_ENV=development nodemon src/server",
12
+ "dev:container": "NODE_ENV=development node src/server",
13
+ "prod:container": "NODE_ENV=production node src/server",
14
+ "dev:api": "NODE_ENV=development nodemon --watch src --ignore src/client src/api",
15
+ "dev:client": "NODE_ENV=development node src/client.dev",
16
+ "dev:proxy": "NODE_ENV=development node src/proxy proxy",
17
17
  "docs": "jsdoc -c jsdoc.json",
18
- "install-global": "npm install -g jsdoc && npm install -g prettier && npm install -g env-cmd",
19
- "install-test": "npm install -g mocha && npm install -g c8 && npm install -g coveralls",
20
- "install": "npm run install-global && npm run install-test",
18
+ "install:global": "npm install -g jsdoc && npm install -g prettier",
19
+ "install:test": "npm install -g mocha && npm install -g c8 && npm install -g coveralls",
20
+ "install": "npm run install:global && npm run install:test",
21
21
  "prettier": "prettier --write .",
22
22
  "fix": "npm audit fix --force && npm audit",
23
- "baremetal": "node bin baremetal --dev --commission --ls --create-machine"
23
+ "baremetal": "node bin baremetal --dev --commission --ls --create-machine",
24
+ "security:secrets": "gitleaks detect --source . --config .gitleaks.toml --report-path ./gitleaks-report.json --report-format json --redact=0",
25
+ "security:secrets:ci": "gitleaks detect --source . --config .gitleaks.toml --redact=1",
26
+ "security:deps": "npm audit",
27
+ "security": "npm run security:secrets:ci && npm run security:deps",
28
+ "clean": "node bin env clean && node bin run clean"
24
29
  },
25
30
  "bin": {
26
31
  "cyberia": "bin/index.js"
@@ -44,67 +49,68 @@
44
49
  },
45
50
  "homepage": "https://github.com/underpostnet/engine-cyberia#readme",
46
51
  "dependencies": {
47
- "@fortawesome/fontawesome-free": "^6.4.2",
48
- "@fullcalendar/rrule": "^6.1.15",
49
- "@neodrag/vanilla": "^2.0.3",
52
+ "@fortawesome/fontawesome-free": "^7.2.0",
53
+ "@fullcalendar/rrule": "^6.1.20",
54
+ "@neodrag/vanilla": "^2.3.1",
50
55
  "adm-zip": "^0.5.10",
51
- "ag-grid-community": "^31.3.4",
52
- "axios": "^1.5.1",
53
- "chai": "^5.1.0",
56
+ "ag-grid-community": "^35.1.0",
57
+ "axios": "^1.13.6",
58
+ "chai": "^6.2.2",
54
59
  "clean-jsdoc-theme": "^4.3.0",
55
- "clipboardy": "^4.0.0",
60
+ "clipboardy": "^5.3.1",
56
61
  "cloudinary": "^2.5.1",
57
62
  "colors": "^1.4.0",
58
- "commander": "^12.1.0",
63
+ "commander": "^14.0.3",
59
64
  "compression": "^1.7.4",
60
65
  "cookie-parser": "^1.4.7",
61
- "cors": "^2.8.5",
66
+ "cors": "^2.8.6",
62
67
  "d3": "^7.9.0",
63
- "dotenv": "^16.3.1",
68
+ "dotenv": "^17.3.1",
64
69
  "easymde": "^2.18.0",
65
- "env-cmd": "^10.1.0",
66
- "express": "^4.18.2",
70
+ "escape-string-regexp": "^5.0.0",
71
+ "express": "^5.2.1",
67
72
  "express-fileupload": "^1.4.3",
68
- "express-rate-limit": "^8.1.0",
69
- "express-slow-down": "^3.0.0",
73
+ "express-rate-limit": "^8.3.1",
74
+ "express-slow-down": "^3.1.0",
70
75
  "fast-json-stable-stringify": "^2.1.0",
71
76
  "favicons": "^7.2.0",
72
- "fs-extra": "^11.1.1",
77
+ "fs-extra": "^11.3.4",
73
78
  "fullcalendar": "^6.1.15",
74
79
  "helmet": "^8.1.0",
75
80
  "html-minifier-terser": "^7.2.0",
76
- "http-proxy-middleware": "^2.0.6",
81
+ "http-proxy-middleware": "^3.0.5",
77
82
  "ignore-walk": "^8.0.0",
78
- "iovalkey": "^0.2.1",
79
- "jimp": "^1.6.0",
80
- "json-colorizer": "^2.2.2",
81
- "jsonwebtoken": "^9.0.2",
83
+ "iovalkey": "^0.3.3",
84
+ "json-colorizer": "^3.0.1",
85
+ "jsonwebtoken": "^9.0.3",
82
86
  "mariadb": "^3.2.2",
83
- "marked": "^12.0.2",
84
- "maxrects-packer": "^2.7.3",
85
- "mocha": "^7.2.0",
86
- "mongoose": "^8.9.5",
87
+ "marked": "^17.0.4",
88
+ "mocha": "^11.3.0",
89
+ "mongoose": "^9.3.0",
87
90
  "morgan": "^1.10.0",
88
- "nodemailer": "^7.0.9",
91
+ "nodemailer": "^8.0.2",
89
92
  "nodemon": "^3.0.1",
90
93
  "peer": "^1.0.2",
91
- "peerjs": "^1.5.2",
92
- "pngjs": "^7.0.0",
94
+ "peerjs": "^1.5.5",
93
95
  "prom-client": "^15.1.2",
94
- "read": "^2.1.0",
96
+ "read": "^5.0.1",
95
97
  "rrule": "^2.8.1",
96
- "sharp": "^0.32.5",
97
98
  "shelljs": "^0.10.0",
98
- "sitemap": "^7.1.1",
99
- "socket.io": "^4.8.0",
99
+ "sitemap": "^9.0.1",
100
+ "socket.io": "^4.8.3",
100
101
  "sortablejs": "^1.15.0",
101
102
  "split-file": "^2.3.0",
102
- "swagger-autogen": "^2.9.2",
103
+ "swagger-autogen": "^2.23.7",
103
104
  "swagger-ui-express": "^5.0.0",
104
105
  "uglify-js": "^3.17.4",
105
106
  "validator": "^13.11.0",
106
- "vanilla-jsoneditor": "^2.3.2",
107
- "winston": "^3.11.0"
107
+ "vanilla-jsoneditor": "^3.11.0",
108
+ "winston": "^3.19.0",
109
+ "maxrects-packer": "^2.7.3",
110
+ "pngjs": "^7.0.0",
111
+ "jimp": "^1.6.0",
112
+ "sharp": "^0.32.5",
113
+ "ethers": "~6.16.0"
108
114
  },
109
115
  "publishConfig": {
110
116
  "provenance": true,
@@ -113,6 +119,10 @@
113
119
  },
114
120
  "overrides": {
115
121
  "minimatch": "^10.2.2",
116
- "glob": "^11.0.0"
122
+ "glob": "^11.0.0",
123
+ "diff": ">=8.0.3",
124
+ "js-yaml": ">=3.14.2",
125
+ "debug": ">=4.3.6",
126
+ "serialize-javascript": ">=7.0.3"
117
127
  }
118
- }
128
+ }
package/proxy.yaml CHANGED
@@ -3,11 +3,11 @@
3
3
  apiVersion: projectcontour.io/v1
4
4
  kind: HTTPProxy
5
5
  metadata:
6
- name: www.cyberiaonline.com
6
+ name: underpost.net
7
7
  namespace: default
8
8
  spec:
9
9
  virtualhost:
10
- fqdn: www.cyberiaonline.com
10
+ fqdn: underpost.net
11
11
  routes:
12
12
  - conditions:
13
13
  - prefix: /
@@ -27,6 +27,125 @@ spec:
27
27
  port: 4006
28
28
  weight: 100
29
29
 
30
+ ---
31
+ apiVersion: projectcontour.io/v1
32
+ kind: HTTPProxy
33
+ metadata:
34
+ name: www.underpost.net
35
+ namespace: default
36
+ spec:
37
+ virtualhost:
38
+ fqdn: www.underpost.net
39
+ routes:
40
+ - conditions:
41
+ - prefix: /
42
+
43
+ enableWebsockets: true
44
+ services:
45
+ - name: dd-cyberia-development-blue-service
46
+ port: 4007
47
+ weight: 100
48
+
49
+ ---
50
+ apiVersion: projectcontour.io/v1
51
+ kind: HTTPProxy
52
+ metadata:
53
+ name: www.cyberiaonline.com
54
+ namespace: default
55
+ spec:
56
+ virtualhost:
57
+ fqdn: www.cyberiaonline.com
58
+ routes:
59
+ - conditions:
60
+ - prefix: /
61
+
62
+ enableWebsockets: true
63
+ services:
64
+ - name: dd-cyberia-development-blue-service
65
+ port: 4008
66
+ weight: 100
67
+
68
+ - conditions:
69
+ - prefix: /peer
70
+
71
+ enableWebsockets: true
72
+ services:
73
+ - name: dd-cyberia-development-blue-service
74
+ port: 4009
75
+ weight: 100
76
+
77
+ - conditions:
78
+ - prefix: /r1
79
+
80
+ enableWebsockets: true
81
+ services:
82
+ - name: dd-cyberia-development-blue-service
83
+ port: 4010
84
+ weight: 100
85
+
86
+ - conditions:
87
+ - prefix: /r1/peer
88
+
89
+ enableWebsockets: true
90
+ services:
91
+ - name: dd-cyberia-development-blue-service
92
+ port: 4011
93
+ weight: 100
94
+
95
+ - conditions:
96
+ - prefix: /r2
97
+
98
+ enableWebsockets: true
99
+ services:
100
+ - name: dd-cyberia-development-blue-service
101
+ port: 4012
102
+ weight: 100
103
+
104
+ - conditions:
105
+ - prefix: /r2/peer
106
+
107
+ enableWebsockets: true
108
+ services:
109
+ - name: dd-cyberia-development-blue-service
110
+ port: 4013
111
+ weight: 100
112
+
113
+ - conditions:
114
+ - prefix: /r3
115
+
116
+ enableWebsockets: true
117
+ services:
118
+ - name: dd-cyberia-development-blue-service
119
+ port: 4014
120
+ weight: 100
121
+
122
+ - conditions:
123
+ - prefix: /r3/peer
124
+
125
+ enableWebsockets: true
126
+ services:
127
+ - name: dd-cyberia-development-blue-service
128
+ port: 4015
129
+ weight: 100
130
+
131
+ - conditions:
132
+ - prefix: /r4
133
+
134
+ enableWebsockets: true
135
+ services:
136
+ - name: dd-cyberia-development-blue-service
137
+ port: 4016
138
+ weight: 100
139
+
140
+ - conditions:
141
+ - prefix: /r4/peer
142
+
143
+ enableWebsockets: true
144
+ services:
145
+ - name: dd-cyberia-development-blue-service
146
+ port: 4017
147
+ weight: 100
148
+
30
149
  ---
31
150
  apiVersion: projectcontour.io/v1
32
151
  kind: HTTPProxy
@@ -43,7 +162,7 @@ spec:
43
162
  enableWebsockets: true
44
163
  services:
45
164
  - name: dd-cyberia-development-blue-service
46
- port: 4007
165
+ port: 4018
47
166
  weight: 100
48
167
 
49
168
  ---
@@ -62,7 +181,7 @@ spec:
62
181
  enableWebsockets: true
63
182
  services:
64
183
  - name: dd-cyberia-development-blue-service
65
- port: 4008
184
+ port: 4019
66
185
  weight: 100
67
186
 
68
187
  - conditions:
@@ -71,7 +190,7 @@ spec:
71
190
  enableWebsockets: true
72
191
  services:
73
192
  - name: dd-cyberia-development-blue-service
74
- port: 4009
193
+ port: 4020
75
194
  weight: 100
76
195
 
77
196
  ---
@@ -90,7 +209,7 @@ spec:
90
209
  enableWebsockets: true
91
210
  services:
92
211
  - name: dd-cyberia-development-blue-service
93
- port: 4010
212
+ port: 4021
94
213
  weight: 100
95
214
 
96
215
  ---
@@ -109,7 +228,7 @@ spec:
109
228
  enableWebsockets: true
110
229
  services:
111
230
  - name: dd-cyberia-development-blue-service
112
- port: 4011
231
+ port: 4022
113
232
  weight: 100
114
233
 
115
234
  - conditions:
@@ -118,7 +237,7 @@ spec:
118
237
  enableWebsockets: true
119
238
  services:
120
239
  - name: dd-cyberia-development-blue-service
121
- port: 4012
240
+ port: 4023
122
241
  weight: 100
123
242
 
124
243
  ---
@@ -137,6 +256,6 @@ spec:
137
256
  enableWebsockets: true
138
257
  services:
139
258
  - name: dd-cyberia-development-blue-service
140
- port: 4013
259
+ port: 4024
141
260
  weight: 100
142
261
 
package/pv-pvc.yaml ADDED
@@ -0,0 +1,132 @@
1
+ ---
2
+ apiVersion: v1
3
+ kind: PersistentVolume
4
+ metadata:
5
+ name: pv-public-dd-cyberia-dd-cyberia-development-blue
6
+ spec:
7
+ capacity:
8
+ storage: 5Gi
9
+ accessModes:
10
+ - ReadWriteOnce
11
+ persistentVolumeReclaimPolicy: Retain
12
+ storageClassName: manual
13
+ claimRef:
14
+ apiVersion: v1
15
+ kind: PersistentVolumeClaim
16
+ name: pvc-public-dd-cyberia-dd-cyberia-development-blue
17
+ namespace: default
18
+ hostPath:
19
+ path: /home/dd/engine/volume/pv-public-dd-cyberia-dd-cyberia-development-blue
20
+ type: DirectoryOrCreate
21
+ ---
22
+ apiVersion: v1
23
+ kind: PersistentVolumeClaim
24
+ metadata:
25
+ name: pvc-public-dd-cyberia-dd-cyberia-development-blue
26
+ spec:
27
+ accessModes:
28
+ - ReadWriteOnce
29
+ storageClassName: manual
30
+ volumeName: pv-public-dd-cyberia-dd-cyberia-development-blue
31
+ resources:
32
+ requests:
33
+ storage: 5Gi
34
+ ---
35
+ apiVersion: v1
36
+ kind: PersistentVolume
37
+ metadata:
38
+ name: pv-public-dd-cyberia-underpost-dd-cyberia-development-blue
39
+ spec:
40
+ capacity:
41
+ storage: 5Gi
42
+ accessModes:
43
+ - ReadWriteOnce
44
+ persistentVolumeReclaimPolicy: Retain
45
+ storageClassName: manual
46
+ claimRef:
47
+ apiVersion: v1
48
+ kind: PersistentVolumeClaim
49
+ name: pvc-public-dd-cyberia-underpost-dd-cyberia-development-blue
50
+ namespace: default
51
+ hostPath:
52
+ path: /home/dd/engine/volume/pv-public-dd-cyberia-underpost-dd-cyberia-development-blue
53
+ type: DirectoryOrCreate
54
+ ---
55
+ apiVersion: v1
56
+ kind: PersistentVolumeClaim
57
+ metadata:
58
+ name: pvc-public-dd-cyberia-underpost-dd-cyberia-development-blue
59
+ spec:
60
+ accessModes:
61
+ - ReadWriteOnce
62
+ storageClassName: manual
63
+ volumeName: pv-public-dd-cyberia-underpost-dd-cyberia-development-blue
64
+ resources:
65
+ requests:
66
+ storage: 5Gi
67
+ ---
68
+ apiVersion: v1
69
+ kind: PersistentVolume
70
+ metadata:
71
+ name: pv-public-dd-cyberia-dd-cyberia-development-green
72
+ spec:
73
+ capacity:
74
+ storage: 5Gi
75
+ accessModes:
76
+ - ReadWriteOnce
77
+ persistentVolumeReclaimPolicy: Retain
78
+ storageClassName: manual
79
+ claimRef:
80
+ apiVersion: v1
81
+ kind: PersistentVolumeClaim
82
+ name: pvc-public-dd-cyberia-dd-cyberia-development-green
83
+ namespace: default
84
+ hostPath:
85
+ path: /home/dd/engine/volume/pv-public-dd-cyberia-dd-cyberia-development-green
86
+ type: DirectoryOrCreate
87
+ ---
88
+ apiVersion: v1
89
+ kind: PersistentVolumeClaim
90
+ metadata:
91
+ name: pvc-public-dd-cyberia-dd-cyberia-development-green
92
+ spec:
93
+ accessModes:
94
+ - ReadWriteOnce
95
+ storageClassName: manual
96
+ volumeName: pv-public-dd-cyberia-dd-cyberia-development-green
97
+ resources:
98
+ requests:
99
+ storage: 5Gi
100
+ ---
101
+ apiVersion: v1
102
+ kind: PersistentVolume
103
+ metadata:
104
+ name: pv-public-dd-cyberia-underpost-dd-cyberia-development-green
105
+ spec:
106
+ capacity:
107
+ storage: 5Gi
108
+ accessModes:
109
+ - ReadWriteOnce
110
+ persistentVolumeReclaimPolicy: Retain
111
+ storageClassName: manual
112
+ claimRef:
113
+ apiVersion: v1
114
+ kind: PersistentVolumeClaim
115
+ name: pvc-public-dd-cyberia-underpost-dd-cyberia-development-green
116
+ namespace: default
117
+ hostPath:
118
+ path: /home/dd/engine/volume/pv-public-dd-cyberia-underpost-dd-cyberia-development-green
119
+ type: DirectoryOrCreate
120
+ ---
121
+ apiVersion: v1
122
+ kind: PersistentVolumeClaim
123
+ metadata:
124
+ name: pvc-public-dd-cyberia-underpost-dd-cyberia-development-green
125
+ spec:
126
+ accessModes:
127
+ - ReadWriteOnce
128
+ storageClassName: manual
129
+ volumeName: pv-public-dd-cyberia-underpost-dd-cyberia-development-green
130
+ resources:
131
+ requests:
132
+ storage: 5Gi
@@ -52,7 +52,7 @@ cd /home/dd/engine
52
52
 
53
53
  echo "Applying host configuration..."
54
54
 
55
- underpost install
55
+ npm install
56
56
 
57
57
  node bin run secret
58
58
 
@@ -3,6 +3,8 @@ set -euo pipefail
3
3
 
4
4
  BASHRC="$HOME/.bashrc"
5
5
 
6
+ sudo dnf install -y iproute lsof nmap-ncat net-tools procps-ng
7
+
6
8
  # Check whether a "ports" function is already defined
7
9
  if grep -Eq '^\s*(function\s+ports|ports\s*\(\))' "$BASHRC"; then
8
10
  echo "The 'ports' function already exists in $BASHRC. Nothing was changed."
@@ -51,7 +51,9 @@ const AtlasSpriteSheetController = {
51
51
  },
52
52
  get: async (req, res, options) => {
53
53
  try {
54
- res.setHeader('Access-Control-Allow-Origin', '*');
54
+ if (req && req.headers && req.headers.origin) {
55
+ res.set('Access-Control-Allow-Origin', req.headers.origin);
56
+ } else res.setHeader('Access-Control-Allow-Origin', '*');
55
57
  res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
56
58
  const { page, limit } = req.query;
57
59
  const result = await AtlasSpriteSheetService.get(
@@ -118,11 +118,10 @@ AtlasSpriteSheetSchema.index({ 'metadata.itemKey': 1 }, { unique: true });
118
118
  AtlasSpriteSheetSchema.index({ fileId: 1 });
119
119
 
120
120
  // Pre-save validation
121
- AtlasSpriteSheetSchema.pre('save', function (next) {
121
+ AtlasSpriteSheetSchema.pre('save', function () {
122
122
  if (!this.fileId || !this.metadata) {
123
123
  throw new Error('AtlasSpriteSheet missing required fields: fileId or metadata');
124
124
  }
125
- next();
126
125
  });
127
126
 
128
127
  const AtlasSpriteSheetModel = model('AtlasSpriteSheet', AtlasSpriteSheetSchema);
@@ -43,6 +43,8 @@ const AtlasSpriteSheetService = {
43
43
 
44
44
  // Add atlas PNG to IPFS and obtain its CID
45
45
  let atlasCid = '';
46
+ let atlasMetadataCid = '';
47
+ const userId = req.auth && req.auth.user ? req.auth.user._id : undefined;
46
48
  try {
47
49
  const ipfsResult = await IpfsClient.addBufferToIpfs(
48
50
  buffer,
@@ -51,8 +53,6 @@ const AtlasSpriteSheetService = {
51
53
  );
52
54
  if (ipfsResult) {
53
55
  atlasCid = ipfsResult.cid;
54
- // Create pin record for the authenticated user (when available)
55
- const userId = req.auth && req.auth.user ? req.auth.user._id : undefined;
56
56
  if (userId) {
57
57
  await createPinRecord({ cid: atlasCid, userId, options });
58
58
  }
@@ -62,6 +62,24 @@ const AtlasSpriteSheetService = {
62
62
  logger.warn('Failed to add atlas sprite sheet to IPFS:', ipfsError.message);
63
63
  }
64
64
 
65
+ // Pin atlas metadata JSON to IPFS (fast-json-stable-stringify) and obtain its CID
66
+ try {
67
+ const metadataIpfsResult = await IpfsClient.addJsonToIpfs(
68
+ metadata,
69
+ `${itemKey}_atlas_sprite_sheet_metadata.json`,
70
+ `/object-layer/${itemKey}/${itemKey}_atlas_sprite_sheet_metadata.json`,
71
+ );
72
+ if (metadataIpfsResult) {
73
+ atlasMetadataCid = metadataIpfsResult.cid;
74
+ if (userId) {
75
+ await createPinRecord({ cid: atlasMetadataCid, userId, options });
76
+ }
77
+ logger.info(`Atlas metadata pinned to IPFS – CID: ${atlasMetadataCid}`);
78
+ }
79
+ } catch (ipfsError) {
80
+ logger.warn('Failed to add atlas metadata to IPFS:', ipfsError.message);
81
+ }
82
+
65
83
  let atlasDoc = await AtlasSpriteSheet.findOne({ 'metadata.itemKey': itemKey });
66
84
 
67
85
  if (atlasDoc) {
@@ -82,8 +100,10 @@ const AtlasSpriteSheetService = {
82
100
  }
83
101
 
84
102
  objectLayer.atlasSpriteSheetId = atlasDoc._id;
85
- objectLayer.data.atlasSpriteSheetCid = atlasCid;
86
- objectLayer.markModified('data.atlasSpriteSheetCid');
103
+ if (!objectLayer.data.render) objectLayer.data.render = {};
104
+ objectLayer.data.render.cid = atlasCid;
105
+ objectLayer.data.render.metadataCid = atlasMetadataCid;
106
+ objectLayer.markModified('data.render');
87
107
  await objectLayer.save();
88
108
 
89
109
  return atlasDoc;
@@ -106,7 +126,8 @@ const AtlasSpriteSheetService = {
106
126
  const atlasDoc = await AtlasSpriteSheet.findById(objectLayer.atlasSpriteSheetId);
107
127
  if (atlasDoc) {
108
128
  // Remove pin records and unpin atlas CID from IPFS
109
- const atlasCid = atlasDoc.cid || objectLayer.data.atlasSpriteSheetCid;
129
+ const atlasCid = atlasDoc.cid || objectLayer.data.render?.cid;
130
+ const atlasMetadataCid = objectLayer.data.render?.metadataCid;
110
131
  if (atlasCid) {
111
132
  try {
112
133
  await removePinRecordsAndUnpin(atlasCid, options);
@@ -118,6 +139,16 @@ const AtlasSpriteSheetService = {
118
139
  logger.warn(`Failed to clean up IPFS atlas CID ${atlasCid}: ${ipfsErr.message}`);
119
140
  }
120
141
  }
142
+ if (atlasMetadataCid) {
143
+ try {
144
+ await removePinRecordsAndUnpin(atlasMetadataCid, options);
145
+ const itemId = objectLayer.data.item.id;
146
+ await IpfsClient.removeMfsPath(`/object-layer/${itemId}/${itemId}_atlas_sprite_sheet_metadata.json`);
147
+ logger.info(`Cleaned up IPFS atlas metadata CID ${atlasMetadataCid} for ObjectLayer ${objectLayer._id}`);
148
+ } catch (ipfsErr) {
149
+ logger.warn(`Failed to clean up IPFS atlas metadata CID ${atlasMetadataCid}: ${ipfsErr.message}`);
150
+ }
151
+ }
121
152
 
122
153
  // Delete the atlas File document from MongoDB
123
154
  if (atlasDoc.fileId) {
@@ -127,8 +158,10 @@ const AtlasSpriteSheetService = {
127
158
  await AtlasSpriteSheet.findByIdAndDelete(atlasDoc._id);
128
159
  }
129
160
  objectLayer.atlasSpriteSheetId = undefined;
130
- objectLayer.data.atlasSpriteSheetCid = '';
131
- objectLayer.markModified('data.atlasSpriteSheetCid');
161
+ if (!objectLayer.data.render) objectLayer.data.render = {};
162
+ objectLayer.data.render.cid = '';
163
+ objectLayer.data.render.metadataCid = '';
164
+ objectLayer.markModified('data.render');
132
165
  await objectLayer.save();
133
166
  }
134
167
 
@@ -497,7 +497,7 @@ const DocumentService = {
497
497
  req.body.isPublic = isPublic;
498
498
  req.body.tags = tags;
499
499
 
500
- return await Document.findByIdAndUpdate(req.params.id, req.body, { new: true });
500
+ return await Document.findByIdAndUpdate(req.params.id, req.body, { returnDocument: 'after' });
501
501
  }
502
502
  }
503
503
  },
@@ -19,7 +19,9 @@ const FileController = {
19
19
  },
20
20
  get: async (req, res, options) => {
21
21
  try {
22
- res.setHeader('Access-Control-Allow-Origin', '*');
22
+ if (req && req.headers && req.headers.origin) {
23
+ res.set('Access-Control-Allow-Origin', req.headers.origin);
24
+ } else res.setHeader('Access-Control-Allow-Origin', '*');
23
25
  res.setHeader('Cross-Origin-Resource-Policy', 'cross-origin');
24
26
  const result = await FileService.get(req, res, options);
25
27
  if (result instanceof Buffer) {