cyberia 3.2.5 → 3.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/engine-cyberia.cd.yml +2 -2
- package/.github/workflows/release.cd.yml +1 -2
- package/CHANGELOG.md +351 -1
- package/CLI-HELP.md +40 -13
- package/Dockerfile +0 -4
- package/README.md +242 -497
- package/bin/build.js +19 -5
- package/bin/cyberia.js +1149 -240
- package/bin/deploy.js +570 -1
- package/bin/file.js +6 -0
- package/bin/index.js +1149 -240
- package/bin/vs.js +1 -1
- package/conf.js +67 -89
- package/deployment.yaml +4 -222
- package/hardhat/package-lock.json +32 -32
- package/hardhat/package.json +3 -3
- package/jsconfig.json +1 -1
- package/manifests/cronjobs/dd-cron/dd-cron-backup.yaml +2 -2
- package/manifests/cronjobs/dd-cron/dd-cron-dns.yaml +2 -2
- package/manifests/deployment/dd-cyberia-development/deployment.yaml +4 -222
- package/manifests/deployment/dd-cyberia-development/proxy.yaml +10 -118
- package/manifests/deployment/dd-default-development/deployment.yaml +2 -6
- package/manifests/deployment/dd-test-development/deployment.yaml +136 -66
- package/manifests/deployment/dd-test-development/proxy.yaml +41 -5
- package/package.json +23 -14
- package/proxy.yaml +10 -118
- package/scripts/k3s-node-setup.sh +2 -2
- package/scripts/nat-iptables.sh +103 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.controller.js +18 -18
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.model.js +7 -14
- package/src/api/atlas-sprite-sheet/atlas-sprite-sheet.service.js +76 -21
- package/src/api/core/core.controller.js +10 -10
- package/src/api/core/core.service.js +10 -10
- package/src/api/crypto/crypto.controller.js +8 -8
- package/src/api/crypto/crypto.service.js +8 -8
- package/src/api/cyberia-action/cyberia-action.controller.js +74 -0
- package/src/api/cyberia-action/cyberia-action.model.js +87 -0
- package/src/api/cyberia-action/cyberia-action.router.js +27 -0
- package/src/api/cyberia-action/cyberia-action.service.js +42 -0
- package/src/api/cyberia-dialogue/cyberia-dialogue.controller.js +13 -13
- package/src/api/cyberia-dialogue/cyberia-dialogue.model.js +11 -11
- package/src/api/cyberia-dialogue/cyberia-dialogue.router.js +2 -2
- package/src/api/cyberia-dialogue/cyberia-dialogue.service.js +16 -16
- package/src/api/cyberia-entity/cyberia-entity.controller.js +10 -10
- package/src/api/cyberia-entity/cyberia-entity.service.js +10 -10
- package/src/api/cyberia-instance/cyberia-fallback-world.js +19 -209
- package/src/api/cyberia-instance/cyberia-instance.controller.js +14 -14
- package/src/api/cyberia-instance/cyberia-instance.model.js +3 -0
- package/src/api/cyberia-instance/cyberia-instance.service.js +22 -57
- package/src/api/cyberia-instance/cyberia-portal-connector.js +20 -246
- package/src/api/cyberia-instance/cyberia-world-generator.js +505 -0
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.controller.js +10 -10
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.defaults.js +216 -55
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.model.js +4 -1
- package/src/api/cyberia-instance-conf/cyberia-instance-conf.service.js +18 -14
- package/src/api/cyberia-map/cyberia-map.controller.js +10 -10
- package/src/api/cyberia-map/cyberia-map.service.js +10 -10
- package/src/api/cyberia-quest/cyberia-quest.controller.js +74 -0
- package/src/api/cyberia-quest/cyberia-quest.model.js +67 -0
- package/src/api/cyberia-quest/cyberia-quest.router.js +27 -0
- package/src/api/cyberia-quest/cyberia-quest.service.js +42 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.controller.js +74 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.model.js +49 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.router.js +27 -0
- package/src/api/cyberia-quest-progress/cyberia-quest-progress.service.js +42 -0
- package/src/api/default/default.controller.js +10 -10
- package/src/api/default/default.service.js +10 -10
- package/src/api/document/document.controller.js +12 -12
- package/src/api/document/document.model.js +10 -16
- package/src/api/file/file.controller.js +8 -8
- package/src/api/file/file.model.js +10 -10
- package/src/api/file/file.service.js +36 -36
- package/src/api/instance/instance.controller.js +10 -10
- package/src/api/instance/instance.model.js +4 -10
- package/src/api/instance/instance.service.js +10 -10
- package/src/api/ipfs/ipfs.controller.js +12 -12
- package/src/api/ipfs/ipfs.model.js +4 -13
- package/src/api/ipfs/ipfs.service.js +14 -28
- package/src/api/object-layer/object-layer.controller.js +12 -12
- package/src/api/object-layer/object-layer.model.js +4 -17
- package/src/api/object-layer/object-layer.service.js +12 -12
- package/src/api/object-layer-render-frames/object-layer-render-frames.controller.js +10 -10
- package/src/api/object-layer-render-frames/object-layer-render-frames.model.js +6 -16
- package/src/api/object-layer-render-frames/object-layer-render-frames.service.js +18 -14
- package/src/api/test/test.controller.js +8 -8
- package/src/api/test/test.service.js +8 -8
- package/src/api/user/guest.service.js +99 -0
- package/src/api/user/user.controller.js +6 -6
- package/src/api/user/user.model.js +8 -13
- package/src/api/user/user.service.js +3 -20
- package/src/cli/cluster.js +61 -14
- package/src/cli/db.js +47 -2
- package/src/cli/deploy.js +67 -35
- package/src/cli/fs.js +79 -8
- package/src/cli/image.js +43 -1
- package/src/cli/index.js +26 -1
- package/src/cli/release.js +57 -1
- package/src/cli/repository.js +69 -31
- package/src/cli/run.js +415 -36
- package/src/cli/ssh.js +1 -1
- package/src/cli/static.js +43 -115
- package/src/client/Cryptokoyn.index.js +18 -21
- package/src/client/CyberiaPortal.index.js +19 -23
- package/src/client/Default.index.js +21 -33
- package/src/client/Itemledger.index.js +20 -26
- package/src/client/Underpost.index.js +19 -23
- package/src/client/components/core/404.js +4 -4
- package/src/client/components/core/500.js +4 -4
- package/src/client/components/core/Account.js +73 -60
- package/src/client/components/core/AgGrid.js +23 -33
- package/src/client/components/core/Alert.js +12 -13
- package/src/client/components/core/AppStore.js +1 -1
- package/src/client/components/core/Auth.js +35 -37
- package/src/client/components/core/Badge.js +7 -13
- package/src/client/components/core/BtnIcon.js +15 -17
- package/src/client/components/core/CalendarCore.js +42 -63
- package/src/client/components/core/Chat.js +13 -15
- package/src/client/components/core/ClientEvents.js +87 -0
- package/src/client/components/core/ColorPaletteElement.js +309 -0
- package/src/client/components/core/Content.js +17 -14
- package/src/client/components/core/Css.js +15 -71
- package/src/client/components/core/CssCore.js +12 -16
- package/src/client/components/core/D3Chart.js +4 -4
- package/src/client/components/core/Docs.js +64 -91
- package/src/client/components/core/DropDown.js +69 -91
- package/src/client/components/core/EventBus.js +92 -0
- package/src/client/components/core/EventsUI.js +14 -17
- package/src/client/components/core/FileExplorer.js +96 -228
- package/src/client/components/core/FullScreen.js +47 -75
- package/src/client/components/core/Input.js +24 -69
- package/src/client/components/core/Keyboard.js +25 -18
- package/src/client/components/core/KeyboardAvoidance.js +145 -0
- package/src/client/components/core/LoadingAnimation.js +25 -31
- package/src/client/components/core/LogIn.js +41 -41
- package/src/client/components/core/LogOut.js +23 -14
- package/src/client/components/core/Modal.js +462 -178
- package/src/client/components/core/NotificationManager.js +14 -18
- package/src/client/components/core/Panel.js +54 -50
- package/src/client/components/core/PanelForm.js +25 -125
- package/src/client/components/core/Polyhedron.js +110 -214
- package/src/client/components/core/PublicProfile.js +39 -32
- package/src/client/components/core/Recover.js +48 -44
- package/src/client/components/core/Responsive.js +88 -32
- package/src/client/components/core/RichText.js +9 -18
- package/src/client/components/core/Router.js +24 -3
- package/src/client/components/core/SearchBox.js +37 -37
- package/src/client/components/core/SignUp.js +39 -30
- package/src/client/components/core/SocketIo.js +31 -2
- package/src/client/components/core/SocketIoHandler.js +6 -6
- package/src/client/components/core/ToggleSwitch.js +8 -20
- package/src/client/components/core/ToolTip.js +5 -17
- package/src/client/components/core/Translate.js +56 -59
- package/src/client/components/core/Validator.js +26 -16
- package/src/client/components/core/Wallet.js +15 -26
- package/src/client/components/core/Worker.js +163 -27
- package/src/client/components/core/windowGetDimensions.js +7 -7
- package/src/client/components/cryptokoyn/{MenuCryptokoyn.js → AppShellCryptokoyn.js} +57 -57
- package/src/client/components/cryptokoyn/CssCryptokoyn.js +15 -15
- package/src/client/components/cryptokoyn/LogInCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/LogOutCryptokoyn.js +6 -4
- package/src/client/components/cryptokoyn/RouterCryptokoyn.js +37 -0
- package/src/client/components/cryptokoyn/SettingsCryptokoyn.js +4 -4
- package/src/client/components/cryptokoyn/SignUpCryptokoyn.js +6 -4
- package/src/client/components/cyberia/InstanceEngineCyberia.js +141 -60
- package/src/client/components/cyberia/MapEngineCyberia.js +691 -214
- package/src/client/components/cyberia/ObjectLayerEngine.js +19 -0
- package/src/client/components/cyberia/ObjectLayerEngineModal.js +1204 -94
- package/src/client/components/cyberia/ObjectLayerEngineViewer.js +196 -298
- package/src/client/components/cyberia-portal/{MenuCyberiaPortal.js → AppShellCyberiaPortal.js} +102 -102
- package/src/client/components/cyberia-portal/CommonCyberiaPortal.js +305 -61
- package/src/client/components/cyberia-portal/CssCyberiaPortal.js +15 -15
- package/src/client/components/cyberia-portal/LogInCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/LogOutCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/MainBodyCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/RouterCyberiaPortal.js +60 -0
- package/src/client/components/cyberia-portal/SettingsCyberiaPortal.js +4 -4
- package/src/client/components/cyberia-portal/SignUpCyberiaPortal.js +6 -4
- package/src/client/components/cyberia-portal/TranslateCyberiaPortal.js +4 -4
- package/src/client/components/default/{MenuDefault.js → AppShellDefault.js} +87 -87
- package/src/client/components/default/CssDefault.js +12 -12
- package/src/client/components/default/LogInDefault.js +6 -4
- package/src/client/components/default/LogOutDefault.js +6 -4
- package/src/client/components/default/RouterDefault.js +47 -0
- package/src/client/components/default/SettingsDefault.js +4 -4
- package/src/client/components/default/SignUpDefault.js +6 -4
- package/src/client/components/default/TranslateDefault.js +3 -3
- package/src/client/components/itemledger/{MenuItemledger.js → AppShellItemledger.js} +57 -57
- package/src/client/components/itemledger/CssItemledger.js +15 -15
- package/src/client/components/itemledger/LogInItemledger.js +6 -4
- package/src/client/components/itemledger/LogOutItemledger.js +6 -4
- package/src/client/components/itemledger/RouterItemledger.js +38 -0
- package/src/client/components/itemledger/SettingsItemledger.js +4 -4
- package/src/client/components/itemledger/SignUpItemledger.js +6 -4
- package/src/client/components/itemledger/TranslateItemledger.js +3 -3
- package/src/client/components/underpost/{MenuUnderpost.js → AppShellUnderpost.js} +88 -88
- package/src/client/components/underpost/CssUnderpost.js +14 -14
- package/src/client/components/underpost/CyberpunkBloggerUnderpost.js +4 -4
- package/src/client/components/underpost/DocumentSearchProvider.js +1 -1
- package/src/client/components/underpost/LabGalleryUnderpost.js +12 -15
- package/src/client/components/underpost/LogInUnderpost.js +6 -4
- package/src/client/components/underpost/LogOutUnderpost.js +6 -4
- package/src/client/components/underpost/RouterUnderpost.js +45 -0
- package/src/client/components/underpost/SettingsUnderpost.js +4 -4
- package/src/client/components/underpost/SignUpUnderpost.js +6 -4
- package/src/client/components/underpost/TranslateUnderpost.js +4 -4
- package/src/client/public/cyberia-docs/ACTION-SYSTEM.md +235 -0
- package/src/client/public/cyberia-docs/ARCHITECTURE.md +443 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLI.md +417 -0
- package/src/client/public/cyberia-docs/CYBERIA-CLIENT.md +313 -0
- package/src/client/public/cyberia-docs/CYBERIA-SERVER.md +260 -0
- package/src/client/public/cyberia-docs/ENTITY-PROFILE.md +241 -0
- package/src/client/public/cyberia-docs/HARDHAT-MODULE.md +300 -0
- package/src/client/public/cyberia-docs/OFF-CHAIN-ECONOMY.md +279 -0
- package/src/client/public/cyberia-docs/QUEST-SYSTEM.md +206 -0
- package/src/client/public/cyberia-docs/ROADMAP.md +240 -0
- package/src/client/public/cyberia-docs/WHITE-PAPER.md +732 -0
- package/src/client/services/atlas-sprite-sheet/atlas-sprite-sheet.service.js +14 -20
- package/src/client/services/core/core.service.js +17 -49
- package/src/client/services/crypto/crypto.service.js +8 -13
- package/src/client/services/cyberia-action/cyberia-action.service.js +99 -0
- package/src/client/services/cyberia-dialogue/cyberia-dialogue.service.js +10 -16
- package/src/client/services/cyberia-entity/cyberia-entity.management.js +5 -5
- package/src/client/services/cyberia-entity/cyberia-entity.service.js +10 -16
- package/src/client/services/cyberia-instance/cyberia-instance.management.js +6 -6
- package/src/client/services/cyberia-instance/cyberia-instance.service.js +12 -18
- package/src/client/services/cyberia-instance-conf/cyberia-instance-conf.service.js +10 -16
- package/src/client/services/cyberia-map/cyberia-map.management.js +6 -6
- package/src/client/services/cyberia-map/cyberia-map.service.js +12 -18
- package/src/client/services/cyberia-quest/cyberia-quest.service.js +99 -0
- package/src/client/services/cyberia-quest-progress/cyberia-quest-progress.service.js +99 -0
- package/src/client/services/default/default.management.js +159 -267
- package/src/client/services/default/default.service.js +10 -16
- package/src/client/services/document/document.service.js +14 -19
- package/src/client/services/file/file.service.js +8 -13
- package/src/client/services/instance/instance.management.js +5 -5
- package/src/client/services/instance/instance.service.js +10 -15
- package/src/client/services/ipfs/ipfs.service.js +12 -18
- package/src/client/services/object-layer/object-layer.management.js +12 -12
- package/src/client/services/object-layer/object-layer.service.js +20 -26
- package/src/client/services/object-layer-render-frames/object-layer-render-frames.service.js +10 -16
- package/src/client/services/test/test.service.js +8 -13
- package/src/client/services/user/guest.service.js +86 -0
- package/src/client/services/user/user.management.js +5 -5
- package/src/client/services/user/user.service.js +14 -20
- package/src/client/ssr/body/404.js +3 -3
- package/src/client/ssr/body/500.js +3 -3
- package/src/client/ssr/body/CacheControl.js +5 -2
- package/src/client/ssr/body/DefaultSplashScreen.js +19 -12
- package/src/client/ssr/body/UnderpostDefaultSplashScreen.js +13 -6
- package/src/client/ssr/head/PwaItemledger.js +197 -60
- package/src/client/ssr/mailer/DefaultRecoverEmail.js +19 -20
- package/src/client/ssr/mailer/DefaultVerifyEmail.js +15 -16
- package/src/client/ssr/offline/Maintenance.js +12 -11
- package/src/client/ssr/offline/NoNetworkConnection.js +3 -3
- package/src/client/ssr/pages/Test.js +2 -2
- package/src/client/sw/core.sw.js +212 -0
- package/src/grpc/cyberia/grpc-server.js +179 -67
- package/src/index.js +1 -1
- package/src/runtime/cyberia-client/Dockerfile +80 -0
- package/src/runtime/cyberia-server/Dockerfile +37 -0
- package/src/runtime/express/Dockerfile +4 -4
- package/src/runtime/lampp/Dockerfile +8 -7
- package/src/runtime/wp/Dockerfile +11 -17
- package/src/server/atlas-sprite-sheet-generator.js +4 -2
- package/src/server/client-build-docs.js +45 -46
- package/src/server/client-build.js +334 -60
- package/src/server/client-formatted.js +47 -16
- package/src/server/conf.js +5 -4
- package/src/server/data-query.js +32 -20
- package/src/server/dns.js +22 -0
- package/src/server/ipfs-client.js +232 -91
- package/src/server/object-layer.js +1 -6
- package/src/server/process.js +13 -27
- package/src/server/semantic-layer-generator-floor.js +11 -51
- package/src/server/semantic-layer-generator-resource.js +259 -0
- package/src/server/semantic-layer-generator-skin.js +41 -171
- package/src/server/semantic-layer-generator.js +122 -14
- package/src/server/shape-generator.js +108 -0
- package/src/server/start.js +17 -3
- package/src/server/valkey.js +141 -235
- package/tsconfig.docs.json +15 -0
- package/typedoc.dd-cyberia.json +29 -0
- package/typedoc.json +29 -0
- package/WHITE-PAPER.md +0 -1540
- package/hardhat/README.md +0 -531
- package/hardhat/WHITE-PAPER.md +0 -1540
- package/jsdoc.dd-cyberia.json +0 -68
- package/jsdoc.json +0 -68
- package/src/api/object-layer/README.md +0 -672
- package/src/client/components/core/ColorPalette.js +0 -5267
- package/src/client/components/core/JoyStick.js +0 -80
- package/src/client/components/cryptokoyn/RoutesCryptokoyn.js +0 -39
- package/src/client/components/cyberia-portal/RoutesCyberiaPortal.js +0 -62
- package/src/client/components/cyberia-portal/ServerCyberiaPortal.js +0 -136
- package/src/client/components/default/RoutesDefault.js +0 -49
- package/src/client/components/itemledger/RoutesItemledger.js +0 -40
- package/src/client/components/underpost/RoutesUnderpost.js +0 -47
- package/src/client/sw/default.sw.js +0 -127
- package/src/client/sw/template.sw.js +0 -84
- package/src/grpc/cyberia/OFF_CHAIN_ECONOMY.md +0 -305
- package/src/grpc/cyberia/README.md +0 -326
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
* @module src/api/object-layer/object-layer.model.js
|
|
4
4
|
* @namespace CyberiaObjectLayerModel
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { Schema, model } from 'mongoose';
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* @typedef {Object} Stats
|
|
11
9
|
* @property {number} effect - The effect attribute value
|
|
@@ -27,7 +25,6 @@ const StatsSchema = new Schema(
|
|
|
27
25
|
},
|
|
28
26
|
{ _id: false },
|
|
29
27
|
);
|
|
30
|
-
|
|
31
28
|
/**
|
|
32
29
|
* @typedef {Object} Item
|
|
33
30
|
* @property {string} id - Unique identifier for the item
|
|
@@ -45,7 +42,6 @@ const ItemSchema = new Schema(
|
|
|
45
42
|
},
|
|
46
43
|
{ _id: false },
|
|
47
44
|
);
|
|
48
|
-
|
|
49
45
|
/**
|
|
50
46
|
* @typedef {Object} Ledger
|
|
51
47
|
* Blockchain protocol metadata linking the visual object-layer prefab to its economic reality.
|
|
@@ -68,7 +64,6 @@ const LedgerSchema = new Schema(
|
|
|
68
64
|
},
|
|
69
65
|
{ _id: false },
|
|
70
66
|
);
|
|
71
|
-
|
|
72
67
|
/**
|
|
73
68
|
* @typedef {Object} Render
|
|
74
69
|
* IPFS content identifiers for the consolidated atlas sprite sheet.
|
|
@@ -83,7 +78,6 @@ const RenderSchema = new Schema(
|
|
|
83
78
|
},
|
|
84
79
|
{ _id: false },
|
|
85
80
|
);
|
|
86
|
-
|
|
87
81
|
/**
|
|
88
82
|
* @typedef {Object} ObjectLayer
|
|
89
83
|
* @property {Object} data - Object layer data
|
|
@@ -138,11 +132,9 @@ const ObjectLayerSchema = new Schema(
|
|
|
138
132
|
toObject: { virtuals: true },
|
|
139
133
|
},
|
|
140
134
|
);
|
|
141
|
-
|
|
142
135
|
// Index for faster querying
|
|
143
136
|
ObjectLayerSchema.index({ 'data.item.id': 1 });
|
|
144
137
|
ObjectLayerSchema.index({ 'data.item.type': 1 });
|
|
145
|
-
|
|
146
138
|
// Add text index for searchable fields
|
|
147
139
|
ObjectLayerSchema.index(
|
|
148
140
|
{
|
|
@@ -158,7 +150,6 @@ ObjectLayerSchema.index(
|
|
|
158
150
|
},
|
|
159
151
|
},
|
|
160
152
|
);
|
|
161
|
-
|
|
162
153
|
// Pre-save hook to ensure data consistency
|
|
163
154
|
ObjectLayerSchema.pre('save', function () {
|
|
164
155
|
// Ensure all required fields are present
|
|
@@ -167,14 +158,11 @@ ObjectLayerSchema.pre('save', function () {
|
|
|
167
158
|
}
|
|
168
159
|
// cid (object layer data JSON) and data.render.cid (atlas PNG) are optional – default to ''
|
|
169
160
|
});
|
|
170
|
-
|
|
171
161
|
// Create and export the model
|
|
172
162
|
const ObjectLayerModel = model('ObjectLayer', ObjectLayerSchema);
|
|
173
|
-
|
|
174
163
|
const ProviderSchema = ObjectLayerSchema;
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
select: {
|
|
164
|
+
class ObjectLayerDto {
|
|
165
|
+
static select = {
|
|
178
166
|
get: () => {
|
|
179
167
|
return {
|
|
180
168
|
_id: 1,
|
|
@@ -207,7 +195,6 @@ const ObjectLayerDto = {
|
|
|
207
195
|
objectLayerRenderFramesId: 1,
|
|
208
196
|
};
|
|
209
197
|
},
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
|
|
198
|
+
};
|
|
199
|
+
}
|
|
213
200
|
export { ObjectLayerSchema, ObjectLayerModel, ProviderSchema, ObjectLayerDto };
|
|
@@ -36,7 +36,7 @@ const logger = loggerFactory(import.meta);
|
|
|
36
36
|
* @namespace CyberiaObjectLayerService.ObjectLayerService
|
|
37
37
|
* @memberof CyberiaObjectLayerService
|
|
38
38
|
*/
|
|
39
|
-
|
|
39
|
+
class ObjectLayerService {
|
|
40
40
|
/**
|
|
41
41
|
* POST handler for creating object layers and uploading frame images.
|
|
42
42
|
*
|
|
@@ -59,7 +59,7 @@ const ObjectLayerService = {
|
|
|
59
59
|
* @returns {Promise<Object>} The created object layer document or frame upload result.
|
|
60
60
|
* @throws {Error} If file validation fails or required parameters are missing.
|
|
61
61
|
*/
|
|
62
|
-
post
|
|
62
|
+
static post = async (req, res, options) => {
|
|
63
63
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
64
64
|
|
|
65
65
|
if (req.path.startsWith('/frame-image')) {
|
|
@@ -245,7 +245,7 @@ const ObjectLayerService = {
|
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
return newObjectLayer;
|
|
248
|
-
}
|
|
248
|
+
};
|
|
249
249
|
|
|
250
250
|
/**
|
|
251
251
|
* GET handler for retrieving object layers.
|
|
@@ -268,7 +268,7 @@ const ObjectLayerService = {
|
|
|
268
268
|
* @returns {Promise<Object>} The requested object layer data, list, or frame counts.
|
|
269
269
|
* @throws {Error} If the requested object layer is not found.
|
|
270
270
|
*/
|
|
271
|
-
get
|
|
271
|
+
static get = async (req, res, options) => {
|
|
272
272
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
273
273
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
274
274
|
|
|
@@ -432,7 +432,7 @@ const ObjectLayerService = {
|
|
|
432
432
|
ObjectLayer.countDocuments(query), // { userId: req.auth.user._id }
|
|
433
433
|
]);
|
|
434
434
|
return { data, total, page, totalPages: Math.ceil(total / limit) };
|
|
435
|
-
}
|
|
435
|
+
};
|
|
436
436
|
|
|
437
437
|
/**
|
|
438
438
|
* Generates a WebP animation from PNG frame images for a specific direction of an object layer.
|
|
@@ -449,7 +449,7 @@ const ObjectLayerService = {
|
|
|
449
449
|
* @returns {Promise<Buffer>} The generated WebP animation as a Buffer.
|
|
450
450
|
* @throws {Error} If required parameters are missing, frames directory is not found, or img2webp fails.
|
|
451
451
|
*/
|
|
452
|
-
generateWebp
|
|
452
|
+
static generateWebp = async (req, res, options) => {
|
|
453
453
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
454
454
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
455
455
|
|
|
@@ -560,7 +560,7 @@ const ObjectLayerService = {
|
|
|
560
560
|
|
|
561
561
|
throw error;
|
|
562
562
|
}
|
|
563
|
-
}
|
|
563
|
+
};
|
|
564
564
|
|
|
565
565
|
/**
|
|
566
566
|
* PUT handler for updating object layers, their frame images, and metadata.
|
|
@@ -584,7 +584,7 @@ const ObjectLayerService = {
|
|
|
584
584
|
* @returns {Promise<Object>} The updated object layer document or frame upload result.
|
|
585
585
|
* @throws {Error} If file validation fails, object layer is not found, or required parameters are missing.
|
|
586
586
|
*/
|
|
587
|
-
put
|
|
587
|
+
static put = async (req, res, options) => {
|
|
588
588
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
589
589
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
590
590
|
|
|
@@ -775,7 +775,7 @@ const ObjectLayerService = {
|
|
|
775
775
|
}).populate('objectLayerRenderFramesId');
|
|
776
776
|
|
|
777
777
|
return updatedObjectLayer;
|
|
778
|
-
}
|
|
778
|
+
};
|
|
779
779
|
|
|
780
780
|
/**
|
|
781
781
|
* DELETE handler for removing object layers and all associated resources.
|
|
@@ -801,7 +801,7 @@ const ObjectLayerService = {
|
|
|
801
801
|
* @returns {Promise<Object>} The deleted object layer document or bulk delete count.
|
|
802
802
|
* @throws {Error} If the object layer is not found.
|
|
803
803
|
*/
|
|
804
|
-
delete
|
|
804
|
+
static delete = async (req, res, options) => {
|
|
805
805
|
/** @type {import('./object-layer.model.js').ObjectLayerModel} */
|
|
806
806
|
const ObjectLayer = DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayer;
|
|
807
807
|
const ObjectLayerRenderFrames =
|
|
@@ -890,7 +890,7 @@ const ObjectLayerService = {
|
|
|
890
890
|
}
|
|
891
891
|
return { deletedCount: allObjectLayers.length };
|
|
892
892
|
}
|
|
893
|
-
}
|
|
894
|
-
}
|
|
893
|
+
};
|
|
894
|
+
}
|
|
895
895
|
|
|
896
896
|
export { ObjectLayerService };
|
|
@@ -3,8 +3,8 @@ import { ObjectLayerRenderFramesService } from './object-layer-render-frames.ser
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class ObjectLayerRenderFramesController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
const result = await ObjectLayerRenderFramesService.post(req, res, options);
|
|
10
10
|
return res.status(200).json({
|
|
@@ -18,8 +18,8 @@ const ObjectLayerRenderFramesController = {
|
|
|
18
18
|
message: error.message,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
22
|
-
get
|
|
21
|
+
};
|
|
22
|
+
static get = async (req, res, options) => {
|
|
23
23
|
try {
|
|
24
24
|
const { page, limit } = req.query;
|
|
25
25
|
const result = await ObjectLayerRenderFramesService.get(
|
|
@@ -38,8 +38,8 @@ const ObjectLayerRenderFramesController = {
|
|
|
38
38
|
message: error.message,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
|
-
}
|
|
42
|
-
put
|
|
41
|
+
};
|
|
42
|
+
static put = async (req, res, options) => {
|
|
43
43
|
try {
|
|
44
44
|
const result = await ObjectLayerRenderFramesService.put(req, res, options);
|
|
45
45
|
return res.status(200).json({
|
|
@@ -53,8 +53,8 @@ const ObjectLayerRenderFramesController = {
|
|
|
53
53
|
message: error.message,
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
}
|
|
57
|
-
delete
|
|
56
|
+
};
|
|
57
|
+
static delete = async (req, res, options) => {
|
|
58
58
|
try {
|
|
59
59
|
const result = await ObjectLayerRenderFramesService.delete(req, res, options);
|
|
60
60
|
return res.status(200).json({
|
|
@@ -68,7 +68,7 @@ const ObjectLayerRenderFramesController = {
|
|
|
68
68
|
message: error.message,
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
73
|
|
|
74
74
|
export { ObjectLayerRenderFramesController };
|
|
@@ -3,9 +3,7 @@
|
|
|
3
3
|
* @module src/api/object-layer-render-frames/object-layer-render-frames.model.js
|
|
4
4
|
* @namespace CyberiaObjectLayerRenderFramesModel
|
|
5
5
|
*/
|
|
6
|
-
|
|
7
6
|
import { Schema, model } from 'mongoose';
|
|
8
|
-
|
|
9
7
|
/**
|
|
10
8
|
* @typedef {Object} ObjectLayerRenderFramesDirections
|
|
11
9
|
* @property {number[][][]} up_idle - Up idle animation frames
|
|
@@ -51,13 +49,11 @@ const ObjectLayerRenderFramesDirectionsSchema = new Schema(
|
|
|
51
49
|
},
|
|
52
50
|
{ _id: false },
|
|
53
51
|
);
|
|
54
|
-
|
|
55
52
|
/**
|
|
56
53
|
* @typedef {Object} ObjectLayerRenderFrames
|
|
57
54
|
* @property {RenderFrames} frames - Animation frames for different states
|
|
58
55
|
* @property {number[][]} colors - Color palette for rendering
|
|
59
56
|
* @property {number} frame_duration - Duration of each frame in milliseconds
|
|
60
|
-
* @property {boolean} is_stateless - Whether the render is stateless
|
|
61
57
|
* @property {Date} createdAt - When the document was created
|
|
62
58
|
* @property {Date} updatedAt - When the document was last updated
|
|
63
59
|
* @memberof CyberiaObjectLayerRenderFramesModel
|
|
@@ -67,7 +63,6 @@ const ObjectLayerRenderFramesSchema = new Schema(
|
|
|
67
63
|
frames: { type: ObjectLayerRenderFramesDirectionsSchema, required: true },
|
|
68
64
|
colors: { type: [[Number]], required: true },
|
|
69
65
|
frame_duration: { type: Number, required: true, min: 0 },
|
|
70
|
-
is_stateless: { type: Boolean, default: false },
|
|
71
66
|
},
|
|
72
67
|
{
|
|
73
68
|
timestamps: true,
|
|
@@ -75,7 +70,6 @@ const ObjectLayerRenderFramesSchema = new Schema(
|
|
|
75
70
|
toObject: { virtuals: true },
|
|
76
71
|
},
|
|
77
72
|
);
|
|
78
|
-
|
|
79
73
|
// Pre-save hook to ensure data consistency
|
|
80
74
|
ObjectLayerRenderFramesSchema.pre('save', function () {
|
|
81
75
|
// Ensure all required fields are present
|
|
@@ -83,21 +77,17 @@ ObjectLayerRenderFramesSchema.pre('save', function () {
|
|
|
83
77
|
throw new Error('Missing required fields: frames, colors, or frame_duration');
|
|
84
78
|
}
|
|
85
79
|
});
|
|
86
|
-
|
|
87
80
|
// Create and export the model
|
|
88
81
|
const ObjectLayerRenderFramesModel = model('ObjectLayerRenderFrames', ObjectLayerRenderFramesSchema);
|
|
89
|
-
|
|
90
82
|
const ProviderSchema = ObjectLayerRenderFramesSchema;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
select: {
|
|
83
|
+
class ObjectLayerRenderFramesDto {
|
|
84
|
+
static select = {
|
|
94
85
|
get: () => {
|
|
95
|
-
return { _id: 1, frame_duration: 1
|
|
86
|
+
return { _id: 1, frame_duration: 1 };
|
|
96
87
|
},
|
|
97
88
|
getFull: () => {
|
|
98
|
-
return { _id: 1, frames: 1, colors: 1, frame_duration: 1
|
|
89
|
+
return { _id: 1, frames: 1, colors: 1, frame_duration: 1 };
|
|
99
90
|
},
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
91
|
+
};
|
|
92
|
+
}
|
|
103
93
|
export { ObjectLayerRenderFramesSchema, ObjectLayerRenderFramesModel, ProviderSchema, ObjectLayerRenderFramesDto };
|
|
@@ -4,15 +4,17 @@ import { DataQuery } from '../../server/data-query.js';
|
|
|
4
4
|
|
|
5
5
|
const logger = loggerFactory(import.meta);
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
post
|
|
7
|
+
class ObjectLayerRenderFramesService {
|
|
8
|
+
static post = async (req, res, options) => {
|
|
9
9
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
10
|
-
const ObjectLayerRenderFrames =
|
|
10
|
+
const ObjectLayerRenderFrames =
|
|
11
|
+
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayerRenderFrames;
|
|
11
12
|
return await new ObjectLayerRenderFrames(req.body).save();
|
|
12
|
-
}
|
|
13
|
-
get
|
|
13
|
+
};
|
|
14
|
+
static get = async (req, res, options) => {
|
|
14
15
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
15
|
-
const ObjectLayerRenderFrames =
|
|
16
|
+
const ObjectLayerRenderFrames =
|
|
17
|
+
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayerRenderFrames;
|
|
16
18
|
if (req.params.id) return await ObjectLayerRenderFrames.findById(req.params.id);
|
|
17
19
|
|
|
18
20
|
// Parse query parameters using DataQuery helper
|
|
@@ -25,18 +27,20 @@ const ObjectLayerRenderFramesService = {
|
|
|
25
27
|
|
|
26
28
|
const totalPages = Math.ceil(total / limit);
|
|
27
29
|
return { data, total, page, totalPages };
|
|
28
|
-
}
|
|
29
|
-
put
|
|
30
|
+
};
|
|
31
|
+
static put = async (req, res, options) => {
|
|
30
32
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
31
|
-
const ObjectLayerRenderFrames =
|
|
33
|
+
const ObjectLayerRenderFrames =
|
|
34
|
+
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayerRenderFrames;
|
|
32
35
|
return await ObjectLayerRenderFrames.findByIdAndUpdate(req.params.id, req.body);
|
|
33
|
-
}
|
|
34
|
-
delete
|
|
36
|
+
};
|
|
37
|
+
static delete = async (req, res, options) => {
|
|
35
38
|
/** @type {import('./object-layer-render-frames.model.js').ObjectLayerRenderFramesModel} */
|
|
36
|
-
const ObjectLayerRenderFrames =
|
|
39
|
+
const ObjectLayerRenderFrames =
|
|
40
|
+
DataBaseProvider.instance[`${options.host}${options.path}`].mongoose.models.ObjectLayerRenderFrames;
|
|
37
41
|
if (req.params.id) return await ObjectLayerRenderFrames.findByIdAndDelete(req.params.id);
|
|
38
42
|
else return await ObjectLayerRenderFrames.deleteMany();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
41
45
|
|
|
42
46
|
export { ObjectLayerRenderFramesService };
|
|
@@ -3,8 +3,8 @@ import { TestService } from './test.service.js';
|
|
|
3
3
|
|
|
4
4
|
const logger = loggerFactory(import.meta);
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
post
|
|
6
|
+
class TestController {
|
|
7
|
+
static post = async (req, res, options) => {
|
|
8
8
|
try {
|
|
9
9
|
return res.status(200).json({
|
|
10
10
|
status: 'success',
|
|
@@ -17,8 +17,8 @@ const TestController = {
|
|
|
17
17
|
message: error.message,
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
}
|
|
21
|
-
get
|
|
20
|
+
};
|
|
21
|
+
static get = async (req, res, options) => {
|
|
22
22
|
try {
|
|
23
23
|
const result = await TestService.get(req, res, options);
|
|
24
24
|
if (result)
|
|
@@ -37,8 +37,8 @@ const TestController = {
|
|
|
37
37
|
message: error.message,
|
|
38
38
|
});
|
|
39
39
|
}
|
|
40
|
-
}
|
|
41
|
-
delete
|
|
40
|
+
};
|
|
41
|
+
static delete = async (req, res, options) => {
|
|
42
42
|
try {
|
|
43
43
|
const result = await TestService.delete(req, res, options);
|
|
44
44
|
|
|
@@ -53,7 +53,7 @@ const TestController = {
|
|
|
53
53
|
message: error.message,
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
58
|
|
|
59
59
|
export { TestController };
|
|
@@ -5,14 +5,14 @@ import { getYouTubeID, validatePassword } from '../../client/components/core/Com
|
|
|
5
5
|
|
|
6
6
|
const logger = loggerFactory(import.meta);
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
post
|
|
8
|
+
class TestService {
|
|
9
|
+
static post = async (req, res, options) => {
|
|
10
10
|
switch (req.params.id) {
|
|
11
11
|
default:
|
|
12
12
|
break;
|
|
13
13
|
}
|
|
14
|
-
}
|
|
15
|
-
get
|
|
14
|
+
};
|
|
15
|
+
static get = async (req, res, options) => {
|
|
16
16
|
switch (req.params.id) {
|
|
17
17
|
case 'verify-email':
|
|
18
18
|
return validator.isEmail(req.query.email);
|
|
@@ -23,13 +23,13 @@ const TestService = {
|
|
|
23
23
|
|
|
24
24
|
default:
|
|
25
25
|
}
|
|
26
|
-
}
|
|
27
|
-
delete
|
|
26
|
+
};
|
|
27
|
+
static delete = async (req, res, options) => {
|
|
28
28
|
switch (req.params.id) {
|
|
29
29
|
default:
|
|
30
30
|
break;
|
|
31
31
|
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
34
|
|
|
35
35
|
export { TestService };
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import mongoose from 'mongoose';
|
|
2
|
+
import { UserDto } from './user.model.js';
|
|
3
|
+
import { ValkeyAPI } from '../../server/valkey.js';
|
|
4
|
+
import { hashPassword, getBearerToken, jwtSign } from '../../server/auth.js';
|
|
5
|
+
|
|
6
|
+
// ─── TTL ──────────────────────────────────────────────────────────────────────
|
|
7
|
+
|
|
8
|
+
const _guestTtlMs = () => {
|
|
9
|
+
const minutes = Number.parseInt(process.env.REFRESH_EXPIRE_MINUTES || '60', 10);
|
|
10
|
+
return Number.isFinite(minutes) && minutes > 0 ? minutes * 60 * 1000 : 60 * 60 * 1000;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// ─── Domain helpers ───────────────────────────────────────────────────────────
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Constructs a new ephemeral guest user object.
|
|
17
|
+
* This is domain logic specific to the guest lifecycle; it does not belong
|
|
18
|
+
* in the generic Valkey storage module.
|
|
19
|
+
*
|
|
20
|
+
* @param {{ host?: string }} options
|
|
21
|
+
* @returns {object}
|
|
22
|
+
*/
|
|
23
|
+
const buildGuestUser = (options) => {
|
|
24
|
+
const now = new Date().toISOString();
|
|
25
|
+
const _id = new mongoose.Types.ObjectId().toString();
|
|
26
|
+
const role = 'guest';
|
|
27
|
+
return {
|
|
28
|
+
_id: `${role}${_id}`,
|
|
29
|
+
username: `${role}${_id.slice(-5)}`,
|
|
30
|
+
email: `${_id}@${options.host || 'localhost'}`,
|
|
31
|
+
password: hashPassword(process.env.JWT_SECRET),
|
|
32
|
+
role,
|
|
33
|
+
emailConfirmed: false,
|
|
34
|
+
profileImageId: null,
|
|
35
|
+
publicKey: [],
|
|
36
|
+
phoneNumbers: [],
|
|
37
|
+
activeSessions: [],
|
|
38
|
+
failedLoginAttempts: 0,
|
|
39
|
+
recoverTimeOut: null,
|
|
40
|
+
lastLoginDate: null,
|
|
41
|
+
createdAt: now,
|
|
42
|
+
updatedAt: now,
|
|
43
|
+
guestSessionExpiresAt: Date.now() + _guestTtlMs(),
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Projects a user object to the public-safe fields defined by UserDto.select.get().
|
|
49
|
+
* Keeps this logic next to the guest domain instead of in a generic utility.
|
|
50
|
+
*
|
|
51
|
+
* @param {object} user
|
|
52
|
+
* @returns {object}
|
|
53
|
+
*/
|
|
54
|
+
const _toPublicUser = (user) => {
|
|
55
|
+
const select = UserDto.select.get();
|
|
56
|
+
return Object.fromEntries(
|
|
57
|
+
Object.keys(select)
|
|
58
|
+
.filter((k) => select[k] === 1 && k in user)
|
|
59
|
+
.map((k) => [k, user[k]]),
|
|
60
|
+
);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const _withRefreshedExpiry = (user) => ({ ...user, guestSessionExpiresAt: Date.now() + _guestTtlMs() });
|
|
64
|
+
|
|
65
|
+
// ─── Service ──────────────────────────────────────────────────────────────────
|
|
66
|
+
|
|
67
|
+
class GuestService {
|
|
68
|
+
static async create(req, options) {
|
|
69
|
+
const user = buildGuestUser(options);
|
|
70
|
+
|
|
71
|
+
await ValkeyAPI.set(options, user.email, user, _guestTtlMs());
|
|
72
|
+
|
|
73
|
+
return {
|
|
74
|
+
token: jwtSign(
|
|
75
|
+
UserDto.auth.payload(user, null, req.ip, req.headers['user-agent'], options.host, options.path),
|
|
76
|
+
options,
|
|
77
|
+
),
|
|
78
|
+
user: _toPublicUser(user),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
static async auth(req, options) {
|
|
83
|
+
const user = await ValkeyAPI.get(options, req.auth.user.email);
|
|
84
|
+
if (!user) throw new Error('guest user expired');
|
|
85
|
+
|
|
86
|
+
const expiresAt = Number(user.guestSessionExpiresAt || 0);
|
|
87
|
+
if (expiresAt && expiresAt <= Date.now()) throw new Error('guest user expired');
|
|
88
|
+
|
|
89
|
+
const refreshed = _withRefreshedExpiry(user);
|
|
90
|
+
await ValkeyAPI.set(options, refreshed.email, refreshed, _guestTtlMs());
|
|
91
|
+
|
|
92
|
+
return {
|
|
93
|
+
user: _toPublicUser(refreshed),
|
|
94
|
+
token: getBearerToken(req),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export { GuestService };
|
|
@@ -25,11 +25,11 @@ const handleRequest = (serviceMethod) => async (req, res, options) => {
|
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
post
|
|
30
|
-
get
|
|
31
|
-
delete
|
|
32
|
-
put
|
|
33
|
-
}
|
|
28
|
+
class UserController {
|
|
29
|
+
static post = handleRequest(UserService.post);
|
|
30
|
+
static get = handleRequest(UserService.get);
|
|
31
|
+
static delete = handleRequest(UserService.delete);
|
|
32
|
+
static put = handleRequest(UserService.put);
|
|
33
|
+
}
|
|
34
34
|
|
|
35
35
|
export { UserController };
|
|
@@ -3,7 +3,6 @@ import validator from 'validator';
|
|
|
3
3
|
import { userRoleEnum } from '../../client/components/core/CommonJs.js';
|
|
4
4
|
import crypto from 'crypto';
|
|
5
5
|
// https://mongoosejs.com/docs/2.7.x/docs/schematypes.html
|
|
6
|
-
|
|
7
6
|
const UserSchema = new Schema(
|
|
8
7
|
{
|
|
9
8
|
email: {
|
|
@@ -88,13 +87,10 @@ const UserSchema = new Schema(
|
|
|
88
87
|
timestamps: true,
|
|
89
88
|
},
|
|
90
89
|
);
|
|
91
|
-
|
|
92
90
|
const UserModel = model('User', UserSchema);
|
|
93
|
-
|
|
94
91
|
const ProviderSchema = UserSchema;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
select: {
|
|
92
|
+
class UserDto {
|
|
93
|
+
static select = {
|
|
98
94
|
get: () => {
|
|
99
95
|
return {
|
|
100
96
|
_id: 1,
|
|
@@ -112,8 +108,8 @@ const UserDto = {
|
|
|
112
108
|
getAll: () => {
|
|
113
109
|
return { _id: 1 };
|
|
114
110
|
},
|
|
115
|
-
}
|
|
116
|
-
public
|
|
111
|
+
};
|
|
112
|
+
static public = {
|
|
117
113
|
get: () => {
|
|
118
114
|
return {
|
|
119
115
|
_id: 1,
|
|
@@ -125,8 +121,8 @@ const UserDto = {
|
|
|
125
121
|
updatedAt: 1,
|
|
126
122
|
};
|
|
127
123
|
},
|
|
128
|
-
}
|
|
129
|
-
auth
|
|
124
|
+
};
|
|
125
|
+
static auth = {
|
|
130
126
|
payload: (user, jwtid, ip, userAgent, host, path) => {
|
|
131
127
|
const tokenPayload = {
|
|
132
128
|
_id: user._id.toString(),
|
|
@@ -141,7 +137,6 @@ const UserDto = {
|
|
|
141
137
|
};
|
|
142
138
|
return tokenPayload;
|
|
143
139
|
},
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
140
|
+
};
|
|
141
|
+
}
|
|
147
142
|
export { UserSchema, UserModel, userRoleEnum, ProviderSchema, UserDto };
|
|
@@ -9,7 +9,6 @@ import {
|
|
|
9
9
|
refreshSessionAndToken,
|
|
10
10
|
logoutSession,
|
|
11
11
|
jwtSign,
|
|
12
|
-
getBearerToken,
|
|
13
12
|
validatePasswordMiddleware,
|
|
14
13
|
} from '../../server/auth.js';
|
|
15
14
|
import { MailerProvider } from '../../mailer/MailerProvider.js';
|
|
@@ -19,8 +18,8 @@ import validator from 'validator';
|
|
|
19
18
|
import { DataBaseProvider } from '../../db/DataBaseProvider.js';
|
|
20
19
|
import { FileFactory, FileCleanup } from '../file/file.service.js';
|
|
21
20
|
import { UserDto } from './user.model.js';
|
|
22
|
-
import { selectDtoFactory, ValkeyAPI } from '../../server/valkey.js';
|
|
23
21
|
import { timer } from '../../client/components/core/CommonJs.js';
|
|
22
|
+
import { GuestService } from './guest.service.js';
|
|
24
23
|
|
|
25
24
|
const logger = loggerFactory(import.meta);
|
|
26
25
|
|
|
@@ -226,15 +225,7 @@ const UserService = {
|
|
|
226
225
|
} else throw new Error('Invalid credentials');
|
|
227
226
|
|
|
228
227
|
case 'guest': {
|
|
229
|
-
|
|
230
|
-
await ValkeyAPI.setValkeyObject(options, user.email, user);
|
|
231
|
-
return {
|
|
232
|
-
token: jwtSign(
|
|
233
|
-
UserDto.auth.payload(user, null, req.ip, req.headers['user-agent'], options.host, options.path),
|
|
234
|
-
options,
|
|
235
|
-
),
|
|
236
|
-
user: selectDtoFactory(user, UserDto.select.get()),
|
|
237
|
-
};
|
|
228
|
+
return await GuestService.create(req, options);
|
|
238
229
|
}
|
|
239
230
|
|
|
240
231
|
default:
|
|
@@ -360,8 +351,7 @@ const UserService = {
|
|
|
360
351
|
case 'auth': {
|
|
361
352
|
let user;
|
|
362
353
|
if (req.auth.user._id.match('guest')) {
|
|
363
|
-
|
|
364
|
-
if (!user) throw new Error('guest user expired');
|
|
354
|
+
return await GuestService.auth(req, options);
|
|
365
355
|
} else
|
|
366
356
|
user = await User.findOne({
|
|
367
357
|
_id: req.auth.user._id,
|
|
@@ -369,13 +359,6 @@ const UserService = {
|
|
|
369
359
|
|
|
370
360
|
if (!user) throw new Error('user not found');
|
|
371
361
|
|
|
372
|
-
const guestUser = await ValkeyAPI.getValkeyObject(options, req.auth.user.email);
|
|
373
|
-
if (guestUser)
|
|
374
|
-
return {
|
|
375
|
-
user: selectDtoFactory(guestUser, UserDto.select.get()),
|
|
376
|
-
token: getBearerToken(req),
|
|
377
|
-
};
|
|
378
|
-
|
|
379
362
|
return {
|
|
380
363
|
token: await refreshSessionAndToken(req, res, User, options),
|
|
381
364
|
user: await User.findOne({
|