@underpostnet/cyberia 3.3.73 → 3.3.77

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 (269) hide show
  1. package/.env.example +17 -5
  2. package/.github/workflows/coverall.cyberia.ci.yml +10 -0
  3. package/.github/workflows/docker-image.cyberia-client.ci.yml +1 -1
  4. package/.github/workflows/docker-image.cyberia-client.dev.ci.yml +1 -1
  5. package/.github/workflows/docker-image.cyberia-server.ci.yml +1 -1
  6. package/.github/workflows/docker-image.cyberia-server.dev.ci.yml +1 -1
  7. package/.github/workflows/docker-image.engine-cyberia.ci.yml +1 -1
  8. package/.github/workflows/docker-image.engine-cyberia.dev.ci.yml +1 -1
  9. package/.github/workflows/engine-cyberia.ci.yml +1 -1
  10. package/.github/workflows/publish.cyberia.ci.yml +44 -0
  11. package/AGENTS.md +61 -12
  12. package/CHANGELOG.md +159 -161
  13. package/CLI-HELP.md +20 -13
  14. package/Dockerfile +1 -1
  15. package/Dockerfile.dev +1 -1
  16. package/Dockerfile.test +2 -2
  17. package/README.md +28 -28
  18. package/bin/build.js +96 -21
  19. package/bin/cyberia.js +1247 -1373
  20. package/bin/index.js +1247 -1373
  21. package/compose.env +17 -5
  22. package/conf.js +7 -4
  23. package/deploy/cyberia-client/deploy.sh +10 -11
  24. package/deploy/cyberia-client/package.sh +0 -1
  25. package/deploy/cyberia-client/state.sh +3 -2
  26. package/deploy/cyberia-server/deploy.sh +10 -11
  27. package/deploy/cyberia-server/package.sh +0 -1
  28. package/deploy/cyberia-server/state.sh +3 -2
  29. package/deploy/dd-cyberia/deploy.sh +5 -5
  30. package/deploy/dd-cyberia/init.sh +15 -14
  31. package/deploy/dd-cyberia/package.sh +0 -1
  32. package/deploy/dd-cyberia/state.sh +2 -2
  33. package/deploy/dd-cyberia/sync-deploy.sh +139 -75
  34. package/deploy/lib/config.sh +29 -0
  35. package/deploy/lib/github-actions-logging.sh +92 -76
  36. package/deploy/lib/host.sh +28 -19
  37. package/deploy/lib/state.sh +4 -1
  38. package/deploy/pwa-microservices-template/deploy.sh +10 -8
  39. package/deploy/release/deploy.sh +0 -2
  40. package/deployment.yaml +1 -1
  41. package/docker-compose.yml +23 -17
  42. package/docs/coverage/cyberia/api/cyberia-instance/cyberia-fallback-capture.js.html +1591 -0
  43. package/docs/coverage/cyberia/api/cyberia-instance/index.html +116 -0
  44. package/docs/coverage/cyberia/api/cyberia-server-defaults/cyberia-server-defaults.js.html +4138 -0
  45. package/docs/coverage/cyberia/api/cyberia-server-defaults/index.html +116 -0
  46. package/docs/coverage/cyberia/api/object-layer/index.html +116 -0
  47. package/docs/coverage/cyberia/api/object-layer/object-layer.model.js.html +1393 -0
  48. package/docs/coverage/cyberia/base.css +362 -0
  49. package/docs/coverage/cyberia/block-navigation.js +82 -0
  50. package/docs/coverage/cyberia/favicon.png +0 -0
  51. package/docs/coverage/cyberia/index.html +161 -0
  52. package/docs/coverage/cyberia/prettify.css +101 -0
  53. package/docs/coverage/cyberia/prettify.js +937 -0
  54. package/docs/coverage/cyberia/projects/cyberia/atlas-sprite-sheet-generator.js.html +1315 -0
  55. package/docs/coverage/cyberia/projects/cyberia/index.html +176 -0
  56. package/docs/coverage/cyberia/projects/cyberia/instance-backup.js.html +715 -0
  57. package/docs/coverage/cyberia/projects/cyberia/instance-data.js.html +2182 -0
  58. package/docs/coverage/cyberia/projects/cyberia/shape-generator.js.html +3265 -0
  59. package/docs/coverage/cyberia/projects/cyberia/stat-balance.js.html +328 -0
  60. package/docs/coverage/cyberia/sort-arrow-sprite.png +0 -0
  61. package/docs/coverage/cyberia/sorter.js +205 -0
  62. package/hardhat/package-lock.json +2 -2
  63. package/hardhat/package.json +1 -1
  64. package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +1 -1
  65. package/manifests/cronjobs/dd-cron/dd-cron-vultr.yaml +1 -1
  66. package/manifests/deployment/dd-cyberia-development/deployment.yaml +1 -1
  67. package/manifests/deployment/dd-default-development/deployment.yaml +2 -2
  68. package/manifests/deployment/mongo-express/deployment.yaml +46 -27
  69. package/manifests/deployment/mongo-express/kustomization.yaml +9 -0
  70. package/manifests/deployment/mongo-express/mongo-express-nodeport.yaml +18 -0
  71. package/manifests/deployment/mongo-express/service.yaml +16 -0
  72. package/manifests/deployment/mongo-express-no-auth/disable-mongodb-auth.yaml +16 -0
  73. package/manifests/deployment/mongo-express-no-auth/kustomization.yaml +16 -0
  74. package/package.json +19 -17
  75. package/scripts/test-monitor.sh +3 -3
  76. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +14 -9
  77. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +36 -5
  78. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.router.js +5 -0
  79. package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +88 -184
  80. package/src/api/cyberia-action/cyberia-action.router.js +2 -2
  81. package/src/api/cyberia-action/cyberia-action.service.js +3 -4
  82. package/src/api/cyberia-audio/cyberia-audio.controller.js +6 -0
  83. package/src/api/cyberia-audio/cyberia-audio.model.js +61 -0
  84. package/src/api/cyberia-audio/cyberia-audio.router.js +21 -0
  85. package/src/api/cyberia-audio/cyberia-audio.service.js +220 -0
  86. package/src/api/cyberia-client-hints/cyberia-client-hints.controller.js +1 -3
  87. package/src/api/cyberia-client-hints/cyberia-client-hints.model.js +10 -19
  88. package/src/api/cyberia-client-hints/cyberia-client-hints.router.js +12 -34
  89. package/src/api/cyberia-client-hints/cyberia-client-hints.service.js +15 -32
  90. package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +1 -1
  91. package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +1 -1
  92. package/src/api/cyberia-entity/cyberia-entity.model.js +2 -0
  93. package/src/api/cyberia-entity/cyberia-entity.service.js +1 -1
  94. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.controller.js +8 -2
  95. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.model.js +31 -20
  96. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.router.js +16 -1
  97. package/src/api/cyberia-entity-type-default/cyberia-entity-type-default.service.js +466 -3
  98. package/src/api/cyberia-instance/cyberia-fallback-capture.js +87 -51
  99. package/src/api/cyberia-instance/cyberia-fallback-world.js +21 -40
  100. package/src/api/cyberia-instance/cyberia-instance-boot.service.js +5 -5
  101. package/src/api/cyberia-instance/cyberia-instance-items.js +98 -0
  102. package/src/api/cyberia-instance/cyberia-instance-map.service.js +34 -141
  103. package/src/api/cyberia-instance/cyberia-instance.controller.js +1 -4
  104. package/src/api/cyberia-instance/cyberia-instance.model.js +0 -14
  105. package/src/api/cyberia-instance/cyberia-instance.router.js +3 -16
  106. package/src/api/cyberia-instance/cyberia-instance.service.js +3 -43
  107. package/src/api/cyberia-instance/cyberia-world-generator.js +8 -13
  108. package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +49 -75
  109. package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +74 -1
  110. package/src/api/cyberia-map/cyberia-map.service.js +6 -2
  111. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.controller.js +31 -0
  112. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.model.js +56 -0
  113. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.router.js +33 -0
  114. package/src/api/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +189 -0
  115. package/src/api/cyberia-quest/cyberia-quest.router.js +3 -3
  116. package/src/api/cyberia-quest/cyberia-quest.service.js +3 -3
  117. package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +1 -1
  118. package/src/api/cyberia-server-defaults/cyberia-server-defaults.js +403 -188
  119. package/src/api/cyberia-skill/cyberia-skill.model.js +6 -6
  120. package/src/api/file/file.ref.js +153 -0
  121. package/src/api/file/file.ref.json +11 -2
  122. package/src/api/object-layer/object-layer.model.js +47 -12
  123. package/src/api/object-layer/object-layer.router.js +10 -3
  124. package/src/api/object-layer/object-layer.service.js +113 -120
  125. package/src/cli/app.js +12 -1
  126. package/src/cli/client.js +2 -2
  127. package/src/cli/cluster.js +80 -18
  128. package/src/cli/deploy.js +215 -34
  129. package/src/cli/docker-compose.js +1 -1
  130. package/src/cli/fs-selection.js +115 -0
  131. package/src/cli/fs.js +158 -342
  132. package/src/cli/index.js +22 -10
  133. package/src/cli/release.js +3 -1
  134. package/src/cli/repository.js +35 -9
  135. package/src/cli/run.js +80 -199
  136. package/src/cli/test.js +4 -0
  137. package/src/cli/wireguard.js +32 -31
  138. package/src/client/components/core/Badge.js +0 -1
  139. package/src/client/components/core/CssCore.js +8 -1
  140. package/src/client/components/core/Docs.js +77 -100
  141. package/src/client/components/core/Modal.js +77 -23
  142. package/src/client/components/core/ToolTip.js +15 -0
  143. package/src/client/components/cryptokoyn/AppShellCryptokoyn.js +0 -2
  144. package/src/client/components/cyberia/ActionEngineCyberia.js +12 -36
  145. package/src/client/components/cyberia/EntityEngineCyberia.js +492 -121
  146. package/src/client/components/cyberia/InstanceEngineCyberia.js +129 -160
  147. package/src/client/components/cyberia/InstanceSelectionView.js +7 -1
  148. package/src/client/components/cyberia/MapEngineCyberia.js +175 -69
  149. package/src/client/components/cyberia/ObjectLayerEngine.js +1011 -97
  150. package/src/client/components/cyberia/ObjectLayerEngineModal.js +81 -155
  151. package/src/client/components/cyberia/ObjectLayerEngineViewer.js +113 -98
  152. package/src/client/components/cyberia/SharedDefaultsCyberia.js +215 -56
  153. package/src/client/components/cyberia-portal/AppShellCyberiaPortal.js +0 -34
  154. package/src/client/components/cyberia-portal/CssCyberiaPortal.js +1 -1
  155. package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +712 -76
  156. package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +0 -4
  157. package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +0 -4
  158. package/src/client/components/default/AppShellDefault.js +1 -4
  159. package/src/client/components/itemledger/AppShellItemledger.js +0 -2
  160. package/src/client/components/underpost/AppShellUnderpost.js +1 -1
  161. package/src/client/public/cyberia-docs/ARCHITECTURE.md +15 -15
  162. package/src/client/public/cyberia-docs/CYBERIA-CLI.md +280 -24
  163. package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +51 -29
  164. package/src/client/public/cyberia-docs/CYBERIA-SAGA.md +52 -53
  165. package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +16 -11
  166. package/src/client/public/cyberia-docs/CYBERIA.md +28 -28
  167. package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +11 -5
  168. package/src/client/public/cyberia-docs/ROADMAP.md +1 -1
  169. package/src/client/public/cyberia-docs/STATS-PROGRESSION.md +217 -0
  170. package/src/client/public/cyberia-docs/WHITE-PAPER.md +20 -12
  171. package/src/client/services/cyberia-audio/cyberia-audio.service.js +99 -0
  172. package/src/client/services/cyberia-entity-type-default/cyberia-entity-type-default.service.js +38 -0
  173. package/src/client/services/cyberia-instance/cyberia-instance.management.js +5 -4
  174. package/src/client/services/cyberia-instance/cyberia-instance.service.js +0 -40
  175. package/src/client/services/cyberia-map/cyberia-map.management.js +5 -4
  176. package/src/client/services/cyberia-map-audio-conf/cyberia-map-audio-conf.service.js +138 -0
  177. package/src/client/services/object-layer/object-layer.management.js +6 -10
  178. package/src/client/services/object-layer/object-layer.service.js +3 -1
  179. package/src/client/ssr/views/Cyberia404.js +3 -3
  180. package/src/client-builder/client-build-docs.js +52 -52
  181. package/src/client-builder/client-build.js +67 -44
  182. package/src/client-builder/client-bundle.js +347 -0
  183. package/src/db/mongo/MongoExpress.js +187 -0
  184. package/src/grpc/cyberia/grpc-server.js +5 -7
  185. package/src/index.js +1 -1
  186. package/src/projects/cyberia/atlas-sprite-sheet-generator.js +143 -146
  187. package/src/projects/cyberia/atlas-sprite-sheet-store.js +391 -0
  188. package/src/projects/cyberia/besu-genesis-generator.js +5 -14
  189. package/src/projects/cyberia/boot-contract-fixtures.js +32 -0
  190. package/src/projects/cyberia/catalog-cyberia.js +3 -2
  191. package/src/projects/cyberia/gemini-client.js +3 -3
  192. package/src/projects/cyberia/generate-saga.js +4 -11
  193. package/src/projects/cyberia/hot-reload-trigger.js +17 -28
  194. package/src/projects/cyberia/instance-backup.js +210 -0
  195. package/src/projects/cyberia/instance-data.js +177 -257
  196. package/src/projects/cyberia/map-preview-generator.js +32 -68
  197. package/src/projects/cyberia/object-layer.js +152 -319
  198. package/src/projects/cyberia/seed-audio.js +139 -0
  199. package/src/projects/cyberia/semantic-layer-generator-skin.js +2 -8
  200. package/src/projects/cyberia/semantic-layer-generator.js +2 -18
  201. package/src/projects/cyberia/stat-balance.js +81 -0
  202. package/src/projects/cyberia/stat-commands.js +23 -0
  203. package/src/projects/cyberia/stat-contract-generator.js +101 -0
  204. package/src/runtime/cyberia-client/Dockerfile +8 -4
  205. package/src/runtime/cyberia-client/Dockerfile.dev +5 -2
  206. package/src/runtime/cyberia-server/Dockerfile +9 -2
  207. package/src/runtime/cyberia-server/Dockerfile.dev +8 -1
  208. package/src/runtime/engine-cyberia/Dockerfile +1 -1
  209. package/src/runtime/engine-cyberia/Dockerfile.dev +1 -1
  210. package/src/runtime/engine-cyberia/Dockerfile.test +2 -2
  211. package/src/runtime/engine-cyberia/compose.env +17 -5
  212. package/src/runtime/engine-cyberia/docker-compose.yml +23 -17
  213. package/src/server/build/coverage.js +113 -42
  214. package/src/server/build/package.js +55 -12
  215. package/src/server/build/testing.js +59 -9
  216. package/src/server/network/middlewares.js +8 -2
  217. package/src/server/network/underpost-gateway.js +113 -14
  218. package/src/server/ops/logger.js +70 -35
  219. package/src/server/runtime/conf.js +40 -9
  220. package/src/server/runtime/start.js +11 -2
  221. package/src/server/storage/data-query.js +16 -0
  222. package/src/server/storage/downloader.js +62 -14
  223. package/src/server/storage/zip.js +153 -0
  224. package/test/integration/app/cyberia/atlas-sprite-sheet-store.test.js +402 -0
  225. package/test/integration/app/cyberia/atlas-sprite-sheet.test.js +86 -0
  226. package/test/integration/app/cyberia/cyberia-cli-plain-reads.test.js +34 -0
  227. package/test/integration/app/cyberia/cyberia-entity-type-default.test.js +842 -0
  228. package/test/integration/app/cyberia/cyberia-instance-conf-coerce.test.js +53 -0
  229. package/test/integration/app/cyberia/cyberia-instance-conf-defaults.test.js +16 -22
  230. package/test/integration/app/cyberia/cyberia-instance-items.test.js +90 -0
  231. package/test/integration/app/cyberia/cyberia-load.test.js +6 -7
  232. package/test/integration/app/cyberia/cyberia-map-audio-conf.test.js +256 -0
  233. package/test/integration/app/cyberia/cyberia-stats.test.js +150 -0
  234. package/test/integration/app/cyberia/fallback-world-capture.test.js +87 -2
  235. package/test/integration/app/cyberia/object-layer-item-selection.test.js +56 -0
  236. package/test/integration/app/cyberia/object-layer-natural-key.test.js +32 -0
  237. package/test/integration/app/cyberia/seed-audio.test.js +275 -0
  238. package/test/integration/infra/2-network/wireguard-cli.test.js +33 -9
  239. package/test/integration/infra/2-network/wireguard-edge.test.js +58 -18
  240. package/test/integration/infra/3-cluster/mongo-express-deploy.test.js +156 -0
  241. package/test/integration/infra/4-ingress/api-cross-origin.test.js +79 -0
  242. package/test/integration/infra/4-ingress/underpost-ingress.test.js +1 -1
  243. package/test/unit/catalog.test.js +13 -2
  244. package/test/unit/client-build-docs.test.js +97 -70
  245. package/test/unit/client-bundle.test.js +313 -0
  246. package/test/unit/conf-resolution.test.js +58 -7
  247. package/test/unit/coverage-artifact.test.js +120 -29
  248. package/test/unit/cyberia/instance-backup.test.js +183 -0
  249. package/test/unit/cyberia/instance-data.test.js +314 -0
  250. package/test/unit/cyberia/instance-object-layer-items.test.js +46 -0
  251. package/test/unit/cyberia/publish-workflow.test.js +22 -0
  252. package/test/unit/cyberia/stat-balance.test.js +69 -0
  253. package/test/unit/deploy-legacy-gateway-sweep.test.js +63 -0
  254. package/test/unit/deploy-log-table.test.js +76 -5
  255. package/test/unit/downloader-integrity.test.js +98 -0
  256. package/test/unit/file-reference-registry.test.js +141 -0
  257. package/test/unit/fs-storage-paths.test.js +596 -0
  258. package/test/unit/gateway-pod-fetch.test.js +95 -0
  259. package/test/unit/letsencrypt-issuer.test.js +101 -0
  260. package/test/unit/logger-redaction.test.js +29 -0
  261. package/test/unit/package.test.js +70 -16
  262. package/test/unit/prepare-host.test.js +84 -1
  263. package/test/unit/release-bump.test.js +3 -1
  264. package/test/unit/start-options.test.js +12 -0
  265. package/test/unit/test-tiers.test.js +27 -0
  266. package/test/unit/zip-archive.test.js +142 -0
  267. package/vitest.config.js +11 -3
  268. package/src/api/cyberia-instance/cyberia-fallback-default-items.js +0 -63
  269. package/src/client/components/cyberia/FallbackWorldEngineCyberia.js +0 -368
@@ -4,6 +4,7 @@ metadata:
4
4
  name: mongo-express
5
5
  labels:
6
6
  app: mongo-express
7
+ group: db
7
8
  spec:
8
9
  replicas: 1
9
10
  selector:
@@ -13,25 +14,27 @@ spec:
13
14
  metadata:
14
15
  labels:
15
16
  app: mongo-express
17
+ group: db
16
18
  spec:
17
19
  containers:
18
20
  - name: mongo-express
19
- image: mongo-express
21
+ image: mongo-express:1.0.2
20
22
  ports:
21
23
  - containerPort: 8081
22
24
  env:
23
- # - name: ME_CONFIG_MONGODB_ADMINUSERNAME
24
- # valueFrom:
25
- # secretKeyRef:
26
- # name: mongodb-secret
27
- # key: username
28
- # - name: ME_CONFIG_MONGODB_ADMINPASSWORD
29
- # valueFrom:
30
- # secretKeyRef:
31
- # name: mongodb-secret
32
- # key: password
33
- - name: ME_CONFIG_SITE_BASEURL
34
- value: '/mongo/'
25
+ # Both credential pairs come from the one `mongodb-secret` the StatefulSet already
26
+ # consumes: the UI authenticates to mongod with the root credentials, and gates its
27
+ # own session behind the same pair rather than the image's admin/pass defaults.
28
+ - name: ME_CONFIG_MONGODB_ADMINUSERNAME
29
+ valueFrom:
30
+ secretKeyRef:
31
+ name: mongodb-secret
32
+ key: username
33
+ - name: ME_CONFIG_MONGODB_ADMINPASSWORD
34
+ valueFrom:
35
+ secretKeyRef:
36
+ name: mongodb-secret
37
+ key: password
35
38
  - name: ME_CONFIG_BASICAUTH_USERNAME
36
39
  valueFrom:
37
40
  secretKeyRef:
@@ -42,21 +45,37 @@ spec:
42
45
  secretKeyRef:
43
46
  name: mongodb-secret
44
47
  key: password
48
+ - name: ME_CONFIG_SITE_BASEURL
49
+ value: '/mongo/'
50
+ # In-cluster identity of the first replica, identical under Kind, Kubeadm and K3s.
51
+ # The driver reads the replica set config from it and reaches the remaining members
52
+ # through the same headless service.
45
53
  - name: ME_CONFIG_MONGODB_SERVER
46
54
  value: 'mongodb-0.mongodb-service'
47
- # - name: ME_CONFIG_MONGODB_ENABLE_ADMIN
48
- # value: 'true'
49
55
  - name: ME_CONFIG_MONGODB_PORT
50
56
  value: '27017'
51
- ---
52
- apiVersion: v1
53
- kind: Service
54
- metadata:
55
- name: mongo-express-service
56
- spec:
57
- selector:
58
- app: mongo-express
59
- ports:
60
- - protocol: TCP
61
- port: 8081
62
- targetPort: 8081
57
+ - name: ME_CONFIG_MONGODB_AUTH_DATABASE
58
+ value: 'admin'
59
+ # Without this the UI only lists the databases named in its config; the point of the
60
+ # deployment is browsing whatever collections the StatefulSet actually holds.
61
+ - name: ME_CONFIG_MONGODB_ENABLE_ADMIN
62
+ value: 'true'
63
+ readinessProbe:
64
+ tcpSocket:
65
+ port: 8081
66
+ initialDelaySeconds: 10
67
+ periodSeconds: 10
68
+ timeoutSeconds: 5
69
+ livenessProbe:
70
+ tcpSocket:
71
+ port: 8081
72
+ initialDelaySeconds: 30
73
+ periodSeconds: 20
74
+ timeoutSeconds: 5
75
+ resources:
76
+ requests:
77
+ cpu: '50m'
78
+ memory: '128Mi'
79
+ limits:
80
+ cpu: '500m'
81
+ memory: '256Mi'
@@ -0,0 +1,9 @@
1
+ ---
2
+ # kubectl apply -k manifests/deployment/mongo-express/.
3
+ apiVersion: kustomize.config.k8s.io/v1beta1
4
+ kind: Kustomization
5
+ resources:
6
+ # mongo-express-nodeport.yaml is intentionally absent: host/public exposure of an admin UI is
7
+ # opt-in, applied by `cluster --mongo-express --node-port` once the pod reports Ready.
8
+ - deployment.yaml
9
+ - service.yaml
@@ -0,0 +1,18 @@
1
+ apiVersion: v1
2
+ kind: Service
3
+ metadata:
4
+ name: mongo-express-nodeport
5
+ labels:
6
+ app: mongo-express
7
+ group: db
8
+ spec:
9
+ type: NodePort
10
+ externalTrafficPolicy: Cluster
11
+ selector:
12
+ app: mongo-express
13
+ ports:
14
+ - name: mongo-express
15
+ protocol: TCP
16
+ port: 8081
17
+ targetPort: 8081
18
+ nodePort: 32081
@@ -0,0 +1,16 @@
1
+ apiVersion: v1
2
+ kind: Service
3
+ metadata:
4
+ name: mongo-express-service
5
+ labels:
6
+ app: mongo-express
7
+ group: db
8
+ spec:
9
+ type: ClusterIP
10
+ selector:
11
+ app: mongo-express
12
+ ports:
13
+ - name: mongo-express
14
+ protocol: TCP
15
+ port: 8081
16
+ targetPort: 8081
@@ -0,0 +1,16 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: mongo-express
5
+ spec:
6
+ template:
7
+ spec:
8
+ containers:
9
+ - name: mongo-express
10
+ env:
11
+ - name: ME_CONFIG_MONGODB_ADMINUSERNAME
12
+ $patch: delete
13
+ - name: ME_CONFIG_MONGODB_ADMINPASSWORD
14
+ $patch: delete
15
+ - name: ME_CONFIG_MONGODB_AUTH_DATABASE
16
+ $patch: delete
@@ -0,0 +1,16 @@
1
+ ---
2
+ # kubectl apply -k manifests/deployment/mongo-express-no-auth/.
3
+ # Overlay of manifests/deployment/mongo-express for a mongod started without --auth
4
+ # (manifests/mongodb-4.4). Credentials sent to a server that enforces none are not ignored: the
5
+ # driver still runs SCRAM and the handshake fails, so the admin pair is dropped rather than left
6
+ # resolving against a secret the server never checks. `cluster --mongo-express` selects between
7
+ # this overlay and the base from the deployed StatefulSet's own mongod arguments.
8
+ #
9
+ # A sibling of the base rather than a child of it: kustomize rejects an overlay nested inside the
10
+ # root it extends as a cycle.
11
+ apiVersion: kustomize.config.k8s.io/v1beta1
12
+ kind: Kustomization
13
+ resources:
14
+ - ../mongo-express
15
+ patches:
16
+ - path: disable-mongodb-auth.yaml
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "type": "module",
3
3
  "main": "src/index.js",
4
4
  "name": "@underpostnet/cyberia",
5
- "version": "3.3.73",
5
+ "version": "3.3.77",
6
6
  "description": "Cyberia CLI — toolchain for the Cyberia MMO data layer, content pipeline, persistence, gRPC services, and ERC-1155 lifecycle on Hyperledger Besu.",
7
7
  "scripts": {
8
8
  "start": "node --max-old-space-size=8192 src/server",
@@ -72,12 +72,11 @@
72
72
  },
73
73
  "homepage": "https://github.com/underpostnet/engine-cyberia#readme",
74
74
  "dependencies": {
75
- "underpost": "^3.3.73",
76
- "adm-zip": "^0.6.0",
75
+ "underpost": "^3.3.77",
77
76
  "maxrects-packer": "^2.7.3",
78
77
  "pngjs": "^7.0.0",
79
78
  "jimp": "^1.6.0",
80
- "sharp": "^0.35.3",
79
+ "sharp": "^0.35.4",
81
80
  "ethers": "~6.16.0"
82
81
  },
83
82
  "publishConfig": {
@@ -96,19 +95,21 @@
96
95
  "router": {
97
96
  "path-to-regexp": ">=8.4.0"
98
97
  },
99
- "ws": "^8.20.2"
98
+ "ws": "^8.20.2",
99
+ "qs": ">=6.16.0",
100
+ "sharp": "^0.35.4"
100
101
  },
101
102
  "devDependencies": {
102
103
  "@fortawesome/fontawesome-free": "^7.3.1",
103
- "@fullcalendar/rrule": "^7.0.2",
104
+ "@fullcalendar/rrule": "^7.1.0",
104
105
  "@grpc/grpc-js": "^1.14.4",
105
106
  "@grpc/proto-loader": "^0.8.1",
106
107
  "@neodrag/vanilla": "^2.3.1",
107
- "@vitest/coverage-v8": "4.1.11",
108
+ "@vitest/coverage-v8": "5.0.0",
108
109
  "ag-grid-community": "^36.1.0",
109
- "allure-vitest": "3.11.0",
110
+ "allure-vitest": "3.12.0",
110
111
  "axios": "^1.20.0",
111
- "bumpp": "^12.2.2",
112
+ "bumpp": "^12.3.0",
112
113
  "chai": "^6.2.2",
113
114
  "clipboardy": "^5.3.2",
114
115
  "cloudinary": "^2.11.0",
@@ -125,25 +126,26 @@
125
126
  "escape-string-regexp": "^5.0.0",
126
127
  "express": "^5.2.1",
127
128
  "express-fileupload": "^1.4.3",
128
- "express-rate-limit": "^8.6.2",
129
+ "express-rate-limit": "^8.7.0",
129
130
  "express-slow-down": "^3.1.1",
130
131
  "fast-json-stable-stringify": "^2.1.0",
131
132
  "favicons": "^7.3.1",
132
133
  "fs-extra": "^11.4.0",
133
- "fullcalendar": "^7.0.2",
134
+ "fullcalendar": "^7.1.0",
134
135
  "helmet": "^8.3.0",
135
136
  "html-minifier-terser": "^7.2.0",
136
137
  "http-proxy-middleware": "^4.2.0",
137
138
  "ignore-walk": "^9.0.0",
138
139
  "iovalkey": "^0.4.0",
139
- "json-colorizer": "^3.0.1",
140
140
  "js-yaml": "^5.4.1",
141
+ "json-colorizer": "^3.0.1",
141
142
  "jsonwebtoken": "^9.0.3",
142
- "mariadb": "^3.5.3",
143
- "mongoose": "^9.9.4",
144
- "morgan": "^1.12.0",
143
+ "jszip": "^3.10.2",
144
+ "mariadb": "^3.5.4",
145
145
  "marked": "^18.0.11",
146
- "nodemailer": "^9.0.6",
146
+ "mongoose": "^9.9.5",
147
+ "morgan": "^1.12.0",
148
+ "nodemailer": "^10.0.0",
147
149
  "nodemon": "^3.0.1",
148
150
  "peer": "^1.0.2",
149
151
  "peerjs": "^1.5.5",
@@ -161,7 +163,7 @@
161
163
  "typescript": "6.0.3",
162
164
  "validator": "^13.15.35",
163
165
  "vanilla-jsoneditor": "^3.13.0",
164
- "vitest": "4.1.11",
166
+ "vitest": "5.0.0",
165
167
  "winston": "^3.19.0",
166
168
  "workbox-background-sync": "^7.4.1",
167
169
  "workbox-cacheable-response": "^7.4.1",
@@ -24,12 +24,12 @@ MODE=runtime # runtime | instance
24
24
  ENV=development # development | production
25
25
  DEPLOY_ID=dd-test # deploy id (instance mode: parent of conf.instances.json)
26
26
  INSTANCE_IDS= # instance mode: csv of ids (default: all in conf.instances.json)
27
- IMAGE=underpost/wp:v3.3.73 # runtime mode image (instance mode reads image from conf)
27
+ IMAGE=underpost/wp:v3.3.77 # runtime mode image (instance mode reads image from conf)
28
28
  VERSIONS=green # csv of blue/green versions
29
29
  REPLICAS=1 # replicas per deployment
30
30
  NAMESPACE=default # k8s namespace
31
31
  CLUSTER=kind # kind | kubeadm | k3s | "" (auto/none)
32
- TIMEOUT_RESPONSE=300000ms # HTTPProxy per-route response timeout
32
+ TIMEOUT_RESPONSE=10000ms # HTTPProxy per-route response timeout
33
33
  TEMPLATE_REPO=underpostnet/pwa-microservices-template-private # runtime mode link repo
34
34
  ENVOY_NAMESPACE=projectcontour # ingress namespace (instance TLS exposure)
35
35
  ENVOY_SERVICE=envoy # ingress service (instance TLS exposure)
@@ -59,7 +59,7 @@ Common (every default is overridable):
59
59
  --replicas <n>
60
60
  --namespace <ns>
61
61
  --cluster <kind|kubeadm|k3s|none>
62
- --timeout-response <dur> e.g. 300000ms
62
+ --timeout-response <dur> e.g. 10000ms
63
63
  --template-repo <owner/repo> runtime mode link repo
64
64
  --envoy-namespace <ns> instance TLS exposure ingress namespace
65
65
  --envoy-service <name> instance TLS exposure ingress service
@@ -7,6 +7,18 @@ import {
7
7
  } from '../../server/network/middlewares.js';
8
8
  import { AtlasSpriteSheetService } from './atlas-sprite-sheet.service.js';
9
9
 
10
+ /* Streams one render as a file. Headers go on before the lookup, so a cross-origin
11
+ * client can read a 404 too. */
12
+ const blobHandler = (lookup) =>
13
+ controllerHandler(
14
+ async (req, res, options) => {
15
+ setCrossOriginHeaders(req, res);
16
+ const { buffer, mimetype, name } = await lookup(req, res, options);
17
+ return sendBlob(req, res, { buffer, mimetype, filename: name });
18
+ },
19
+ { errorStatus: 404 },
20
+ );
21
+
10
22
  const AtlasSpriteSheetController = buildCrudController(AtlasSpriteSheetService, {
11
23
  get: serviceHandler(AtlasSpriteSheetService.get, { crossOrigin: true, pagination: true }),
12
24
  getMetadata: serviceHandler(AtlasSpriteSheetService.getMetadata, {
@@ -16,15 +28,8 @@ const AtlasSpriteSheetController = buildCrudController(AtlasSpriteSheetService,
16
28
  }),
17
29
  generate: serviceHandler(AtlasSpriteSheetService.generate, { errorStatus: 500 }),
18
30
  deleteByObjectLayerId: serviceHandler(AtlasSpriteSheetService.deleteByObjectLayerId, { errorStatus: 500 }),
19
- blob: controllerHandler(
20
- async (req, res, options) => {
21
- // Set before the service call so cross-origin clients can read 404s too.
22
- setCrossOriginHeaders(req, res);
23
- const { buffer, mimetype, name } = await AtlasSpriteSheetService.blob(req, res, options);
24
- return sendBlob(req, res, { buffer, mimetype, filename: name });
25
- },
26
- { errorStatus: 404 },
27
- ),
31
+ blob: blobHandler(AtlasSpriteSheetService.blob),
32
+ idlePreview: blobHandler(AtlasSpriteSheetService.idlePreview),
28
33
  });
29
34
 
30
35
  export { AtlasSpriteSheetController };
@@ -69,14 +69,27 @@ const DirectionFramesSchema = new Schema(
69
69
  { _id: false },
70
70
  );
71
71
  /**
72
+ * One atlas per item key, kept in two renders of one layout, plus the still that
73
+ * stands in for the item wherever a single picture is wanted.
74
+ *
75
+ * `fileId` is the human-resolution PNG, at `metadata.upscaleFactor` pixels per
76
+ * cell. `minifyFileId` is the PNG the client runtime downloads through
77
+ * `GET /atlas-sprite-sheet/blob/:itemKey`, at `metadata.cellPixelDim` pixels per
78
+ * cell. `metadata` describes the minified render, so blob and metadata agree.
79
+ * `idlePreviewFileId` is the first down-idle frame cut out of `fileId`, served by
80
+ * `GET /atlas-sprite-sheet/idle-preview/:itemKey` to every editor and overlay.
81
+ *
72
82
  * @typedef {Object} AtlasSpriteSheet
73
- * @property {Types.ObjectId} fileId - Reference to File document (consolidated PNG)
83
+ * @property {Types.ObjectId} fileId - Reference to the human-resolution PNG File document
84
+ * @property {Types.ObjectId} [minifyFileId] - Reference to the minified PNG File document
85
+ * @property {Types.ObjectId} [idlePreviewFileId] - Reference to the down-idle still File document
74
86
  * @property {string} [cid] - IPFS Content Identifier for the atlas PNG
75
87
  * @property {Object} metadata - Atlas sprite sheet metadata
76
88
  * @property {string} metadata.itemKey - Item identifier key for texture reference
77
- * @property {number} metadata.atlasWidth - Total atlas width in pixels
78
- * @property {number} metadata.atlasHeight - Total atlas height in pixels
79
- * @property {number} metadata.cellPixelDim - Pixel dimension of each cell
89
+ * @property {number} metadata.atlasWidth - Minified atlas width in pixels
90
+ * @property {number} metadata.atlasHeight - Minified atlas height in pixels
91
+ * @property {number} metadata.cellPixelDim - Pixels per cell of the minified render
92
+ * @property {number} metadata.upscaleFactor - Pixels per cell of the human-resolution render
80
93
  * @property {number} metadata.frame_duration - Duration of each frame in milliseconds
81
94
  * @property {DirectionFrames} metadata.frames - Frame positions in atlas by direction
82
95
  * @property {Date} createdAt - When the document was created
@@ -90,6 +103,18 @@ const AtlasSpriteSheetSchema = new Schema(
90
103
  ref: 'File',
91
104
  required: true,
92
105
  },
106
+ // Absent until `cyberia ol --minify` renders it for this item.
107
+ minifyFileId: {
108
+ type: Schema.Types.ObjectId,
109
+ ref: 'File',
110
+ default: null,
111
+ },
112
+ // The down-idle still every preview reads; absent until an atlas write fills it.
113
+ idlePreviewFileId: {
114
+ type: Schema.Types.ObjectId,
115
+ ref: 'File',
116
+ default: null,
117
+ },
93
118
  cid: {
94
119
  type: String,
95
120
  default: '',
@@ -99,7 +124,8 @@ const AtlasSpriteSheetSchema = new Schema(
99
124
  itemKey: { type: String, required: true, trim: true },
100
125
  atlasWidth: { type: Number, required: true, min: 1 },
101
126
  atlasHeight: { type: Number, required: true, min: 1 },
102
- cellPixelDim: { type: Number, required: true, min: 1, default: 20 },
127
+ cellPixelDim: { type: Number, required: true, min: 1 },
128
+ upscaleFactor: { type: Number, required: false, min: 1 },
103
129
  frame_duration: { type: Number, min: 0, default: 100 },
104
130
  frames: { type: DirectionFramesSchema, required: true },
105
131
  },
@@ -113,6 +139,8 @@ const AtlasSpriteSheetSchema = new Schema(
113
139
  // Indexes for efficient querying
114
140
  AtlasSpriteSheetSchema.index({ 'metadata.itemKey': 1 }, { unique: true });
115
141
  AtlasSpriteSheetSchema.index({ fileId: 1 });
142
+ AtlasSpriteSheetSchema.index({ minifyFileId: 1 });
143
+ AtlasSpriteSheetSchema.index({ idlePreviewFileId: 1 });
116
144
  // Pre-save validation
117
145
  AtlasSpriteSheetSchema.pre('save', function () {
118
146
  if (!this.fileId || !this.metadata) {
@@ -127,6 +155,8 @@ class AtlasSpriteSheetDto {
127
155
  return {
128
156
  _id: 1,
129
157
  fileId: 1,
158
+ minifyFileId: 1,
159
+ idlePreviewFileId: 1,
130
160
  cid: 1,
131
161
  metadata: 1,
132
162
  createdAt: 1,
@@ -144,6 +174,7 @@ class AtlasSpriteSheetDto {
144
174
  'metadata.atlasWidth': 1,
145
175
  'metadata.atlasHeight': 1,
146
176
  'metadata.cellPixelDim': 1,
177
+ 'metadata.upscaleFactor': 1,
147
178
  'metadata.frame_duration': 1,
148
179
  'metadata.frames': 1,
149
180
  createdAt: 1,
@@ -23,6 +23,11 @@ class AtlasSpriteSheetRouter {
23
23
  async (req, res) => await AtlasSpriteSheetController.deleteByObjectLayerId(req, res, options),
24
24
  );
25
25
  router.get(`/blob/:itemKey`, async (req, res) => await AtlasSpriteSheetController.blob(req, res, options));
26
+ // The down-idle still of an item, for every editor and overlay that shows one picture of it.
27
+ router.get(
28
+ `/idle-preview/:itemKey`,
29
+ async (req, res) => await AtlasSpriteSheetController.idlePreview(req, res, options),
30
+ );
26
31
  // Metadata endpoints: returns itemKey, atlasWidth, atlasHeight, cellPixelDim, frames (no fileId).
27
32
  // Client fetches /metadata/:itemKey once, caches it, then fetches /blob/:itemKey for the PNG.
28
33
  router.get(