@finsemble/finsemble-ui 7.3.0 → 8.0.0-beta.1
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/FEA.d.ts +1307 -0
- package/FEA.d.ts.map +1 -0
- package/FEA.js +11 -0
- package/FEA.js.map +1 -0
- package/README.md +4 -24
- package/clients/Interop/FinsembleDesktopAgent.d.ts +183 -0
- package/clients/Interop/FinsembleDesktopAgent.d.ts.map +1 -0
- package/clients/Interop/FinsembleDesktopAgent.js +813 -0
- package/clients/Interop/FinsembleDesktopAgent.js.map +1 -0
- package/clients/Interop/InteropAdmin.d.ts +30 -0
- package/clients/Interop/InteropAdmin.d.ts.map +1 -0
- package/clients/Interop/InteropAdmin.js +99 -0
- package/clients/Interop/InteropAdmin.js.map +1 -0
- package/clients/Interop/index.d.ts +2 -0
- package/clients/Interop/index.d.ts.map +1 -0
- package/clients/Interop/index.js +3 -0
- package/clients/Interop/index.js.map +1 -0
- package/clients/Interop/types.d.ts +325 -0
- package/clients/Interop/types.d.ts.map +1 -0
- package/clients/Interop/types.js +45 -0
- package/clients/Interop/types.js.map +1 -0
- package/clients/Startup/FSBLDesktop.d.ts +170 -0
- package/clients/Startup/FSBLDesktop.d.ts.map +1 -0
- package/clients/Startup/FSBLDesktop.js +436 -0
- package/clients/Startup/FSBLDesktop.js.map +1 -0
- package/clients/Startup/FSBLFreestanding.d.ts +28 -0
- package/clients/Startup/FSBLFreestanding.d.ts.map +1 -0
- package/clients/Startup/FSBLFreestanding.js +127 -0
- package/clients/Startup/FSBLFreestanding.js.map +1 -0
- package/clients/Startup/FSBLService.d.ts +8 -0
- package/clients/Startup/FSBLService.d.ts.map +1 -0
- package/clients/Startup/FSBLService.js +56 -0
- package/clients/Startup/FSBLService.js.map +1 -0
- package/clients/Startup/RouterConfig.d.ts +37 -0
- package/clients/Startup/RouterConfig.d.ts.map +1 -0
- package/clients/Startup/RouterConfig.js +108 -0
- package/clients/Startup/RouterConfig.js.map +1 -0
- package/clients/Startup/SDDListeners.d.ts +12 -0
- package/clients/Startup/SDDListeners.d.ts.map +1 -0
- package/clients/Startup/SDDListeners.js +98 -0
- package/clients/Startup/SDDListeners.js.map +1 -0
- package/clients/Startup/Startup.d.ts +59 -0
- package/clients/Startup/Startup.d.ts.map +1 -0
- package/clients/Startup/Startup.js +102 -0
- package/clients/Startup/Startup.js.map +1 -0
- package/clients/Startup/index.d.ts +2 -0
- package/clients/Startup/index.d.ts.map +1 -0
- package/clients/Startup/index.js +3 -0
- package/clients/Startup/index.js.map +1 -0
- package/clients/Startup/types.d.ts +60 -0
- package/clients/Startup/types.d.ts.map +1 -0
- package/clients/Startup/types.js +2 -0
- package/clients/Startup/types.js.map +1 -0
- package/clients/Startup/unhandledErrors.d.ts +7 -0
- package/clients/Startup/unhandledErrors.d.ts.map +1 -0
- package/clients/Startup/unhandledErrors.js +74 -0
- package/clients/Startup/unhandledErrors.js.map +1 -0
- package/clients/Startup/windowStartup.d.ts +18 -0
- package/clients/Startup/windowStartup.d.ts.map +1 -0
- package/clients/Startup/windowStartup.js +408 -0
- package/clients/Startup/windowStartup.js.map +1 -0
- package/clients/StoreModel.d.ts +318 -0
- package/clients/StoreModel.d.ts.map +1 -0
- package/clients/StoreModel.js +543 -0
- package/clients/StoreModel.js.map +1 -0
- package/clients/authenticationClient.d.ts +181 -0
- package/clients/authenticationClient.d.ts.map +1 -0
- package/clients/authenticationClient.js +243 -0
- package/clients/authenticationClient.js.map +1 -0
- package/clients/configClient.d.ts +394 -0
- package/clients/configClient.d.ts.map +1 -0
- package/clients/configClient.js +601 -0
- package/clients/configClient.js.map +1 -0
- package/clients/dialogManagerClient.d.ts +251 -0
- package/clients/dialogManagerClient.d.ts.map +1 -0
- package/clients/dialogManagerClient.js +691 -0
- package/clients/dialogManagerClient.js.map +1 -0
- package/clients/distributedStoreClient.d.ts +148 -0
- package/clients/distributedStoreClient.d.ts.map +1 -0
- package/clients/distributedStoreClient.js +250 -0
- package/clients/distributedStoreClient.js.map +1 -0
- package/clients/hotkeyClient.d.ts +114 -0
- package/clients/hotkeyClient.d.ts.map +1 -0
- package/clients/hotkeyClient.js +624 -0
- package/clients/hotkeyClient.js.map +1 -0
- package/clients/index.d.ts +15 -0
- package/clients/index.d.ts.map +1 -0
- package/clients/index.js +17 -0
- package/clients/index.js.map +1 -0
- package/clients/launcherClient.d.ts +278 -0
- package/clients/launcherClient.d.ts.map +1 -0
- package/clients/launcherClient.js +450 -0
- package/clients/launcherClient.js.map +1 -0
- package/clients/logger.d.ts +358 -0
- package/clients/logger.d.ts.map +1 -0
- package/clients/logger.js +924 -0
- package/clients/logger.js.map +1 -0
- package/clients/notificationClient.d.ts +287 -0
- package/clients/notificationClient.d.ts.map +1 -0
- package/clients/notificationClient.js +534 -0
- package/clients/notificationClient.js.map +1 -0
- package/clients/routerClient.d.ts +658 -0
- package/clients/routerClient.d.ts.map +1 -0
- package/clients/routerClient.js +1361 -0
- package/clients/routerClient.js.map +1 -0
- package/clients/searchClient.d.ts +151 -0
- package/clients/searchClient.d.ts.map +1 -0
- package/clients/searchClient.js +276 -0
- package/clients/searchClient.js.map +1 -0
- package/clients/storageClient.d.ts +217 -0
- package/clients/storageClient.d.ts.map +1 -0
- package/clients/storageClient.js +294 -0
- package/clients/storageClient.js.map +1 -0
- package/clients/windowClient.d.ts +572 -0
- package/clients/windowClient.d.ts.map +1 -0
- package/clients/windowClient.js +870 -0
- package/clients/windowClient.js.map +1 -0
- package/clients/workspaceClient.d.ts +481 -0
- package/clients/workspaceClient.d.ts.map +1 -0
- package/clients/workspaceClient.js +714 -0
- package/clients/workspaceClient.js.map +1 -0
- package/common/Desktop.d.ts +87 -0
- package/common/Desktop.d.ts.map +1 -0
- package/common/Desktop.js +125 -0
- package/common/Desktop.js.map +1 -0
- package/common/FinsembleWindow.d.ts +916 -0
- package/common/FinsembleWindow.d.ts.map +1 -0
- package/common/FinsembleWindow.js +1682 -0
- package/common/FinsembleWindow.js.map +1 -0
- package/common/Globals.d.ts +97 -0
- package/common/Globals.d.ts.map +1 -0
- package/common/Globals.js +30 -0
- package/common/Globals.js.map +1 -0
- package/common/Monitors.d.ts +133 -0
- package/common/Monitors.d.ts.map +1 -0
- package/common/Monitors.js +442 -0
- package/common/Monitors.js.map +1 -0
- package/common/Performance.d.ts +7 -0
- package/common/Performance.d.ts.map +1 -0
- package/common/Performance.js +13 -0
- package/common/Performance.js.map +1 -0
- package/common/REST.d.ts +17 -0
- package/common/REST.d.ts.map +1 -0
- package/common/REST.js +85 -0
- package/common/REST.js.map +1 -0
- package/common/Singleton.d.ts +67 -0
- package/common/Singleton.d.ts.map +1 -0
- package/common/Singleton.js +83 -0
- package/common/Singleton.js.map +1 -0
- package/common/configUtil.d.ts +50 -0
- package/common/configUtil.d.ts.map +1 -0
- package/common/configUtil.js +333 -0
- package/common/configUtil.js.map +1 -0
- package/common/constants.d.ts +106 -0
- package/common/constants.d.ts.map +1 -0
- package/common/constants.js +181 -0
- package/common/constants.js.map +1 -0
- package/common/dependencyManager.d.ts +172 -0
- package/common/dependencyManager.d.ts.map +1 -0
- package/common/dependencyManager.js +383 -0
- package/common/dependencyManager.js.map +1 -0
- package/common/events/FinsembleEvent.d.ts +30 -0
- package/common/events/FinsembleEvent.d.ts.map +1 -0
- package/common/events/FinsembleEvent.js +72 -0
- package/common/events/FinsembleEvent.js.map +1 -0
- package/common/events/PrivateEventManager.d.ts +95 -0
- package/common/events/PrivateEventManager.d.ts.map +1 -0
- package/common/events/PrivateEventManager.js +286 -0
- package/common/events/PrivateEventManager.js.map +1 -0
- package/common/events/PrivateFinsembleEvent.d.ts +30 -0
- package/common/events/PrivateFinsembleEvent.d.ts.map +1 -0
- package/common/events/PrivateFinsembleEvent.js +65 -0
- package/common/events/PrivateFinsembleEvent.js.map +1 -0
- package/common/events/PublicEventManager.d.ts +59 -0
- package/common/events/PublicEventManager.d.ts.map +1 -0
- package/common/events/PublicEventManager.js +124 -0
- package/common/events/PublicEventManager.js.map +1 -0
- package/common/index.d.ts +4 -0
- package/common/index.d.ts.map +1 -0
- package/common/index.js +6 -0
- package/common/index.js.map +1 -0
- package/common/redux/actionIdMapper.d.ts +33 -0
- package/common/redux/actionIdMapper.d.ts.map +1 -0
- package/common/redux/actionIdMapper.js +72 -0
- package/common/redux/actionIdMapper.js.map +1 -0
- package/common/redux/createReducer.d.ts +128 -0
- package/common/redux/createReducer.d.ts.map +1 -0
- package/common/redux/createReducer.js +298 -0
- package/common/redux/createReducer.js.map +1 -0
- package/common/redux/index.d.ts +3 -0
- package/common/redux/index.d.ts.map +1 -0
- package/common/redux/index.js +3 -0
- package/common/redux/index.js.map +1 -0
- package/common/redux/remoteReduxEnhancer.d.ts +29 -0
- package/common/redux/remoteReduxEnhancer.d.ts.map +1 -0
- package/common/redux/remoteReduxEnhancer.js +202 -0
- package/common/redux/remoteReduxEnhancer.js.map +1 -0
- package/common/redux/types.d.ts +14 -0
- package/common/redux/types.d.ts.map +1 -0
- package/common/redux/types.js +2 -0
- package/common/redux/types.js.map +1 -0
- package/common/system.d.ts +309 -0
- package/common/system.d.ts.map +1 -0
- package/common/system.js +545 -0
- package/common/system.js.map +1 -0
- package/common/systemManagerClient.d.ts +86 -0
- package/common/systemManagerClient.d.ts.map +1 -0
- package/common/systemManagerClient.js +173 -0
- package/common/systemManagerClient.js.map +1 -0
- package/common/testPoint.d.ts +57 -0
- package/common/testPoint.d.ts.map +1 -0
- package/common/testPoint.js +106 -0
- package/common/testPoint.js.map +1 -0
- package/common/toast.d.ts +36 -0
- package/common/toast.d.ts.map +1 -0
- package/common/toast.js +85 -0
- package/common/toast.js.map +1 -0
- package/common/util.d.ts +139 -0
- package/common/util.d.ts.map +1 -0
- package/common/util.js +455 -0
- package/common/util.js.map +1 -0
- package/deprecated/SmartDesktopClient.d.ts +19 -0
- package/deprecated/SmartDesktopClient.d.ts.map +1 -0
- package/deprecated/SmartDesktopClient.js +19 -0
- package/deprecated/SmartDesktopClient.js.map +1 -0
- package/deprecated/baseClient.d.ts +88 -0
- package/deprecated/baseClient.d.ts.map +1 -0
- package/deprecated/baseClient.js +124 -0
- package/deprecated/baseClient.js.map +1 -0
- package/deprecated/deprecatedFunctions.d.ts +45 -0
- package/deprecated/deprecatedFunctions.d.ts.map +1 -0
- package/deprecated/deprecatedFunctions.js +201 -0
- package/deprecated/deprecatedFunctions.js.map +1 -0
- package/deprecated/deprecatedlauncherClient.d.ts +163 -0
- package/deprecated/deprecatedlauncherClient.d.ts.map +1 -0
- package/deprecated/deprecatedlauncherClient.js +286 -0
- package/deprecated/deprecatedlauncherClient.js.map +1 -0
- package/deprecated/dragAndDropAssets/dragAndDropScrim.css +54 -0
- package/deprecated/dragAndDropAssets/ff-delete-circle.svg +11 -0
- package/deprecated/dragAndDropAssets/ff-share.svg +14 -0
- package/deprecated/dragAndDropClient.d.ts +288 -0
- package/deprecated/dragAndDropClient.d.ts.map +1 -0
- package/deprecated/dragAndDropClient.js +695 -0
- package/deprecated/dragAndDropClient.js.map +1 -0
- package/deprecated/index.d.ts +2 -0
- package/deprecated/index.d.ts.map +1 -0
- package/deprecated/index.js +2 -0
- package/deprecated/index.js.map +1 -0
- package/deprecated/legacyUIComponentNames.d.ts +25 -0
- package/deprecated/legacyUIComponentNames.d.ts.map +1 -0
- package/deprecated/legacyUIComponentNames.js +25 -0
- package/deprecated/legacyUIComponentNames.js.map +1 -0
- package/deprecated/linkerClient.d.ts +422 -0
- package/deprecated/linkerClient.d.ts.map +1 -0
- package/deprecated/linkerClient.js +889 -0
- package/deprecated/linkerClient.js.map +1 -0
- package/index.d.ts +69 -1
- package/index.d.ts.map +1 -0
- package/index.js +2 -0
- package/index.js.map +1 -0
- package/main.d.ts +736 -0
- package/main.d.ts.map +1 -0
- package/main.js +83 -0
- package/main.js.map +1 -0
- package/package.json +46 -113
- package/platform/services/Interop/AuthSignVerify.d.ts +57 -0
- package/platform/services/Interop/AuthSignVerify.d.ts.map +1 -0
- package/platform/services/Interop/AuthSignVerify.js +284 -0
- package/platform/services/Interop/AuthSignVerify.js.map +1 -0
- package/platform/services/Interop/index.d.ts +3 -0
- package/platform/services/Interop/index.d.ts.map +1 -0
- package/platform/services/Interop/index.js +5 -0
- package/platform/services/Interop/index.js.map +1 -0
- package/platform/services/Interop/modules/authorize.d.ts +63 -0
- package/platform/services/Interop/modules/authorize.d.ts.map +1 -0
- package/platform/services/Interop/modules/authorize.js +132 -0
- package/platform/services/Interop/modules/authorize.js.map +1 -0
- package/platform/services/Interop/modules/commonUtils.d.ts +34 -0
- package/platform/services/Interop/modules/commonUtils.d.ts.map +1 -0
- package/platform/services/Interop/modules/commonUtils.js +80 -0
- package/platform/services/Interop/modules/commonUtils.js.map +1 -0
- package/platform/services/Interop/modules/index.d.ts +5 -0
- package/platform/services/Interop/modules/index.d.ts.map +1 -0
- package/platform/services/Interop/modules/index.js +9 -0
- package/platform/services/Interop/modules/index.js.map +1 -0
- package/platform/services/Interop/modules/linker.d.ts +70 -0
- package/platform/services/Interop/modules/linker.d.ts.map +1 -0
- package/platform/services/Interop/modules/linker.js +312 -0
- package/platform/services/Interop/modules/linker.js.map +1 -0
- package/platform/services/Interop/modules/resolver.d.ts +223 -0
- package/platform/services/Interop/modules/resolver.d.ts.map +1 -0
- package/platform/services/Interop/modules/resolver.js +2481 -0
- package/platform/services/Interop/modules/resolver.js.map +1 -0
- package/platform/services/Interop/modules/workspace.d.ts +22 -0
- package/platform/services/Interop/modules/workspace.d.ts.map +1 -0
- package/platform/services/Interop/modules/workspace.js +100 -0
- package/platform/services/Interop/modules/workspace.js.map +1 -0
- package/platform/services/Interop/selectConnect.d.ts +5 -0
- package/platform/services/Interop/selectConnect.d.ts.map +1 -0
- package/platform/services/Interop/selectConnect.js +160 -0
- package/platform/services/Interop/selectConnect.js.map +1 -0
- package/platform/services/Interop/types.d.ts +421 -0
- package/platform/services/Interop/types.d.ts.map +1 -0
- package/platform/services/Interop/types.js +12 -0
- package/platform/services/Interop/types.js.map +1 -0
- package/platform/services/baseService.d.ts +83 -0
- package/platform/services/baseService.d.ts.map +1 -0
- package/platform/services/baseService.js +301 -0
- package/platform/services/baseService.js.map +1 -0
- package/platform/services/distributedStore/storeUtils.d.ts +16 -0
- package/platform/services/distributedStore/storeUtils.d.ts.map +1 -0
- package/platform/services/distributedStore/storeUtils.js +110 -0
- package/platform/services/distributedStore/storeUtils.js.map +1 -0
- package/platform/services/index.d.ts +6 -0
- package/platform/services/index.d.ts.map +1 -0
- package/platform/services/index.js +11 -0
- package/platform/services/index.js.map +1 -0
- package/platform/services/logger/types.d.ts +79 -0
- package/platform/services/logger/types.d.ts.map +1 -0
- package/platform/services/logger/types.js +2 -0
- package/platform/services/logger/types.js.map +1 -0
- package/platform/services/notification/index.d.ts +2 -0
- package/platform/services/notification/index.d.ts.map +1 -0
- package/platform/services/notification/index.js +3 -0
- package/platform/services/notification/index.js.map +1 -0
- package/platform/services/notification/types/Action.d.ts +13 -0
- package/platform/services/notification/types/Action.d.ts.map +1 -0
- package/platform/services/notification/types/Action.js +8 -0
- package/platform/services/notification/types/Action.js.map +1 -0
- package/platform/services/notification/types/ActionTypes.d.ts +17 -0
- package/platform/services/notification/types/ActionTypes.d.ts.map +1 -0
- package/platform/services/notification/types/ActionTypes.js +19 -0
- package/platform/services/notification/types/ActionTypes.js.map +1 -0
- package/platform/services/notification/types/Callbacks.d.ts +8 -0
- package/platform/services/notification/types/Callbacks.d.ts.map +1 -0
- package/platform/services/notification/types/Callbacks.js +2 -0
- package/platform/services/notification/types/Callbacks.js.map +1 -0
- package/platform/services/notification/types/Filter.d.ts +23 -0
- package/platform/services/notification/types/Filter.d.ts.map +1 -0
- package/platform/services/notification/types/Filter.js +20 -0
- package/platform/services/notification/types/Filter.js.map +1 -0
- package/platform/services/notification/types/IAction.d.ts +52 -0
- package/platform/services/notification/types/IAction.d.ts.map +1 -0
- package/platform/services/notification/types/IAction.js +2 -0
- package/platform/services/notification/types/IAction.js.map +1 -0
- package/platform/services/notification/types/IFilter.d.ts +25 -0
- package/platform/services/notification/types/IFilter.d.ts.map +1 -0
- package/platform/services/notification/types/IFilter.js +2 -0
- package/platform/services/notification/types/IFilter.js.map +1 -0
- package/platform/services/notification/types/ILastIssued.d.ts +9 -0
- package/platform/services/notification/types/ILastIssued.d.ts.map +1 -0
- package/platform/services/notification/types/ILastIssued.js +2 -0
- package/platform/services/notification/types/ILastIssued.js.map +1 -0
- package/platform/services/notification/types/IMuteFilter.d.ts +8 -0
- package/platform/services/notification/types/IMuteFilter.d.ts.map +1 -0
- package/platform/services/notification/types/IMuteFilter.js +5 -0
- package/platform/services/notification/types/IMuteFilter.js.map +1 -0
- package/platform/services/notification/types/INotification.d.ts +101 -0
- package/platform/services/notification/types/INotification.d.ts.map +1 -0
- package/platform/services/notification/types/INotification.js +2 -0
- package/platform/services/notification/types/INotification.js.map +1 -0
- package/platform/services/notification/types/INotificationClient.d.ts +95 -0
- package/platform/services/notification/types/INotificationClient.d.ts.map +1 -0
- package/platform/services/notification/types/INotificationClient.js +2 -0
- package/platform/services/notification/types/INotificationClient.js.map +1 -0
- package/platform/services/notification/types/INotificationHistoryOptions.d.ts +19 -0
- package/platform/services/notification/types/INotificationHistoryOptions.d.ts.map +1 -0
- package/platform/services/notification/types/INotificationHistoryOptions.js +2 -0
- package/platform/services/notification/types/INotificationHistoryOptions.js.map +1 -0
- package/platform/services/notification/types/INotificationService.d.ts +58 -0
- package/platform/services/notification/types/INotificationService.d.ts.map +1 -0
- package/platform/services/notification/types/INotificationService.js +2 -0
- package/platform/services/notification/types/INotificationService.js.map +1 -0
- package/platform/services/notification/types/IPerformedAction.d.ts +10 -0
- package/platform/services/notification/types/IPerformedAction.d.ts.map +1 -0
- package/platform/services/notification/types/IPerformedAction.js +2 -0
- package/platform/services/notification/types/IPerformedAction.js.map +1 -0
- package/platform/services/notification/types/ISnoozeTimer.d.ts +14 -0
- package/platform/services/notification/types/ISnoozeTimer.d.ts.map +1 -0
- package/platform/services/notification/types/ISnoozeTimer.js +10 -0
- package/platform/services/notification/types/ISnoozeTimer.js.map +1 -0
- package/platform/services/notification/types/ISubscription.d.ts +16 -0
- package/platform/services/notification/types/ISubscription.d.ts.map +1 -0
- package/platform/services/notification/types/ISubscription.js +2 -0
- package/platform/services/notification/types/ISubscription.js.map +1 -0
- package/platform/services/notification/types/LastIssued.d.ts +11 -0
- package/platform/services/notification/types/LastIssued.d.ts.map +1 -0
- package/platform/services/notification/types/LastIssued.js +7 -0
- package/platform/services/notification/types/LastIssued.js.map +1 -0
- package/platform/services/notification/types/Meta.d.ts +13 -0
- package/platform/services/notification/types/Meta.d.ts.map +1 -0
- package/platform/services/notification/types/Meta.js +7 -0
- package/platform/services/notification/types/Meta.js.map +1 -0
- package/platform/services/notification/types/Notification.d.ts +30 -0
- package/platform/services/notification/types/Notification.d.ts.map +1 -0
- package/platform/services/notification/types/Notification.js +17 -0
- package/platform/services/notification/types/Notification.js.map +1 -0
- package/platform/services/notification/types/NotificationConfig.d.ts +22 -0
- package/platform/services/notification/types/NotificationConfig.d.ts.map +1 -0
- package/platform/services/notification/types/NotificationConfig.js +2 -0
- package/platform/services/notification/types/NotificationConfig.js.map +1 -0
- package/platform/services/notification/types/NotificationHookTypes.d.ts +7 -0
- package/platform/services/notification/types/NotificationHookTypes.d.ts.map +1 -0
- package/platform/services/notification/types/NotificationHookTypes.js +2 -0
- package/platform/services/notification/types/NotificationHookTypes.js.map +1 -0
- package/platform/services/notification/types/PerformedAction.d.ts +11 -0
- package/platform/services/notification/types/PerformedAction.d.ts.map +1 -0
- package/platform/services/notification/types/PerformedAction.js +8 -0
- package/platform/services/notification/types/PerformedAction.js.map +1 -0
- package/platform/services/notification/types/SnoozeTimer.d.ts +8 -0
- package/platform/services/notification/types/SnoozeTimer.d.ts.map +1 -0
- package/platform/services/notification/types/SnoozeTimer.js +3 -0
- package/platform/services/notification/types/SnoozeTimer.js.map +1 -0
- package/platform/services/notification/types/Subscription.d.ts +14 -0
- package/platform/services/notification/types/Subscription.d.ts.map +1 -0
- package/platform/services/notification/types/Subscription.js +15 -0
- package/platform/services/notification/types/Subscription.js.map +1 -0
- package/platform/services/notification/types/index.d.ts +48 -0
- package/platform/services/notification/types/index.d.ts.map +1 -0
- package/platform/services/notification/types/index.js +24 -0
- package/platform/services/notification/types/index.js.map +1 -0
- package/platform/services/router/routerTransport.d.ts +80 -0
- package/platform/services/router/routerTransport.d.ts.map +1 -0
- package/platform/services/router/routerTransport.js +361 -0
- package/platform/services/router/routerTransport.js.map +1 -0
- package/platform/services/search/index.d.ts +2 -0
- package/platform/services/search/index.d.ts.map +1 -0
- package/platform/services/search/index.js +3 -0
- package/platform/services/search/index.js.map +1 -0
- package/platform/services/search/types.d.ts +30 -0
- package/platform/services/search/types.d.ts.map +1 -0
- package/platform/services/search/types.js +2 -0
- package/platform/services/search/types.js.map +1 -0
- package/platform/services/storage/adapters/base.d.ts +4 -0
- package/platform/services/storage/adapters/base.d.ts.map +1 -0
- package/platform/services/storage/adapters/base.js +64 -0
- package/platform/services/storage/adapters/base.js.map +1 -0
- package/platform/services/storage/adapters/types.d.ts +22 -0
- package/platform/services/storage/adapters/types.d.ts.map +1 -0
- package/platform/services/storage/adapters/types.js +2 -0
- package/platform/services/storage/adapters/types.js.map +1 -0
- package/platform/services/systemManager/_constants.d.ts +9 -0
- package/platform/services/systemManager/_constants.d.ts.map +1 -0
- package/platform/services/systemManager/_constants.js +20 -0
- package/platform/services/systemManager/_constants.js.map +1 -0
- package/platform/services/systemManager/common.d.ts +14 -0
- package/platform/services/systemManager/common.d.ts.map +1 -0
- package/platform/services/systemManager/common.js +20 -0
- package/platform/services/systemManager/common.js.map +1 -0
- package/platform/services/systemManager/shutDownManager.d.ts +79 -0
- package/platform/services/systemManager/shutDownManager.d.ts.map +1 -0
- package/platform/services/systemManager/shutDownManager.js +253 -0
- package/platform/services/systemManager/shutDownManager.js.map +1 -0
- package/platform/services/systemManager/types.d.ts +46 -0
- package/platform/services/systemManager/types.d.ts.map +1 -0
- package/platform/services/systemManager/types.js +12 -0
- package/platform/services/systemManager/types.js.map +1 -0
- package/platform/services/types.d.ts +2 -0
- package/platform/services/types.d.ts.map +1 -0
- package/platform/services/types.js +2 -0
- package/platform/services/types.js.map +1 -0
- package/platform/services/window/WindowAbstractions/BaseWindow.d.ts +485 -0
- package/platform/services/window/WindowAbstractions/BaseWindow.d.ts.map +1 -0
- package/platform/services/window/WindowAbstractions/BaseWindow.js +1346 -0
- package/platform/services/window/WindowAbstractions/BaseWindow.js.map +1 -0
- package/platform/services/window/index.d.ts +2 -0
- package/platform/services/window/index.d.ts.map +1 -0
- package/platform/services/window/index.js +3 -0
- package/platform/services/window/index.js.map +1 -0
- package/platform/services/window/types.d.ts +864 -0
- package/platform/services/window/types.d.ts.map +1 -0
- package/platform/services/window/types.js +2 -0
- package/platform/services/window/types.js.map +1 -0
- package/platform/services/workspace/index.d.ts +2 -0
- package/platform/services/workspace/index.d.ts.map +1 -0
- package/platform/services/workspace/index.js +3 -0
- package/platform/services/workspace/index.js.map +1 -0
- package/platform/services/workspace/types.d.ts +61 -0
- package/platform/services/workspace/types.d.ts.map +1 -0
- package/platform/services/workspace/types.js +2 -0
- package/platform/services/workspace/types.js.map +1 -0
- package/platform/services/workspace/windowStorageManager.d.ts +187 -0
- package/platform/services/workspace/windowStorageManager.d.ts.map +1 -0
- package/platform/services/workspace/windowStorageManager.js +195 -0
- package/platform/services/workspace/windowStorageManager.js.map +1 -0
- package/platform/services/workspace/workspaceAdminAPI.d.ts +27 -0
- package/platform/services/workspace/workspaceAdminAPI.d.ts.map +1 -0
- package/platform/services/workspace/workspaceAdminAPI.js +45 -0
- package/platform/services/workspace/workspaceAdminAPI.js.map +1 -0
- package/react/actions/favoriteActions.d.ts +22 -21
- package/react/actions/favoriteActions.d.ts.map +1 -0
- package/react/actions/favoriteActions.js +8 -8
- package/react/actions/favoriteActions.js.map +1 -1
- package/react/actions/linkerActions.d.ts +49 -48
- package/react/actions/linkerActions.d.ts.map +1 -0
- package/react/actions/linkerActions.js +8 -8
- package/react/actions/linkerActions.js.map +1 -1
- package/react/actions/menuActions.d.ts +17 -16
- package/react/actions/menuActions.d.ts.map +1 -0
- package/react/actions/menuActions.js +9 -9
- package/react/actions/menuActions.js.map +1 -1
- package/react/actions/rootActions.d.ts +10 -9
- package/react/actions/rootActions.d.ts.map +1 -0
- package/react/actions/rootActions.js +2 -2
- package/react/actions/rootActions.js.map +1 -1
- package/react/actions/searchActions.d.ts +13 -12
- package/react/actions/searchActions.d.ts.map +1 -0
- package/react/actions/searchActions.js +7 -7
- package/react/actions/searchActions.js.map +1 -1
- package/react/actions/smartDesktopDesignerActions.d.ts +47 -45
- package/react/actions/smartDesktopDesignerActions.d.ts.map +1 -0
- package/react/actions/smartDesktopDesignerActions.js +22 -22
- package/react/actions/smartDesktopDesignerActions.js.map +1 -1
- package/react/actions/toolbarActions.d.ts +62 -61
- package/react/actions/toolbarActions.d.ts.map +1 -0
- package/react/actions/toolbarActions.js +24 -24
- package/react/actions/toolbarActions.js.map +1 -1
- package/react/actions/workspaceActions.d.ts +12 -11
- package/react/actions/workspaceActions.d.ts.map +1 -0
- package/react/actions/workspaceActions.js +6 -6
- package/react/actions/workspaceActions.js.map +1 -1
- package/react/assets/css/advancedAppLauncher.css +11 -2
- package/react/assets/css/authentication.css +1 -0
- package/react/assets/css/dialogs.lazy.css +4 -0
- package/react/assets/css/finsemble.css +0 -1
- package/react/assets/css/finsemble.lazy.css +4 -0
- package/react/assets/css/floatingFocus.lazy.css +56 -0
- package/react/assets/css/notificationsCenter.css +14 -1
- package/react/assets/css/windowTitleBar.css +0 -1
- package/react/assets/css/windowTitleBar.lazy.css +4 -0
- package/react/components/FinsembleCSS.d.ts +13 -0
- package/react/components/FinsembleCSS.d.ts.map +1 -0
- package/react/components/FinsembleCSS.js +27 -0
- package/react/components/FinsembleCSS.js.map +1 -0
- package/react/components/FinsembleProvider.d.ts +19 -14
- package/react/components/FinsembleProvider.d.ts.map +1 -0
- package/react/components/FinsembleProvider.js +26 -21
- package/react/components/FinsembleProvider.js.map +1 -1
- package/react/components/appCatalog/AppCatalog.d.ts +11 -10
- package/react/components/appCatalog/AppCatalog.d.ts.map +1 -0
- package/react/components/appCatalog/AppCatalog.js +30 -24
- package/react/components/appCatalog/AppCatalog.js.map +1 -1
- package/react/components/appCatalog/AppCatalogComponent.d.ts +95 -94
- package/react/components/appCatalog/AppCatalogComponent.d.ts.map +1 -0
- package/react/components/appCatalog/AppCatalogComponent.js +303 -303
- package/react/components/appCatalog/AppCatalogComponent.js.map +1 -1
- package/react/components/appCatalog/components/AppCard.d.ts +65 -64
- package/react/components/appCatalog/components/AppCard.d.ts.map +1 -0
- package/react/components/appCatalog/components/AppCard.js +200 -200
- package/react/components/appCatalog/components/AppCard.js.map +1 -1
- package/react/components/appCatalog/components/AppList.d.ts +9 -8
- package/react/components/appCatalog/components/AppList.d.ts.map +1 -0
- package/react/components/appCatalog/components/AppList.js +25 -25
- package/react/components/appCatalog/components/AppList.js.map +1 -1
- package/react/components/appCatalog/components/AppResults.d.ts +22 -21
- package/react/components/appCatalog/components/AppResults.d.ts.map +1 -0
- package/react/components/appCatalog/components/AppResults.js +71 -71
- package/react/components/appCatalog/components/AppResults.js.map +1 -1
- package/react/components/appCatalog/components/Carousel.d.ts +43 -42
- package/react/components/appCatalog/components/Carousel.d.ts.map +1 -0
- package/react/components/appCatalog/components/Carousel.js +126 -126
- package/react/components/appCatalog/components/Carousel.js.map +1 -1
- package/react/components/appCatalog/components/EmptyResults.d.ts +8 -7
- package/react/components/appCatalog/components/EmptyResults.d.ts.map +1 -0
- package/react/components/appCatalog/components/EmptyResults.js +12 -12
- package/react/components/appCatalog/components/EmptyResults.js.map +1 -1
- package/react/components/appCatalog/components/Hero.d.ts +43 -42
- package/react/components/appCatalog/components/Hero.d.ts.map +1 -0
- package/react/components/appCatalog/components/Hero.js +83 -83
- package/react/components/appCatalog/components/Hero.js.map +1 -1
- package/react/components/appCatalog/components/Home.d.ts +22 -21
- package/react/components/appCatalog/components/Home.d.ts.map +1 -0
- package/react/components/appCatalog/components/Home.js +28 -28
- package/react/components/appCatalog/components/Home.js.map +1 -1
- package/react/components/appCatalog/components/SearchBar.d.ts +58 -57
- package/react/components/appCatalog/components/SearchBar.d.ts.map +1 -0
- package/react/components/appCatalog/components/SearchBar.js +107 -107
- package/react/components/appCatalog/components/SearchBar.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppDescription.d.ts +12 -11
- package/react/components/appCatalog/components/Showcase/AppDescription.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/AppDescription.js +15 -15
- package/react/components/appCatalog/components/Showcase/AppDescription.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppDevNotes.d.ts +15 -14
- package/react/components/appCatalog/components/Showcase/AppDevNotes.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/AppDevNotes.js +30 -30
- package/react/components/appCatalog/components/Showcase/AppDevNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/AppShowcase.d.ts +38 -37
- package/react/components/appCatalog/components/Showcase/AppShowcase.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/AppShowcase.js +128 -128
- package/react/components/appCatalog/components/Showcase/AppShowcase.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/Header.d.ts +22 -21
- package/react/components/appCatalog/components/Showcase/Header.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/Header.js +58 -57
- package/react/components/appCatalog/components/Showcase/Header.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/ImageCarousel.d.ts +14 -13
- package/react/components/appCatalog/components/Showcase/ImageCarousel.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/ImageCarousel.js +25 -25
- package/react/components/appCatalog/components/Showcase/ImageCarousel.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/Modal.d.ts +19 -18
- package/react/components/appCatalog/components/Showcase/Modal.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/Modal.js +23 -23
- package/react/components/appCatalog/components/Showcase/Modal.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.d.ts +10 -9
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.js +18 -18
- package/react/components/appCatalog/components/Showcase/ReleaseNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/SupportNotes.d.ts +12 -11
- package/react/components/appCatalog/components/Showcase/SupportNotes.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/SupportNotes.js +26 -26
- package/react/components/appCatalog/components/Showcase/SupportNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/VersionNotes.d.ts +10 -9
- package/react/components/appCatalog/components/Showcase/VersionNotes.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/VersionNotes.js +21 -21
- package/react/components/appCatalog/components/Showcase/VersionNotes.js.map +1 -1
- package/react/components/appCatalog/components/Showcase/defaults.d.ts +4 -3
- package/react/components/appCatalog/components/Showcase/defaults.d.ts.map +1 -0
- package/react/components/appCatalog/components/Showcase/defaults.js +3 -3
- package/react/components/appCatalog/components/Showcase/defaults.js.map +1 -1
- package/react/components/appCatalog/components/Toast.d.ts +12 -11
- package/react/components/appCatalog/components/Toast.d.ts.map +1 -0
- package/react/components/appCatalog/components/Toast.js +38 -38
- package/react/components/appCatalog/components/Toast.js.map +1 -1
- package/react/components/appCatalog/components/helpers.d.ts +3 -2
- package/react/components/appCatalog/components/helpers.d.ts.map +1 -0
- package/react/components/appCatalog/components/helpers.js +33 -33
- package/react/components/appCatalog/components/helpers.js.map +1 -1
- package/react/components/appCatalog/index.d.ts +2 -1
- package/react/components/appCatalog/index.d.ts.map +1 -0
- package/react/components/appCatalog/index.js +1 -1
- package/react/components/appCatalog/index.js.map +1 -1
- package/react/components/appCatalog/modules/AppDirectory.d.ts +13 -12
- package/react/components/appCatalog/modules/AppDirectory.d.ts.map +1 -0
- package/react/components/appCatalog/modules/AppDirectory.js +10 -10
- package/react/components/appCatalog/modules/AppDirectory.js.map +1 -1
- package/react/components/appCatalog/modules/FDC3.d.ts +52 -51
- package/react/components/appCatalog/modules/FDC3.d.ts.map +1 -0
- package/react/components/appCatalog/modules/FDC3.js +146 -146
- package/react/components/appCatalog/modules/FDC3.js.map +1 -1
- package/react/components/appCatalog/stores/appStore.d.ts +10 -9
- package/react/components/appCatalog/stores/appStore.d.ts.map +1 -0
- package/react/components/appCatalog/stores/appStore.js +47 -46
- package/react/components/appCatalog/stores/appStore.js.map +1 -1
- package/react/components/appCatalog/stores/storeActions.d.ts +146 -145
- package/react/components/appCatalog/stores/storeActions.d.ts.map +1 -0
- package/react/components/appCatalog/stores/storeActions.js +423 -423
- package/react/components/appCatalog/stores/storeActions.js.map +1 -1
- package/react/components/common/Button.d.ts +34 -33
- package/react/components/common/Button.d.ts.map +1 -0
- package/react/components/common/Button.js +20 -20
- package/react/components/common/Button.js.map +1 -1
- package/react/components/common/ButtonIcon.d.ts +5 -4
- package/react/components/common/ButtonIcon.d.ts.map +1 -0
- package/react/components/common/ButtonIcon.js +10 -10
- package/react/components/common/ButtonIcon.js.map +1 -1
- package/react/components/common/ButtonRow.d.ts +16 -15
- package/react/components/common/ButtonRow.d.ts.map +1 -0
- package/react/components/common/ButtonRow.js +29 -29
- package/react/components/common/ButtonRow.js.map +1 -1
- package/react/components/common/Checkbox.d.ts +12 -11
- package/react/components/common/Checkbox.d.ts.map +1 -0
- package/react/components/common/Checkbox.js +7 -7
- package/react/components/common/Checkbox.js.map +1 -1
- package/react/components/common/ContextMenu.d.ts +14 -13
- package/react/components/common/ContextMenu.d.ts.map +1 -0
- package/react/components/common/ContextMenu.js +68 -68
- package/react/components/common/ContextMenu.js.map +1 -1
- package/react/components/common/DropdownButton.d.ts +11 -10
- package/react/components/common/DropdownButton.d.ts.map +1 -0
- package/react/components/common/DropdownButton.js +65 -65
- package/react/components/common/DropdownButton.js.map +1 -1
- package/react/components/common/ErrorBoundary.d.ts +35 -34
- package/react/components/common/ErrorBoundary.d.ts.map +1 -0
- package/react/components/common/ErrorBoundary.js +43 -42
- package/react/components/common/ErrorBoundary.js.map +1 -1
- package/react/components/common/FinsembleIcon.d.ts +21 -20
- package/react/components/common/FinsembleIcon.d.ts.map +1 -0
- package/react/components/common/FinsembleIcon.js +138 -142
- package/react/components/common/FinsembleIcon.js.map +1 -1
- package/react/components/common/FinsembleSelect.d.ts +14 -13
- package/react/components/common/FinsembleSelect.d.ts.map +1 -0
- package/react/components/common/FinsembleSelect.js +61 -61
- package/react/components/common/FinsembleSelect.js.map +1 -1
- package/react/components/common/FinsembleToggle.d.ts +10 -9
- package/react/components/common/FinsembleToggle.d.ts.map +1 -0
- package/react/components/common/FinsembleToggle.js +11 -22
- package/react/components/common/FinsembleToggle.js.map +1 -1
- package/react/components/common/FinsembleToggleButtonBar.d.ts +14 -13
- package/react/components/common/FinsembleToggleButtonBar.d.ts.map +1 -0
- package/react/components/common/FinsembleToggleButtonBar.js +43 -43
- package/react/components/common/FinsembleToggleButtonBar.js.map +1 -1
- package/react/components/common/Header.d.ts +13 -12
- package/react/components/common/Header.d.ts.map +1 -0
- package/react/components/common/Header.js +18 -18
- package/react/components/common/Header.js.map +1 -1
- package/react/components/common/TimeSelect.d.ts +17 -16
- package/react/components/common/TimeSelect.d.ts.map +1 -0
- package/react/components/common/TimeSelect.js +173 -173
- package/react/components/common/TimeSelect.js.map +1 -1
- package/react/components/common/css/FinsembleToggle.css +11 -0
- package/react/components/common/css/button.css +15 -21
- package/react/components/common/css/selector.css +6 -2
- package/react/components/common/css/tab.css +1 -0
- package/react/components/common/css/toggle.css +34 -49
- package/react/components/favorites/FavoriteMaker.d.ts +17 -16
- package/react/components/favorites/FavoriteMaker.d.ts.map +1 -0
- package/react/components/favorites/FavoriteMaker.js +39 -39
- package/react/components/favorites/FavoriteMaker.js.map +1 -1
- package/react/components/favorites/FavoritesShell.d.ts +8 -7
- package/react/components/favorites/FavoritesShell.d.ts.map +1 -0
- package/react/components/favorites/FavoritesShell.js +40 -40
- package/react/components/favorites/FavoritesShell.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverContainer.d.ts +3 -2
- package/react/components/fdc3Resolver/ResolverContainer.d.ts.map +1 -0
- package/react/components/fdc3Resolver/ResolverContainer.js +55 -52
- package/react/components/fdc3Resolver/ResolverContainer.js.map +1 -1
- package/react/components/fdc3Resolver/ResolverDialog.d.ts +20 -19
- package/react/components/fdc3Resolver/ResolverDialog.d.ts.map +1 -0
- package/react/components/fdc3Resolver/ResolverDialog.js +89 -89
- package/react/components/fdc3Resolver/ResolverDialog.js.map +1 -1
- package/react/components/fdc3Resolver/index.d.ts +2 -0
- package/react/components/fdc3Resolver/index.d.ts.map +1 -0
- package/react/components/fdc3Resolver/index.js +2 -0
- package/react/components/fdc3Resolver/index.js.map +1 -0
- package/react/components/icon/Icon.d.ts +22 -22
- package/react/components/icon/Icon.d.ts.map +1 -0
- package/react/components/icon/Icon.js +100 -100
- package/react/components/icon/Icon.js.map +1 -1
- package/react/components/icon/index.d.ts +2 -1
- package/react/components/icon/index.d.ts.map +1 -0
- package/react/components/icon/index.js +1 -1
- package/react/components/icon/index.js.map +1 -1
- package/react/components/index.d.ts +28 -0
- package/react/components/index.d.ts.map +1 -0
- package/react/components/index.js +28 -0
- package/react/components/index.js.map +1 -0
- package/react/components/legacyControls/FinsembleDialog.d.ts +19 -18
- package/react/components/legacyControls/FinsembleDialog.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleDialog.js +57 -56
- package/react/components/legacyControls/FinsembleDialog.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogButton.d.ts +16 -15
- package/react/components/legacyControls/FinsembleDialogButton.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleDialogButton.js +20 -20
- package/react/components/legacyControls/FinsembleDialogButton.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogQuestion.d.ts +14 -13
- package/react/components/legacyControls/FinsembleDialogQuestion.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleDialogQuestion.js +16 -16
- package/react/components/legacyControls/FinsembleDialogQuestion.js.map +1 -1
- package/react/components/legacyControls/FinsembleDialogTextInput.d.ts +22 -21
- package/react/components/legacyControls/FinsembleDialogTextInput.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleDialogTextInput.js +64 -63
- package/react/components/legacyControls/FinsembleDialogTextInput.js.map +1 -1
- package/react/components/legacyControls/FinsembleDnDContext.d.ts +46 -45
- package/react/components/legacyControls/FinsembleDnDContext.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleDnDContext.js +292 -292
- package/react/components/legacyControls/FinsembleDnDContext.js.map +1 -1
- package/react/components/legacyControls/FinsembleDraggable.d.ts +15 -14
- package/react/components/legacyControls/FinsembleDraggable.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleDraggable.js +21 -21
- package/react/components/legacyControls/FinsembleDraggable.js.map +1 -1
- package/react/components/legacyControls/FinsembleHoverDetector.d.ts +23 -22
- package/react/components/legacyControls/FinsembleHoverDetector.d.ts.map +1 -0
- package/react/components/legacyControls/FinsembleHoverDetector.js +56 -56
- package/react/components/legacyControls/FinsembleHoverDetector.js.map +1 -1
- package/react/components/linker/LinkerMenu.d.ts +7 -6
- package/react/components/linker/LinkerMenu.d.ts.map +1 -0
- package/react/components/linker/LinkerMenu.js +152 -144
- package/react/components/linker/LinkerMenu.js.map +1 -1
- package/react/components/linker/LinkerMenuDeprecated.d.ts +8 -7
- package/react/components/linker/LinkerMenuDeprecated.d.ts.map +1 -0
- package/react/components/linker/LinkerMenuDeprecated.js +38 -37
- package/react/components/linker/LinkerMenuDeprecated.js.map +1 -1
- package/react/components/linker/index.d.ts +2 -1
- package/react/components/linker/index.d.ts.map +1 -0
- package/react/components/linker/index.js +1 -1
- package/react/components/linker/index.js.map +1 -1
- package/react/components/linker/remoteRedux.d.ts +9 -12
- package/react/components/linker/remoteRedux.d.ts.map +1 -0
- package/react/components/linker/remoteRedux.js +29 -20
- package/react/components/linker/remoteRedux.js.map +1 -1
- package/react/components/menu/Menu.d.ts +29 -28
- package/react/components/menu/Menu.d.ts.map +1 -0
- package/react/components/menu/Menu.js +25 -25
- package/react/components/menu/Menu.js.map +1 -1
- package/react/components/menu/MenuAutoResizer.d.ts +19 -18
- package/react/components/menu/MenuAutoResizer.d.ts.map +1 -0
- package/react/components/menu/MenuAutoResizer.js +67 -66
- package/react/components/menu/MenuAutoResizer.js.map +1 -1
- package/react/components/menu/MenuContent.d.ts +9 -8
- package/react/components/menu/MenuContent.d.ts.map +1 -0
- package/react/components/menu/MenuContent.js +14 -14
- package/react/components/menu/MenuContent.js.map +1 -1
- package/react/components/menu/MenuHotKey.d.ts +20 -19
- package/react/components/menu/MenuHotKey.d.ts.map +1 -0
- package/react/components/menu/MenuHotKey.js +35 -34
- package/react/components/menu/MenuHotKey.js.map +1 -1
- package/react/components/menu/MenuItem.d.ts +17 -16
- package/react/components/menu/MenuItem.d.ts.map +1 -0
- package/react/components/menu/MenuItem.js +21 -21
- package/react/components/menu/MenuItem.js.map +1 -1
- package/react/components/menu/MenuPortal.d.ts +5 -4
- package/react/components/menu/MenuPortal.d.ts.map +1 -0
- package/react/components/menu/MenuPortal.js +242 -241
- package/react/components/menu/MenuPortal.js.map +1 -1
- package/react/components/menu/MenuShell.d.ts +31 -30
- package/react/components/menu/MenuShell.d.ts.map +1 -0
- package/react/components/menu/MenuShell.js +47 -47
- package/react/components/menu/MenuShell.js.map +1 -1
- package/react/components/menu/MenuToggle.d.ts +6 -5
- package/react/components/menu/MenuToggle.d.ts.map +1 -0
- package/react/components/menu/MenuToggle.js +18 -18
- package/react/components/menu/MenuToggle.js.map +1 -1
- package/react/components/menu/index.d.ts +6 -5
- package/react/components/menu/index.d.ts.map +1 -0
- package/react/components/menu/index.js +5 -5
- package/react/components/menu/index.js.map +1 -1
- package/react/components/menu/keyboardNavigation.d.ts +14 -13
- package/react/components/menu/keyboardNavigation.d.ts.map +1 -0
- package/react/components/menu/keyboardNavigation.js +195 -195
- package/react/components/menu/keyboardNavigation.js.map +1 -1
- package/react/components/menu/menuContext.d.ts +18 -17
- package/react/components/menu/menuContext.d.ts.map +1 -0
- package/react/components/menu/menuContext.js +8 -8
- package/react/components/menu/menuContext.js.map +1 -1
- package/react/components/menu/menuHelpers.d.ts +33 -32
- package/react/components/menu/menuHelpers.d.ts.map +1 -0
- package/react/components/menu/menuHelpers.js +110 -110
- package/react/components/menu/menuHelpers.js.map +1 -1
- package/react/components/notifications/components/NoNotifications.d.ts +4 -3
- package/react/components/notifications/components/NoNotifications.d.ts.map +1 -0
- package/react/components/notifications/components/NoNotifications.js +4 -4
- package/react/components/notifications/components/NoNotifications.js.map +1 -1
- package/react/components/notifications/components/drawer/Drawer.d.ts +8 -7
- package/react/components/notifications/components/drawer/Drawer.d.ts.map +1 -0
- package/react/components/notifications/components/drawer/Drawer.js +4 -4
- package/react/components/notifications/components/drawer/Drawer.js.map +1 -1
- package/react/components/notifications/components/drawer/DrawerControls.d.ts +4 -3
- package/react/components/notifications/components/drawer/DrawerControls.d.ts.map +1 -0
- package/react/components/notifications/components/drawer/DrawerControls.js +91 -116
- package/react/components/notifications/components/drawer/DrawerControls.js.map +1 -1
- package/react/components/notifications/components/drawer/DrawerHeader.d.ts +7 -6
- package/react/components/notifications/components/drawer/DrawerHeader.d.ts.map +1 -0
- package/react/components/notifications/components/drawer/DrawerHeader.js +77 -76
- package/react/components/notifications/components/drawer/DrawerHeader.js.map +1 -1
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.d.ts +5 -4
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.d.ts.map +1 -0
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js +406 -402
- package/react/components/notifications/components/notificationsCenter/NotificationsCenter.js.map +1 -1
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.d.ts +5 -4
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.d.ts.map +1 -0
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js +169 -164
- package/react/components/notifications/components/notificationsToasts/NotificationsToasts.js.map +1 -1
- package/react/components/notifications/components/shared/CheckButton.d.ts +7 -7
- package/react/components/notifications/components/shared/CheckButton.d.ts.map +1 -0
- package/react/components/notifications/components/shared/CheckButton.js +38 -38
- package/react/components/notifications/components/shared/CheckButton.js.map +1 -1
- package/react/components/notifications/components/shared/IconButton.d.ts +11 -10
- package/react/components/notifications/components/shared/IconButton.d.ts.map +1 -0
- package/react/components/notifications/components/shared/IconButton.js +10 -10
- package/react/components/notifications/components/shared/IconButton.js.map +1 -1
- package/react/components/notifications/components/shared/NotificationCardShell.d.ts +20 -21
- package/react/components/notifications/components/shared/NotificationCardShell.d.ts.map +1 -0
- package/react/components/notifications/components/shared/NotificationCardShell.js +92 -91
- package/react/components/notifications/components/shared/NotificationCardShell.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.d.ts +6 -7
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.d.ts.map +1 -0
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.js +31 -31
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyActions.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyContentLogo.d.ts +5 -4
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyContentLogo.d.ts.map +1 -0
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyContentLogo.js +6 -6
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyContentLogo.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.d.ts +6 -7
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.d.ts.map +1 -0
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js +12 -12
- package/react/components/notifications/components/shared/notificationCard/NotificationCardBodyShell.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.d.ts +12 -13
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.d.ts.map +1 -0
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js +145 -144
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderControls.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderLogo.d.ts +5 -4
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderLogo.d.ts.map +1 -0
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderLogo.js +7 -7
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderLogo.js.map +1 -1
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.d.ts +8 -9
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.d.ts.map +1 -0
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js +18 -18
- package/react/components/notifications/components/shared/notificationCard/NotificationCardHeaderShell.js.map +1 -1
- package/react/components/notifications/components/views/CardView.d.ts +5 -4
- package/react/components/notifications/components/views/CardView.d.ts.map +1 -0
- package/react/components/notifications/components/views/CardView.js +91 -91
- package/react/components/notifications/components/views/CardView.js.map +1 -1
- package/react/components/notifications/components/views/ListView.d.ts +11 -11
- package/react/components/notifications/components/views/ListView.d.ts.map +1 -0
- package/react/components/notifications/components/views/ListView.js +143 -144
- package/react/components/notifications/components/views/ListView.js.map +1 -1
- package/react/components/notifications/components/views/NotificationDetailsView.d.ts +7 -7
- package/react/components/notifications/components/views/NotificationDetailsView.d.ts.map +1 -0
- package/react/components/notifications/components/views/NotificationDetailsView.js +63 -63
- package/react/components/notifications/components/views/NotificationDetailsView.js.map +1 -1
- package/react/components/notifications/constants.d.ts +10 -9
- package/react/components/notifications/constants.d.ts.map +1 -0
- package/react/components/notifications/constants.js +11 -11
- package/react/components/notifications/constants.js.map +1 -1
- package/react/components/notifications/icons/EnvelopeClose.d.ts +3 -2
- package/react/components/notifications/icons/EnvelopeClose.d.ts.map +1 -0
- package/react/components/notifications/icons/EnvelopeClose.js +11 -11
- package/react/components/notifications/icons/EnvelopeClose.js.map +1 -1
- package/react/components/notifications/icons/EnvelopeOpen.d.ts +3 -2
- package/react/components/notifications/icons/EnvelopeOpen.d.ts.map +1 -0
- package/react/components/notifications/icons/EnvelopeOpen.js +10 -10
- package/react/components/notifications/icons/EnvelopeOpen.js.map +1 -1
- package/react/components/notifications/icons/SnoozeIcon.d.ts +3 -2
- package/react/components/notifications/icons/SnoozeIcon.d.ts.map +1 -0
- package/react/components/notifications/icons/SnoozeIcon.js +12 -12
- package/react/components/notifications/icons/SnoozeIcon.js.map +1 -1
- package/react/components/notifications/index.d.ts +9 -8
- package/react/components/notifications/index.d.ts.map +1 -0
- package/react/components/notifications/index.js +8 -8
- package/react/components/notifications/index.js.map +1 -1
- package/react/components/notifications/notificationsContext.d.ts +8 -7
- package/react/components/notifications/notificationsContext.d.ts.map +1 -0
- package/react/components/notifications/notificationsContext.js +6 -6
- package/react/components/notifications/notificationsContext.js.map +1 -1
- package/react/components/notifications/types.d.ts +91 -93
- package/react/components/notifications/types.d.ts.map +1 -0
- package/react/components/notifications/types.js +1 -1
- package/react/components/notifications/types.js.map +1 -1
- package/react/components/notifications/utils.d.ts +13 -16
- package/react/components/notifications/utils.d.ts.map +1 -0
- package/react/components/notifications/utils.js +70 -70
- package/react/components/notifications/utils.js.map +1 -1
- package/react/components/processMonitor/ProcessMonitor.d.ts +7 -6
- package/react/components/processMonitor/ProcessMonitor.d.ts.map +1 -0
- package/react/components/processMonitor/ProcessMonitor.js +105 -100
- package/react/components/processMonitor/ProcessMonitor.js.map +1 -1
- package/react/components/processMonitor/ProcessMonitorTypes.d.ts +27 -26
- package/react/components/processMonitor/ProcessMonitorTypes.d.ts.map +1 -0
- package/react/components/processMonitor/ProcessMonitorTypes.js +5 -5
- package/react/components/processMonitor/ProcessMonitorTypes.js.map +1 -1
- package/react/components/processMonitor/components/ChildWindow.d.ts +15 -14
- package/react/components/processMonitor/components/ChildWindow.d.ts.map +1 -0
- package/react/components/processMonitor/components/ChildWindow.js +39 -39
- package/react/components/processMonitor/components/ChildWindow.js.map +1 -1
- package/react/components/processMonitor/components/ListHeader.d.ts +25 -24
- package/react/components/processMonitor/components/ListHeader.d.ts.map +1 -0
- package/react/components/processMonitor/components/ListHeader.js +53 -53
- package/react/components/processMonitor/components/ListHeader.js.map +1 -1
- package/react/components/processMonitor/components/ProcessStatistics.d.ts +13 -12
- package/react/components/processMonitor/components/ProcessStatistics.d.ts.map +1 -0
- package/react/components/processMonitor/components/ProcessStatistics.js +66 -66
- package/react/components/processMonitor/components/ProcessStatistics.js.map +1 -1
- package/react/components/processMonitor/constants.d.ts +10 -9
- package/react/components/processMonitor/constants.d.ts.map +1 -0
- package/react/components/processMonitor/constants.js +29 -29
- package/react/components/processMonitor/constants.js.map +1 -1
- package/react/components/processMonitor/helpers.d.ts +19 -18
- package/react/components/processMonitor/helpers.d.ts.map +1 -0
- package/react/components/processMonitor/helpers.js +55 -55
- package/react/components/processMonitor/helpers.js.map +1 -1
- package/react/components/processMonitor/index.d.ts +2 -1
- package/react/components/processMonitor/index.d.ts.map +1 -0
- package/react/components/processMonitor/index.js +1 -1
- package/react/components/processMonitor/index.js.map +1 -1
- package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts +63 -62
- package/react/components/processMonitor/stores/ProcessMonitorStore.d.ts.map +1 -0
- package/react/components/processMonitor/stores/ProcessMonitorStore.js +291 -290
- package/react/components/processMonitor/stores/ProcessMonitorStore.js.map +1 -1
- package/react/components/quickComponentForm/QuickComponentForm.d.ts +8 -7
- package/react/components/quickComponentForm/QuickComponentForm.d.ts.map +1 -0
- package/react/components/quickComponentForm/QuickComponentForm.js +123 -113
- package/react/components/quickComponentForm/QuickComponentForm.js.map +1 -1
- package/react/components/quickComponentForm/index.d.ts +2 -1
- package/react/components/quickComponentForm/index.d.ts.map +1 -0
- package/react/components/quickComponentForm/index.js +1 -1
- package/react/components/quickComponentForm/index.js.map +1 -1
- package/react/components/sdd/Appearance.helpers.d.ts +2 -1
- package/react/components/sdd/Appearance.helpers.d.ts.map +1 -0
- package/react/components/sdd/Appearance.helpers.js +1 -1
- package/react/components/sdd/Appearance.helpers.js.map +1 -1
- package/react/components/sdd/Dashboard.css +77 -0
- package/react/components/sdd/ThemePage.css +6 -0
- package/react/components/sdd/css/addApp.css +2 -2
- package/react/components/sdd/css/export.css +16 -0
- package/react/components/sdd/css/nav.css +5 -4
- package/react/components/search/Highlight.d.ts +13 -12
- package/react/components/search/Highlight.d.ts.map +1 -0
- package/react/components/search/Highlight.js +39 -39
- package/react/components/search/Highlight.js.map +1 -1
- package/react/components/search/Search.d.ts +6 -5
- package/react/components/search/Search.d.ts.map +1 -0
- package/react/components/search/Search.js +27 -27
- package/react/components/search/Search.js.map +1 -1
- package/react/components/search/SearchBestMatch.d.ts +7 -6
- package/react/components/search/SearchBestMatch.d.ts.map +1 -0
- package/react/components/search/SearchBestMatch.js +38 -38
- package/react/components/search/SearchBestMatch.js.map +1 -1
- package/react/components/search/SearchInput.d.ts +8 -7
- package/react/components/search/SearchInput.d.ts.map +1 -0
- package/react/components/search/SearchInput.js +28 -28
- package/react/components/search/SearchInput.js.map +1 -1
- package/react/components/search/SearchProviderResults.d.ts +6 -7
- package/react/components/search/SearchProviderResults.d.ts.map +1 -0
- package/react/components/search/SearchProviderResults.js +26 -25
- package/react/components/search/SearchProviderResults.js.map +1 -1
- package/react/components/search/SearchResult.d.ts +13 -14
- package/react/components/search/SearchResult.d.ts.map +1 -0
- package/react/components/search/SearchResult.js +47 -46
- package/react/components/search/SearchResult.js.map +1 -1
- package/react/components/search/SearchResults.d.ts +4 -3
- package/react/components/search/SearchResults.d.ts.map +1 -0
- package/react/components/search/SearchResults.js +21 -21
- package/react/components/search/SearchResults.js.map +1 -1
- package/react/components/search/index.d.ts +2 -1
- package/react/components/search/index.d.ts.map +1 -0
- package/react/components/search/index.js +1 -1
- package/react/components/search/index.js.map +1 -1
- package/react/components/shared/BellIcon.d.ts +4 -3
- package/react/components/shared/BellIcon.d.ts.map +1 -0
- package/react/components/shared/BellIcon.js +7 -7
- package/react/components/shared/BellIcon.js.map +1 -1
- package/react/components/shared/BellIconCrossed.d.ts +4 -3
- package/react/components/shared/BellIconCrossed.d.ts.map +1 -0
- package/react/components/shared/BellIconCrossed.js +9 -9
- package/react/components/shared/BellIconCrossed.js.map +1 -1
- package/react/components/shared/Button.d.ts +10 -9
- package/react/components/shared/Button.d.ts.map +1 -0
- package/react/components/shared/Button.js +5 -5
- package/react/components/shared/Button.js.map +1 -1
- package/react/components/shared/ConditionalWrapper.d.ts +9 -8
- package/react/components/shared/ConditionalWrapper.d.ts.map +1 -0
- package/react/components/shared/ConditionalWrapper.js +5 -5
- package/react/components/shared/ConditionalWrapper.js.map +1 -1
- package/react/components/shared/DefaultDropdownButton.d.ts +19 -18
- package/react/components/shared/DefaultDropdownButton.d.ts.map +1 -0
- package/react/components/shared/DefaultDropdownButton.js +117 -117
- package/react/components/shared/DefaultDropdownButton.js.map +1 -1
- package/react/components/shared/Tag.d.ts +9 -8
- package/react/components/shared/Tag.d.ts.map +1 -0
- package/react/components/shared/Tag.js +22 -22
- package/react/components/shared/Tag.js.map +1 -1
- package/react/components/shared/TagsMenu.d.ts +37 -36
- package/react/components/shared/TagsMenu.d.ts.map +1 -0
- package/react/components/shared/TagsMenu.js +77 -77
- package/react/components/shared/TagsMenu.js.map +1 -1
- package/react/components/shared/addProtocolToValidURL.d.ts +8 -7
- package/react/components/shared/addProtocolToValidURL.d.ts.map +1 -0
- package/react/components/shared/addProtocolToValidURL.js +11 -11
- package/react/components/shared/addProtocolToValidURL.js.map +1 -1
- package/react/components/shared/linkerUtil.d.ts +4 -3
- package/react/components/shared/linkerUtil.d.ts.map +1 -0
- package/react/components/shared/linkerUtil.js +9 -9
- package/react/components/shared/linkerUtil.js.map +1 -1
- package/react/components/shared/openQuitConfirmationDialog.d.ts +2 -1
- package/react/components/shared/openQuitConfirmationDialog.d.ts.map +1 -0
- package/react/components/shared/openQuitConfirmationDialog.js +17 -16
- package/react/components/shared/openQuitConfirmationDialog.js.map +1 -1
- package/react/components/shared/validateURL.d.ts +20 -19
- package/react/components/shared/validateURL.d.ts.map +1 -0
- package/react/components/shared/validateURL.js +29 -29
- package/react/components/shared/validateURL.js.map +1 -1
- package/react/components/singleInputDialog/SingleInputDialog.d.ts +9 -8
- package/react/components/singleInputDialog/SingleInputDialog.d.ts.map +1 -0
- package/react/components/singleInputDialog/SingleInputDialog.js +132 -129
- package/react/components/singleInputDialog/SingleInputDialog.js.map +1 -1
- package/react/components/singleInputDialog/index.d.ts +2 -1
- package/react/components/singleInputDialog/index.d.ts.map +1 -0
- package/react/components/singleInputDialog/index.js +1 -1
- package/react/components/singleInputDialog/index.js.map +1 -1
- package/react/components/system/System.d.ts +31 -30
- package/react/components/system/System.d.ts.map +1 -0
- package/react/components/system/System.js +53 -52
- package/react/components/system/System.js.map +1 -1
- package/react/components/system/SystemTrayComponentShell.d.ts +14 -10
- package/react/components/system/SystemTrayComponentShell.d.ts.map +1 -0
- package/react/components/system/SystemTrayComponentShell.js +43 -28
- package/react/components/system/SystemTrayComponentShell.js.map +1 -1
- package/react/components/system/index.d.ts +3 -2
- package/react/components/system/index.d.ts.map +1 -0
- package/react/components/system/index.js +2 -2
- package/react/components/system/index.js.map +1 -1
- package/react/components/toolbar/AutoArrange.d.ts +10 -9
- package/react/components/toolbar/AutoArrange.d.ts.map +1 -0
- package/react/components/toolbar/AutoArrange.js +36 -35
- package/react/components/toolbar/AutoArrange.js.map +1 -1
- package/react/components/toolbar/DragHandle.d.ts +12 -11
- package/react/components/toolbar/DragHandle.d.ts.map +1 -0
- package/react/components/toolbar/DragHandle.js +43 -42
- package/react/components/toolbar/DragHandle.js.map +1 -1
- package/react/components/toolbar/MinimizeAll.d.ts +9 -8
- package/react/components/toolbar/MinimizeAll.d.ts.map +1 -0
- package/react/components/toolbar/MinimizeAll.js +24 -24
- package/react/components/toolbar/MinimizeAll.js.map +1 -1
- package/react/components/toolbar/NotificationControl.d.ts +10 -9
- package/react/components/toolbar/NotificationControl.d.ts.map +1 -0
- package/react/components/toolbar/NotificationControl.js +63 -64
- package/react/components/toolbar/NotificationControl.js.map +1 -1
- package/react/components/toolbar/RevealAll.d.ts +9 -8
- package/react/components/toolbar/RevealAll.d.ts.map +1 -0
- package/react/components/toolbar/RevealAll.js +26 -26
- package/react/components/toolbar/RevealAll.js.map +1 -1
- package/react/components/toolbar/SddButton.d.ts +7 -6
- package/react/components/toolbar/SddButton.d.ts.map +1 -0
- package/react/components/toolbar/SddButton.js +27 -26
- package/react/components/toolbar/SddButton.js.map +1 -1
- package/react/components/toolbar/ToolbarIcon.d.ts +7 -6
- package/react/components/toolbar/ToolbarIcon.d.ts.map +1 -0
- package/react/components/toolbar/ToolbarIcon.js +32 -31
- package/react/components/toolbar/ToolbarIcon.js.map +1 -1
- package/react/components/toolbar/ToolbarSection.d.ts +17 -16
- package/react/components/toolbar/ToolbarSection.d.ts.map +1 -0
- package/react/components/toolbar/ToolbarSection.js +41 -41
- package/react/components/toolbar/ToolbarSection.js.map +1 -1
- package/react/components/toolbar/ToolbarShell.d.ts +19 -14
- package/react/components/toolbar/ToolbarShell.d.ts.map +1 -0
- package/react/components/toolbar/ToolbarShell.js +28 -22
- package/react/components/toolbar/ToolbarShell.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts +41 -40
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js +93 -92
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncher.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncherMenu.d.ts +11 -10
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncherMenu.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncherMenu.js +30 -30
- package/react/components/toolbar/advancedAppLauncher/AdvancedAppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.d.ts +93 -92
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js +277 -276
- package/react/components/toolbar/advancedAppLauncher/components/AddNewAppForm.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.d.ts +11 -10
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js +15 -15
- package/react/components/toolbar/advancedAppLauncher/components/AddNewFolder.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.d.ts +57 -56
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js +175 -174
- package/react/components/toolbar/advancedAppLauncher/components/AppActionsMenu.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.d.ts +34 -34
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js +56 -55
- package/react/components/toolbar/advancedAppLauncher/components/AppDefinition.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/AppTagsList.d.ts +17 -16
- package/react/components/toolbar/advancedAppLauncher/components/AppTagsList.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/AppTagsList.js +43 -43
- package/react/components/toolbar/advancedAppLauncher/components/AppTagsList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts +39 -38
- package/react/components/toolbar/advancedAppLauncher/components/Content.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/Content.js +171 -170
- package/react/components/toolbar/advancedAppLauncher/components/Content.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.d.ts +22 -21
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js +64 -64
- package/react/components/toolbar/advancedAppLauncher/components/FilterSort.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts +60 -59
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js +298 -298
- package/react/components/toolbar/advancedAppLauncher/components/FoldersList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.d.ts +26 -25
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js +103 -102
- package/react/components/toolbar/advancedAppLauncher/components/LeftNavBottomLinks.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/NoAppsFound.d.ts +12 -11
- package/react/components/toolbar/advancedAppLauncher/components/NoAppsFound.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/NoAppsFound.js +9 -9
- package/react/components/toolbar/advancedAppLauncher/components/NoAppsFound.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.d.ts +19 -18
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js +57 -57
- package/react/components/toolbar/advancedAppLauncher/components/SearchBox.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/SortBy.d.ts +14 -13
- package/react/components/toolbar/advancedAppLauncher/components/SortBy.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/SortBy.js +37 -37
- package/react/components/toolbar/advancedAppLauncher/components/SortBy.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.d.ts +20 -19
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.js +38 -38
- package/react/components/toolbar/advancedAppLauncher/components/TagsList.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.d.ts +9 -8
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js +26 -26
- package/react/components/toolbar/advancedAppLauncher/components/ToggleFavoriteDropdown.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.d.ts +9 -8
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js +10 -10
- package/react/components/toolbar/advancedAppLauncher/modules/AppDirectory.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.d.ts +56 -55
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js +145 -145
- package/react/components/toolbar/advancedAppLauncher/modules/FDC3.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.d.ts +6 -5
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.js +20 -19
- package/react/components/toolbar/advancedAppLauncher/stores/LauncherStore.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.d.ts +97 -96
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js +532 -531
- package/react/components/toolbar/advancedAppLauncher/stores/StoreActions.js.map +1 -1
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.d.ts +19 -18
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.d.ts.map +1 -0
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js +35 -35
- package/react/components/toolbar/advancedAppLauncher/utils/sort-functions.js.map +1 -1
- package/react/components/toolbar/appLauncher/AppLauncherMenu.d.ts +29 -28
- package/react/components/toolbar/appLauncher/AppLauncherMenu.d.ts.map +1 -0
- package/react/components/toolbar/appLauncher/AppLauncherMenu.js +45 -42
- package/react/components/toolbar/appLauncher/AppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.d.ts +39 -38
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.d.ts.map +1 -0
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js +57 -56
- package/react/components/toolbar/appLauncher/StaticAppLauncherMenu.js.map +1 -1
- package/react/components/toolbar/appLauncher/components/componentList.d.ts +42 -41
- package/react/components/toolbar/appLauncher/components/componentList.d.ts.map +1 -0
- package/react/components/toolbar/appLauncher/components/componentList.js +153 -152
- package/react/components/toolbar/appLauncher/components/componentList.js.map +1 -1
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts +45 -44
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.d.ts.map +1 -0
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js +262 -261
- package/react/components/toolbar/appLauncher/stores/appLauncherStore.js.map +1 -1
- package/react/components/toolbar/dashbar/Dashbar.d.ts +5 -4
- package/react/components/toolbar/dashbar/Dashbar.d.ts.map +1 -0
- package/react/components/toolbar/dashbar/Dashbar.js +370 -369
- package/react/components/toolbar/dashbar/Dashbar.js.map +1 -1
- package/react/components/toolbar/dashbar/DashbarItem.d.ts +18 -17
- package/react/components/toolbar/dashbar/DashbarItem.d.ts.map +1 -0
- package/react/components/toolbar/dashbar/DashbarItem.js +37 -37
- package/react/components/toolbar/dashbar/DashbarItem.js.map +1 -1
- package/react/components/toolbar/index.d.ts +16 -15
- package/react/components/toolbar/index.d.ts.map +1 -0
- package/react/components/toolbar/index.js +15 -15
- package/react/components/toolbar/index.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts +39 -38
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.d.ts.map +1 -0
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js +68 -68
- package/react/components/toolbar/workspaceManagementMenu/WorkspaceManagementMenu.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts +53 -52
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.d.ts.map +1 -0
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js +107 -106
- package/react/components/toolbar/workspaceManagementMenu/components/Workspace.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.d.ts +45 -44
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.d.ts.map +1 -0
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js +73 -73
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceActions.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts +23 -22
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.d.ts.map +1 -0
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js +30 -30
- package/react/components/toolbar/workspaceManagementMenu/components/WorkspaceList.js.map +1 -1
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts +146 -147
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.d.ts.map +1 -0
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js +723 -721
- package/react/components/toolbar/workspaceManagementMenu/stores/workspaceManagementMenuStore.js.map +1 -1
- package/react/components/userPreferences/NotificationsPreferencesContext.d.ts +16 -15
- package/react/components/userPreferences/NotificationsPreferencesContext.d.ts.map +1 -0
- package/react/components/userPreferences/NotificationsPreferencesContext.js +6 -6
- package/react/components/userPreferences/NotificationsPreferencesContext.js.map +1 -1
- package/react/components/userPreferences/UserPreferenceTypes.d.ts +10 -9
- package/react/components/userPreferences/UserPreferenceTypes.d.ts.map +1 -0
- package/react/components/userPreferences/UserPreferenceTypes.js +1 -1
- package/react/components/userPreferences/UserPreferenceTypes.js.map +1 -1
- package/react/components/userPreferences/UserPreferences.d.ts +19 -17
- package/react/components/userPreferences/UserPreferences.d.ts.map +1 -0
- package/react/components/userPreferences/UserPreferences.js +26 -24
- package/react/components/userPreferences/UserPreferences.js.map +1 -1
- package/react/components/userPreferences/UserPreferencesBase.d.ts +4 -3
- package/react/components/userPreferences/UserPreferencesBase.d.ts.map +1 -0
- package/react/components/userPreferences/UserPreferencesBase.js +41 -45
- package/react/components/userPreferences/UserPreferencesBase.js.map +1 -1
- package/react/components/userPreferences/UserPreferencesWrapper.d.ts +5 -4
- package/react/components/userPreferences/UserPreferencesWrapper.d.ts.map +1 -0
- package/react/components/userPreferences/UserPreferencesWrapper.js +28 -26
- package/react/components/userPreferences/UserPreferencesWrapper.js.map +1 -1
- package/react/components/userPreferences/components/ContentSection.d.ts +23 -25
- package/react/components/userPreferences/components/ContentSection.d.ts.map +1 -0
- package/react/components/userPreferences/components/ContentSection.js +22 -25
- package/react/components/userPreferences/components/ContentSection.js.map +1 -1
- package/react/components/userPreferences/components/LeftNav.d.ts +15 -27
- package/react/components/userPreferences/components/LeftNav.d.ts.map +1 -0
- package/react/components/userPreferences/components/LeftNav.js +41 -59
- package/react/components/userPreferences/components/LeftNav.js.map +1 -1
- package/react/components/userPreferences/components/content/DashbarEditor.d.ts +9 -22
- package/react/components/userPreferences/components/content/DashbarEditor.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/DashbarEditor.js +128 -131
- package/react/components/userPreferences/components/content/DashbarEditor.js.map +1 -1
- package/react/components/userPreferences/components/content/DashbarEditorItem.d.ts +11 -10
- package/react/components/userPreferences/components/content/DashbarEditorItem.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/DashbarEditorItem.js +10 -10
- package/react/components/userPreferences/components/content/DashbarEditorItem.js.map +1 -1
- package/react/components/userPreferences/components/content/General.d.ts +9 -8
- package/react/components/userPreferences/components/content/General.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/General.js +32 -31
- package/react/components/userPreferences/components/content/General.js.map +1 -1
- package/react/components/userPreferences/components/content/Notifications.d.ts +12 -11
- package/react/components/userPreferences/components/content/Notifications.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/Notifications.js +35 -35
- package/react/components/userPreferences/components/content/Notifications.js.map +1 -1
- package/react/components/userPreferences/components/content/Workspaces.d.ts +86 -85
- package/react/components/userPreferences/components/content/Workspaces.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/Workspaces.js +534 -531
- package/react/components/userPreferences/components/content/Workspaces.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.d.ts +4 -3
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js +211 -213
- package/react/components/userPreferences/components/content/notificationViews/NotificationsPreferencesHome.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.d.ts +4 -3
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js +134 -133
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourceTypes.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.d.ts +6 -5
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js +79 -78
- package/react/components/userPreferences/components/content/notificationViews/NotificationsSourcesPreferences.js.map +1 -1
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.d.ts +5 -2
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.d.ts.map +1 -0
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.js +36 -34
- package/react/components/userPreferences/components/content/notificationViews/notificationViewsUtils.js.map +1 -1
- package/react/components/userPreferences/components/general/ScheduledClose.d.ts +11 -10
- package/react/components/userPreferences/components/general/ScheduledClose.d.ts.map +1 -0
- package/react/components/userPreferences/components/general/ScheduledClose.js +115 -115
- package/react/components/userPreferences/components/general/ScheduledClose.js.map +1 -1
- package/react/components/userPreferences/components/workspaces/WorkspaceButton.d.ts +9 -8
- package/react/components/userPreferences/components/workspaces/WorkspaceButton.d.ts.map +1 -0
- package/react/components/userPreferences/components/workspaces/WorkspaceButton.js +8 -8
- package/react/components/userPreferences/components/workspaces/WorkspaceButton.js.map +1 -1
- package/react/components/userPreferences/components/workspaces/WorkspaceComponents.d.ts +7 -6
- package/react/components/userPreferences/components/workspaces/WorkspaceComponents.d.ts.map +1 -0
- package/react/components/userPreferences/components/workspaces/WorkspaceComponents.js +10 -10
- package/react/components/userPreferences/components/workspaces/WorkspaceComponents.js.map +1 -1
- package/react/components/userPreferences/components/workspaces/WorkspaceItem.d.ts +36 -46
- package/react/components/userPreferences/components/workspaces/WorkspaceItem.d.ts.map +1 -0
- package/react/components/userPreferences/components/workspaces/WorkspaceItem.js +86 -107
- package/react/components/userPreferences/components/workspaces/WorkspaceItem.js.map +1 -1
- package/react/components/userPreferences/components/workspaces/WorkspaceItemList.d.ts +9 -8
- package/react/components/userPreferences/components/workspaces/WorkspaceItemList.d.ts.map +1 -0
- package/react/components/userPreferences/components/workspaces/WorkspaceItemList.js +20 -20
- package/react/components/userPreferences/components/workspaces/WorkspaceItemList.js.map +1 -1
- package/react/components/userPreferences/index.d.ts +6 -5
- package/react/components/userPreferences/index.d.ts.map +1 -0
- package/react/components/userPreferences/index.js +5 -5
- package/react/components/userPreferences/index.js.map +1 -1
- package/react/components/userPreferences/stores/UserPreferencesStore.d.ts +34 -33
- package/react/components/userPreferences/stores/UserPreferencesStore.d.ts.map +1 -0
- package/react/components/userPreferences/stores/UserPreferencesStore.js +140 -139
- package/react/components/userPreferences/stores/UserPreferencesStore.js.map +1 -1
- package/react/components/windowTitleBar/WindowTitleBarShell.d.ts +273 -269
- package/react/components/windowTitleBar/WindowTitleBarShell.d.ts.map +1 -0
- package/react/components/windowTitleBar/WindowTitleBarShell.js +906 -877
- package/react/components/windowTitleBar/WindowTitleBarShell.js.map +1 -1
- package/react/components/windowTitleBar/components/center/Tab.d.ts +33 -32
- package/react/components/windowTitleBar/components/center/Tab.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/center/Tab.js +63 -62
- package/react/components/windowTitleBar/components/center/Tab.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabList.d.ts +140 -138
- package/react/components/windowTitleBar/components/center/TabList.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/center/TabList.js +619 -615
- package/react/components/windowTitleBar/components/center/TabList.js.map +1 -1
- package/react/components/windowTitleBar/components/center/TabRegion.d.ts +3 -2
- package/react/components/windowTitleBar/components/center/TabRegion.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/center/TabRegion.js +12 -11
- package/react/components/windowTitleBar/components/center/TabRegion.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButton.d.ts +11 -10
- package/react/components/windowTitleBar/components/left/LinkerButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/left/LinkerButton.js +106 -104
- package/react/components/windowTitleBar/components/left/LinkerButton.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.d.ts +85 -84
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js +171 -171
- package/react/components/windowTitleBar/components/left/LinkerButtonDeprecated.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerGroups.d.ts +7 -6
- package/react/components/windowTitleBar/components/left/LinkerGroups.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/left/LinkerGroups.js +21 -20
- package/react/components/windowTitleBar/components/left/LinkerGroups.js.map +1 -1
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.d.ts +50 -49
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js +119 -119
- package/react/components/windowTitleBar/components/left/LinkerGroupsDeprecated.js.map +1 -1
- package/react/components/windowTitleBar/components/left/ShareButton.d.ts +42 -41
- package/react/components/windowTitleBar/components/left/ShareButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/left/ShareButton.js +81 -81
- package/react/components/windowTitleBar/components/left/ShareButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.d.ts +3 -2
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js +14 -13
- package/react/components/windowTitleBar/components/right/AlwaysOnTopButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/CloseButton.d.ts +43 -42
- package/react/components/windowTitleBar/components/right/CloseButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/right/CloseButton.js +53 -53
- package/react/components/windowTitleBar/components/right/CloseButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/GroupingButton.d.ts +58 -57
- package/react/components/windowTitleBar/components/right/GroupingButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/right/GroupingButton.js +90 -90
- package/react/components/windowTitleBar/components/right/GroupingButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/MaximizeButton.d.ts +67 -73
- package/react/components/windowTitleBar/components/right/MaximizeButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/right/MaximizeButton.js +105 -114
- package/react/components/windowTitleBar/components/right/MaximizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/right/MinimizeButton.d.ts +42 -41
- package/react/components/windowTitleBar/components/right/MinimizeButton.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/right/MinimizeButton.js +52 -52
- package/react/components/windowTitleBar/components/right/MinimizeButton.js.map +1 -1
- package/react/components/windowTitleBar/components/windowTitle.d.ts +67 -66
- package/react/components/windowTitleBar/components/windowTitle.d.ts.map +1 -0
- package/react/components/windowTitleBar/components/windowTitle.js +377 -376
- package/react/components/windowTitleBar/components/windowTitle.js.map +1 -1
- package/react/components/windowTitleBar/getOrCreateWindowTitleBarContainer.d.ts +10 -0
- package/react/components/windowTitleBar/getOrCreateWindowTitleBarContainer.d.ts.map +1 -0
- package/react/components/windowTitleBar/getOrCreateWindowTitleBarContainer.js +23 -0
- package/react/components/windowTitleBar/getOrCreateWindowTitleBarContainer.js.map +1 -0
- package/react/components/windowTitleBar/index.d.ts +11 -9
- package/react/components/windowTitleBar/index.d.ts.map +1 -0
- package/react/components/windowTitleBar/index.js +10 -9
- package/react/components/windowTitleBar/index.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts +69 -68
- package/react/components/windowTitleBar/stores/windowTitleBarStore.d.ts.map +1 -0
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js +609 -608
- package/react/components/windowTitleBar/stores/windowTitleBarStore.js.map +1 -1
- package/react/components/windowTitleBar/stores/windowTitleBarStoreDefaults.d.ts +44 -43
- package/react/components/windowTitleBar/stores/windowTitleBarStoreDefaults.d.ts.map +1 -0
- package/react/components/windowTitleBar/stores/windowTitleBarStoreDefaults.js +42 -42
- package/react/components/windowTitleBar/stores/windowTitleBarStoreDefaults.js.map +1 -1
- package/react/components/windowTitleBar/windowTitleBarContext.d.ts +23 -22
- package/react/components/windowTitleBar/windowTitleBarContext.d.ts.map +1 -0
- package/react/components/windowTitleBar/windowTitleBarContext.js +21 -21
- package/react/components/windowTitleBar/windowTitleBarContext.js.map +1 -1
- package/react/components/yesNoDialog/YesNoDialog.d.ts +8 -7
- package/react/components/yesNoDialog/YesNoDialog.d.ts.map +1 -0
- package/react/components/yesNoDialog/YesNoDialog.js +164 -161
- package/react/components/yesNoDialog/YesNoDialog.js.map +1 -1
- package/react/components/yesNoDialog/index.d.ts +2 -1
- package/react/components/yesNoDialog/index.d.ts.map +1 -0
- package/react/components/yesNoDialog/index.js +1 -1
- package/react/components/yesNoDialog/index.js.map +1 -1
- package/react/components/yesNoDialog/timer.d.ts +17 -16
- package/react/components/yesNoDialog/timer.d.ts.map +1 -0
- package/react/components/yesNoDialog/timer.js +31 -31
- package/react/components/yesNoDialog/timer.js.map +1 -1
- package/react/hooks/index.d.ts +5 -2
- package/react/hooks/index.d.ts.map +1 -0
- package/react/hooks/index.js +4 -2
- package/react/hooks/index.js.map +1 -1
- package/react/hooks/useAuth.d.ts +11 -10
- package/react/hooks/useAuth.d.ts.map +1 -0
- package/react/hooks/useAuth.js +26 -25
- package/react/hooks/useAuth.js.map +1 -1
- package/react/hooks/useDashbar.d.ts +9 -8
- package/react/hooks/useDashbar.d.ts.map +1 -0
- package/react/hooks/useDashbar.js +114 -113
- package/react/hooks/useDashbar.js.map +1 -1
- package/react/hooks/useDeepEffect.d.ts +6 -5
- package/react/hooks/useDeepEffect.d.ts.map +1 -0
- package/react/hooks/useDeepEffect.js +33 -33
- package/react/hooks/useDeepEffect.js.map +1 -1
- package/react/hooks/useFavorites.d.ts +25 -24
- package/react/hooks/useFavorites.d.ts.map +1 -0
- package/react/hooks/useFavorites.js +23 -23
- package/react/hooks/useFavorites.js.map +1 -1
- package/react/hooks/useFavoritesShell.d.ts +15 -14
- package/react/hooks/useFavoritesShell.d.ts.map +1 -0
- package/react/hooks/useFavoritesShell.js +78 -77
- package/react/hooks/useFavoritesShell.js.map +1 -1
- package/react/hooks/useFloatingFocus.d.ts +16 -0
- package/react/hooks/useFloatingFocus.d.ts.map +1 -0
- package/react/hooks/useFloatingFocus.js +36 -0
- package/react/hooks/useFloatingFocus.js.map +1 -0
- package/react/hooks/useHotkey.d.ts +9 -8
- package/react/hooks/useHotkey.d.ts.map +1 -0
- package/react/hooks/useHotkey.js +24 -21
- package/react/hooks/useHotkey.js.map +1 -1
- package/react/hooks/useLinker.d.ts +5 -4
- package/react/hooks/useLinker.d.ts.map +1 -0
- package/react/hooks/useLinker.js +110 -109
- package/react/hooks/useLinker.js.map +1 -1
- package/react/hooks/useMenu.d.ts +40 -39
- package/react/hooks/useMenu.d.ts.map +1 -0
- package/react/hooks/useMenu.js +51 -49
- package/react/hooks/useMenu.js.map +1 -1
- package/react/hooks/useNotifications.d.ts +76 -80
- package/react/hooks/useNotifications.d.ts.map +1 -0
- package/react/hooks/useNotifications.js +396 -396
- package/react/hooks/useNotifications.js.map +1 -1
- package/react/hooks/useOAuth.d.ts +17 -0
- package/react/hooks/useOAuth.d.ts.map +1 -0
- package/react/hooks/useOAuth.js +116 -0
- package/react/hooks/useOAuth.js.map +1 -0
- package/react/hooks/useOutsideClickDetector.d.ts +6 -5
- package/react/hooks/useOutsideClickDetector.d.ts.map +1 -0
- package/react/hooks/useOutsideClickDetector.js +17 -17
- package/react/hooks/useOutsideClickDetector.js.map +1 -1
- package/react/hooks/usePubSub.d.ts +22 -21
- package/react/hooks/usePubSub.d.ts.map +1 -0
- package/react/hooks/usePubSub.js +38 -37
- package/react/hooks/usePubSub.js.map +1 -1
- package/react/hooks/useSearch.d.ts +15 -15
- package/react/hooks/useSearch.d.ts.map +1 -0
- package/react/hooks/useSearch.js +72 -72
- package/react/hooks/useSearch.js.map +1 -1
- package/react/hooks/useTitle.d.ts +18 -0
- package/react/hooks/useTitle.d.ts.map +1 -0
- package/react/hooks/useTitle.js +29 -0
- package/react/hooks/useTitle.js.map +1 -0
- package/react/hooks/useToolbar.d.ts +11 -10
- package/react/hooks/useToolbar.d.ts.map +1 -0
- package/react/hooks/useToolbar.js +151 -150
- package/react/hooks/useToolbar.js.map +1 -1
- package/react/index.d.ts +3 -0
- package/react/index.d.ts.map +1 -0
- package/react/index.js +3 -0
- package/react/index.js.map +1 -0
- package/react/reducers/favoriteReducer.d.ts +12 -11
- package/react/reducers/favoriteReducer.d.ts.map +1 -0
- package/react/reducers/favoriteReducer.js +27 -27
- package/react/reducers/favoriteReducer.js.map +1 -1
- package/react/reducers/linkerReducer.d.ts +14 -13
- package/react/reducers/linkerReducer.d.ts.map +1 -0
- package/react/reducers/linkerReducer.js +43 -43
- package/react/reducers/linkerReducer.js.map +1 -1
- package/react/reducers/menuReducer.d.ts +37 -36
- package/react/reducers/menuReducer.d.ts.map +1 -0
- package/react/reducers/menuReducer.js +65 -65
- package/react/reducers/menuReducer.js.map +1 -1
- package/react/reducers/rootReducer.d.ts +220 -219
- package/react/reducers/rootReducer.d.ts.map +1 -0
- package/react/reducers/rootReducer.js +20 -20
- package/react/reducers/rootReducer.js.map +1 -1
- package/react/reducers/searchReducer.d.ts +16 -15
- package/react/reducers/searchReducer.d.ts.map +1 -0
- package/react/reducers/searchReducer.js +27 -27
- package/react/reducers/searchReducer.js.map +1 -1
- package/react/reducers/smartDesktopDesignerReducer.d.ts +6 -5
- package/react/reducers/smartDesktopDesignerReducer.d.ts.map +1 -0
- package/react/reducers/smartDesktopDesignerReducer.js +170 -170
- package/react/reducers/smartDesktopDesignerReducer.js.map +1 -1
- package/react/reducers/toolbarReducer.d.ts +11 -10
- package/react/reducers/toolbarReducer.d.ts.map +1 -0
- package/react/reducers/toolbarReducer.js +29 -29
- package/react/reducers/toolbarReducer.js.map +1 -1
- package/react/reducers/workspaceReducer.d.ts +11 -10
- package/react/reducers/workspaceReducer.d.ts.map +1 -0
- package/react/reducers/workspaceReducer.js +26 -26
- package/react/reducers/workspaceReducer.js.map +1 -1
- package/react/store.d.ts +419 -418
- package/react/store.d.ts.map +1 -0
- package/react/store.js +24 -23
- package/react/store.js.map +1 -1
- package/react/types/advancedAppLauncherTypes.d.ts +45 -46
- package/react/types/advancedAppLauncherTypes.d.ts.map +1 -0
- package/react/types/advancedAppLauncherTypes.js +1 -1
- package/react/types/advancedAppLauncherTypes.js.map +1 -1
- package/react/types/dashbarTypes.d.ts +40 -39
- package/react/types/dashbarTypes.d.ts.map +1 -0
- package/react/types/dashbarTypes.js +1 -1
- package/react/types/dashbarTypes.js.map +1 -1
- package/react/types/favoriteTypes.d.ts +9 -10
- package/react/types/favoriteTypes.d.ts.map +1 -0
- package/react/types/favoriteTypes.js +1 -1
- package/react/types/favoriteTypes.js.map +1 -1
- package/react/types/fdc3.d.ts +30 -35
- package/react/types/fdc3.d.ts.map +1 -0
- package/react/types/fdc3.js +6 -6
- package/react/types/fdc3.js.map +1 -1
- package/react/types/hotkeyTypes.d.ts +2 -1
- package/react/types/hotkeyTypes.d.ts.map +1 -0
- package/react/types/hotkeyTypes.js +1 -1
- package/react/types/hotkeyTypes.js.map +1 -1
- package/react/types/linkerTypes.d.ts +28 -27
- package/react/types/linkerTypes.d.ts.map +1 -0
- package/react/types/linkerTypes.js +2 -2
- package/react/types/linkerTypes.js.map +1 -1
- package/react/types/smartDesktopDesignerTypes.d.ts +183 -183
- package/react/types/smartDesktopDesignerTypes.d.ts.map +1 -0
- package/react/types/smartDesktopDesignerTypes.js +19 -19
- package/react/types/smartDesktopDesignerTypes.js.map +1 -1
- package/react/types/windowTitleBar.d.ts +50 -49
- package/react/types/windowTitleBar.d.ts.map +1 -0
- package/react/types/windowTitleBar.js +1 -1
- package/react/types/windowTitleBar.js.map +1 -1
- package/react/types/workspaceTypes.d.ts +31 -30
- package/react/types/workspaceTypes.d.ts.map +1 -0
- package/react/types/workspaceTypes.js +1 -1
- package/react/types/workspaceTypes.js.map +1 -1
- package/typedefs/FDC3/api/AppIntent.d.ts +14 -0
- package/typedefs/FDC3/api/AppIntent.d.ts.map +1 -0
- package/typedefs/FDC3/api/AppIntent.js +6 -0
- package/typedefs/FDC3/api/AppIntent.js.map +1 -0
- package/typedefs/FDC3/api/AppMetadata.d.ts +26 -0
- package/typedefs/FDC3/api/AppMetadata.d.ts.map +1 -0
- package/typedefs/FDC3/api/AppMetadata.js +6 -0
- package/typedefs/FDC3/api/AppMetadata.js.map +1 -0
- package/typedefs/FDC3/api/Channel.d.ts +65 -0
- package/typedefs/FDC3/api/Channel.d.ts.map +1 -0
- package/typedefs/FDC3/api/Channel.js +6 -0
- package/typedefs/FDC3/api/Channel.js.map +1 -0
- package/typedefs/FDC3/api/DesktopAgent.d.ts +181 -0
- package/typedefs/FDC3/api/DesktopAgent.d.ts.map +1 -0
- package/typedefs/FDC3/api/DesktopAgent.js +6 -0
- package/typedefs/FDC3/api/DesktopAgent.js.map +1 -0
- package/typedefs/FDC3/api/DisplayMetadata.d.ts +24 -0
- package/typedefs/FDC3/api/DisplayMetadata.d.ts.map +1 -0
- package/typedefs/FDC3/api/DisplayMetadata.js +6 -0
- package/typedefs/FDC3/api/DisplayMetadata.js.map +1 -0
- package/typedefs/FDC3/api/Errors.d.ts +21 -0
- package/typedefs/FDC3/api/Errors.d.ts.map +1 -0
- package/typedefs/FDC3/api/Errors.js +24 -0
- package/typedefs/FDC3/api/Errors.js.map +1 -0
- package/typedefs/FDC3/api/ImplementationMetadata.d.ts +18 -0
- package/typedefs/FDC3/api/ImplementationMetadata.d.ts.map +1 -0
- package/typedefs/FDC3/api/ImplementationMetadata.js +6 -0
- package/typedefs/FDC3/api/ImplementationMetadata.js.map +1 -0
- package/typedefs/FDC3/api/IntentMetadata.d.ts +14 -0
- package/typedefs/FDC3/api/IntentMetadata.d.ts.map +1 -0
- package/typedefs/FDC3/api/IntentMetadata.js +6 -0
- package/typedefs/FDC3/api/IntentMetadata.js.map +1 -0
- package/typedefs/FDC3/api/IntentResolution.d.ts +25 -0
- package/typedefs/FDC3/api/IntentResolution.d.ts.map +1 -0
- package/typedefs/FDC3/api/IntentResolution.js +6 -0
- package/typedefs/FDC3/api/IntentResolution.js.map +1 -0
- package/typedefs/FDC3/api/Listener.d.ts +11 -0
- package/typedefs/FDC3/api/Listener.d.ts.map +1 -0
- package/typedefs/FDC3/api/Listener.js +6 -0
- package/typedefs/FDC3/api/Listener.js.map +1 -0
- package/typedefs/FDC3/api/Types.d.ts +9 -0
- package/typedefs/FDC3/api/Types.d.ts.map +1 -0
- package/typedefs/FDC3/api/Types.js +6 -0
- package/typedefs/FDC3/api/Types.js.map +1 -0
- package/typedefs/FDC3/context/ContextType.d.ts +11 -0
- package/typedefs/FDC3/context/ContextType.d.ts.map +1 -0
- package/typedefs/FDC3/context/ContextType.js +11 -0
- package/typedefs/FDC3/context/ContextType.js.map +1 -0
- package/typedefs/FDC3/context/ContextTypes.d.ts +105 -0
- package/typedefs/FDC3/context/ContextTypes.d.ts.map +1 -0
- package/typedefs/FDC3/context/ContextTypes.js +278 -0
- package/typedefs/FDC3/context/ContextTypes.js.map +1 -0
- package/typedefs/FDC3/index.d.ts +19 -0
- package/typedefs/FDC3/index.d.ts.map +1 -0
- package/typedefs/FDC3/index.js +19 -0
- package/typedefs/FDC3/index.js.map +1 -0
- package/typedefs/FDC3/intents/Intents.d.ts +11 -0
- package/typedefs/FDC3/intents/Intents.d.ts.map +1 -0
- package/typedefs/FDC3/intents/Intents.js +12 -0
- package/typedefs/FDC3/intents/Intents.js.map +1 -0
- package/typedefs/index.d.ts +2 -0
- package/typedefs/index.d.ts.map +1 -0
- package/typedefs/index.js +3 -0
- package/typedefs/index.js.map +1 -0
- package/types.d.ts +22 -0
- package/types.d.ts.map +1 -0
- package/types.js +5 -0
- package/types.js.map +1 -0
- package/react/assets/css/focus.css +0 -4
- package/react/componentTemplateGenerator.d.ts +0 -1
- package/react/componentTemplateGenerator.js +0 -150
- package/react/componentTemplateGenerator.js.map +0 -1
- package/react/components/appCatalog/components/Tag.d.ts +0 -13
- package/react/components/appCatalog/components/Tag.js +0 -23
- package/react/components/appCatalog/components/Tag.js.map +0 -1
- package/react/components/common/Accordion.d.ts +0 -11
- package/react/components/common/Accordion.js +0 -20
- package/react/components/common/Accordion.js.map +0 -1
- package/react/components/common/ButtonTile.d.ts +0 -4
- package/react/components/common/ButtonTile.js +0 -12
- package/react/components/common/ButtonTile.js.map +0 -1
- package/react/components/common/ColorPicker.d.ts +0 -20
- package/react/components/common/ColorPicker.js +0 -92
- package/react/components/common/ColorPicker.js.map +0 -1
- package/react/components/common/DropZone.d.ts +0 -22
- package/react/components/common/DropZone.js +0 -65
- package/react/components/common/DropZone.js.map +0 -1
- package/react/components/common/FileInput.d.ts +0 -30
- package/react/components/common/FileInput.js +0 -123
- package/react/components/common/FileInput.js.map +0 -1
- package/react/components/common/FinsembleLink.d.ts +0 -6
- package/react/components/common/FinsembleLink.js +0 -12
- package/react/components/common/FinsembleLink.js.map +0 -1
- package/react/components/common/ImagePreview.d.ts +0 -21
- package/react/components/common/ImagePreview.js +0 -43
- package/react/components/common/ImagePreview.js.map +0 -1
- package/react/components/common/InputTable.d.ts +0 -18
- package/react/components/common/InputTable.js +0 -57
- package/react/components/common/InputTable.js.map +0 -1
- package/react/components/common/LoadingSpinner.d.ts +0 -3
- package/react/components/common/LoadingSpinner.js +0 -11
- package/react/components/common/LoadingSpinner.js.map +0 -1
- package/react/components/common/Tab.d.ts +0 -11
- package/react/components/common/Tab.js +0 -58
- package/react/components/common/Tab.js.map +0 -1
- package/react/components/common/Tooltip.d.ts +0 -14
- package/react/components/common/Tooltip.js +0 -30
- package/react/components/common/Tooltip.js.map +0 -1
- package/react/components/common/file_helpers.d.ts +0 -2
- package/react/components/common/file_helpers.js +0 -22
- package/react/components/common/file_helpers.js.map +0 -1
- package/react/components/common/helpers.d.ts +0 -5
- package/react/components/common/helpers.js +0 -136
- package/react/components/common/helpers.js.map +0 -1
- package/react/components/common/stories/Accordion.stories.d.ts +0 -14
- package/react/components/common/stories/Accordion.stories.js +0 -42
- package/react/components/common/stories/Accordion.stories.js.map +0 -1
- package/react/components/common/stories/Button.stories.d.ts +0 -22
- package/react/components/common/stories/Button.stories.js +0 -77
- package/react/components/common/stories/Button.stories.js.map +0 -1
- package/react/components/common/stories/ButtonIcon.stories.d.ts +0 -15
- package/react/components/common/stories/ButtonIcon.stories.js +0 -35
- package/react/components/common/stories/ButtonIcon.stories.js.map +0 -1
- package/react/components/common/stories/ButtonRow.stories.d.ts +0 -14
- package/react/components/common/stories/ButtonRow.stories.js +0 -39
- package/react/components/common/stories/ButtonRow.stories.js.map +0 -1
- package/react/components/common/stories/ButtonTile.stories.d.ts +0 -17
- package/react/components/common/stories/ButtonTile.stories.js +0 -45
- package/react/components/common/stories/ButtonTile.stories.js.map +0 -1
- package/react/components/common/stories/Checkbox.stories.d.ts +0 -13
- package/react/components/common/stories/Checkbox.stories.js +0 -29
- package/react/components/common/stories/Checkbox.stories.js.map +0 -1
- package/react/components/common/stories/ColorPicker.stories.d.ts +0 -13
- package/react/components/common/stories/ColorPicker.stories.js +0 -29
- package/react/components/common/stories/ColorPicker.stories.js.map +0 -1
- package/react/components/common/stories/ContextMenu.stories.d.ts +0 -38
- package/react/components/common/stories/ContextMenu.stories.js +0 -70
- package/react/components/common/stories/ContextMenu.stories.js.map +0 -1
- package/react/components/common/stories/DropZone.stories.d.ts +0 -11
- package/react/components/common/stories/DropZone.stories.js +0 -16
- package/react/components/common/stories/DropZone.stories.js.map +0 -1
- package/react/components/common/stories/DropdownButton.stories.d.ts +0 -33
- package/react/components/common/stories/DropdownButton.stories.js +0 -42
- package/react/components/common/stories/DropdownButton.stories.js.map +0 -1
- package/react/components/common/stories/FileInput.stories.d.ts +0 -18
- package/react/components/common/stories/FileInput.stories.js +0 -59
- package/react/components/common/stories/FileInput.stories.js.map +0 -1
- package/react/components/common/stories/FinsembleIcon.stories.d.ts +0 -3
- package/react/components/common/stories/FinsembleIcon.stories.js +0 -43
- package/react/components/common/stories/FinsembleIcon.stories.js.map +0 -1
- package/react/components/common/stories/FinsembleSelect.stories.d.ts +0 -20
- package/react/components/common/stories/FinsembleSelect.stories.js +0 -188
- package/react/components/common/stories/FinsembleSelect.stories.js.map +0 -1
- package/react/components/common/stories/FinsembleToggle.stories.d.ts +0 -13
- package/react/components/common/stories/FinsembleToggle.stories.js +0 -28
- package/react/components/common/stories/FinsembleToggle.stories.js.map +0 -1
- package/react/components/common/stories/FinsembleToggleButtonBar.stories.d.ts +0 -14
- package/react/components/common/stories/FinsembleToggleButtonBar.stories.js +0 -97
- package/react/components/common/stories/FinsembleToggleButtonBar.stories.js.map +0 -1
- package/react/components/common/stories/Header.stories.d.ts +0 -14
- package/react/components/common/stories/Header.stories.js +0 -38
- package/react/components/common/stories/Header.stories.js.map +0 -1
- package/react/components/common/stories/ImagePreview.stories.d.ts +0 -16
- package/react/components/common/stories/ImagePreview.stories.js +0 -55
- package/react/components/common/stories/ImagePreview.stories.js.map +0 -1
- package/react/components/common/stories/InputTable.stories.d.ts +0 -13
- package/react/components/common/stories/InputTable.stories.js +0 -45
- package/react/components/common/stories/InputTable.stories.js.map +0 -1
- package/react/components/common/stories/LoadingSpinner.stories.d.ts +0 -9
- package/react/components/common/stories/LoadingSpinner.stories.js +0 -10
- package/react/components/common/stories/LoadingSpinner.stories.js.map +0 -1
- package/react/components/common/stories/Tab.stories.d.ts +0 -12
- package/react/components/common/stories/Tab.stories.js +0 -28
- package/react/components/common/stories/Tab.stories.js.map +0 -1
- package/react/components/common/stories/TimeSelect.stories.d.ts +0 -11
- package/react/components/common/stories/TimeSelect.stories.js +0 -20
- package/react/components/common/stories/TimeSelect.stories.js.map +0 -1
- package/react/components/common/stories/Tooltip.stories.d.ts +0 -27
- package/react/components/common/stories/Tooltip.stories.js +0 -47
- package/react/components/common/stories/Tooltip.stories.js.map +0 -1
- package/react/components/common/tests/Accordion.spec.d.ts +0 -1
- package/react/components/common/tests/Accordion.spec.js +0 -59
- package/react/components/common/tests/Accordion.spec.js.map +0 -1
- package/react/components/common/tests/ButtonRow.spec.d.ts +0 -1
- package/react/components/common/tests/ButtonRow.spec.js +0 -30
- package/react/components/common/tests/ButtonRow.spec.js.map +0 -1
- package/react/components/common/tests/Checkbox.spec.d.ts +0 -1
- package/react/components/common/tests/Checkbox.spec.js +0 -34
- package/react/components/common/tests/Checkbox.spec.js.map +0 -1
- package/react/components/common/tests/ColorPicker.spec.d.ts +0 -1
- package/react/components/common/tests/ColorPicker.spec.js +0 -96
- package/react/components/common/tests/ColorPicker.spec.js.map +0 -1
- package/react/components/common/tests/ContextMenu.spec.d.ts +0 -1
- package/react/components/common/tests/ContextMenu.spec.js +0 -108
- package/react/components/common/tests/ContextMenu.spec.js.map +0 -1
- package/react/components/common/tests/DropZone.spec.d.ts +0 -1
- package/react/components/common/tests/DropZone.spec.js +0 -55
- package/react/components/common/tests/DropZone.spec.js.map +0 -1
- package/react/components/common/tests/DropdownButton.spec.d.ts +0 -1
- package/react/components/common/tests/DropdownButton.spec.js +0 -32
- package/react/components/common/tests/DropdownButton.spec.js.map +0 -1
- package/react/components/common/tests/FileInput.spec.d.ts +0 -1
- package/react/components/common/tests/FileInput.spec.js +0 -72
- package/react/components/common/tests/FileInput.spec.js.map +0 -1
- package/react/components/common/tests/FinsembleSelect.spec.d.ts +0 -1
- package/react/components/common/tests/FinsembleSelect.spec.js +0 -89
- package/react/components/common/tests/FinsembleSelect.spec.js.map +0 -1
- package/react/components/common/tests/FinsembleToggle.spec.d.ts +0 -1
- package/react/components/common/tests/FinsembleToggle.spec.js +0 -29
- package/react/components/common/tests/FinsembleToggle.spec.js.map +0 -1
- package/react/components/common/tests/FinsembleToggleButtonBar.spec.d.ts +0 -1
- package/react/components/common/tests/FinsembleToggleButtonBar.spec.js +0 -41
- package/react/components/common/tests/FinsembleToggleButtonBar.spec.js.map +0 -1
- package/react/components/common/tests/Header.spec.d.ts +0 -1
- package/react/components/common/tests/Header.spec.js +0 -24
- package/react/components/common/tests/Header.spec.js.map +0 -1
- package/react/components/common/tests/ImagePreview.spec.d.ts +0 -1
- package/react/components/common/tests/ImagePreview.spec.js +0 -46
- package/react/components/common/tests/ImagePreview.spec.js.map +0 -1
- package/react/components/common/tests/InputTable.spec.d.ts +0 -1
- package/react/components/common/tests/InputTable.spec.js +0 -166
- package/react/components/common/tests/InputTable.spec.js.map +0 -1
- package/react/components/common/tests/Tab.spec.d.ts +0 -1
- package/react/components/common/tests/Tab.spec.js +0 -25
- package/react/components/common/tests/Tab.spec.js.map +0 -1
- package/react/components/common/tests/TimeSelect.spec.d.ts +0 -1
- package/react/components/common/tests/TimeSelect.spec.js +0 -75
- package/react/components/common/tests/TimeSelect.spec.js.map +0 -1
- package/react/components/common/tests/Tooltip.spec.d.ts +0 -1
- package/react/components/common/tests/Tooltip.spec.js +0 -50
- package/react/components/common/tests/Tooltip.spec.js.map +0 -1
- package/react/components/favorites/FavoritesShell.spec.d.ts +0 -1
- package/react/components/favorites/FavoritesShell.spec.js +0 -64
- package/react/components/favorites/FavoritesShell.spec.js.map +0 -1
- package/react/components/favorites/FavoritesShell.stories.d.ts +0 -9
- package/react/components/favorites/FavoritesShell.stories.js +0 -46
- package/react/components/favorites/FavoritesShell.stories.js.map +0 -1
- package/react/components/favorites/index.d.ts +0 -2
- package/react/components/favorites/index.js +0 -3
- package/react/components/favorites/index.js.map +0 -1
- package/react/components/fdc3Resolver/ResolverDialog.spec.d.ts +0 -1
- package/react/components/fdc3Resolver/ResolverDialog.spec.js +0 -52
- package/react/components/fdc3Resolver/ResolverDialog.spec.js.map +0 -1
- package/react/components/fdc3Resolver/ResolverDialog.stories.d.ts +0 -13
- package/react/components/fdc3Resolver/ResolverDialog.stories.js +0 -175
- package/react/components/fdc3Resolver/ResolverDialog.stories.js.map +0 -1
- package/react/components/legacyControls/FinsembleMenuSection.d.ts +0 -17
- package/react/components/legacyControls/FinsembleMenuSection.js +0 -123
- package/react/components/legacyControls/FinsembleMenuSection.js.map +0 -1
- package/react/components/legacyControls/stories/FinsembleDialog.stories.d.ts +0 -10
- package/react/components/legacyControls/stories/FinsembleDialog.stories.js +0 -21
- package/react/components/legacyControls/stories/FinsembleDialog.stories.js.map +0 -1
- package/react/components/legacyControls/stories/FinsembleDialogButton.stories.d.ts +0 -18
- package/react/components/legacyControls/stories/FinsembleDialogButton.stories.js +0 -37
- package/react/components/legacyControls/stories/FinsembleDialogButton.stories.js.map +0 -1
- package/react/components/legacyControls/stories/FinsembleDialogQuestion.stories.d.ts +0 -14
- package/react/components/legacyControls/stories/FinsembleDialogQuestion.stories.js +0 -15
- package/react/components/legacyControls/stories/FinsembleDialogQuestion.stories.js.map +0 -1
- package/react/components/legacyControls/stories/FinsembleDialogTextInput.stories.d.ts +0 -16
- package/react/components/legacyControls/stories/FinsembleDialogTextInput.stories.js +0 -51
- package/react/components/legacyControls/stories/FinsembleDialogTextInput.stories.js.map +0 -1
- package/react/components/legacyControls/tests/FinsembleDialog.spec.d.ts +0 -1
- package/react/components/legacyControls/tests/FinsembleDialog.spec.js +0 -12
- package/react/components/legacyControls/tests/FinsembleDialog.spec.js.map +0 -1
- package/react/components/legacyControls/tests/FinsembleDialogButton.spec.d.ts +0 -1
- package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js +0 -39
- package/react/components/legacyControls/tests/FinsembleDialogButton.spec.js.map +0 -1
- package/react/components/legacyControls/tests/FinsembleDialogQuestion.spec.d.ts +0 -1
- package/react/components/legacyControls/tests/FinsembleDialogQuestion.spec.js +0 -19
- package/react/components/legacyControls/tests/FinsembleDialogQuestion.spec.js.map +0 -1
- package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.d.ts +0 -1
- package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js +0 -83
- package/react/components/legacyControls/tests/FinsembleDialogTextInput.spec.js.map +0 -1
- package/react/components/notifications/icons/Card.d.ts +0 -2
- package/react/components/notifications/icons/Card.js +0 -11
- package/react/components/notifications/icons/Card.js.map +0 -1
- package/react/components/notifications/icons/Chevron.d.ts +0 -2
- package/react/components/notifications/icons/Chevron.js +0 -14
- package/react/components/notifications/icons/Chevron.js.map +0 -1
- package/react/components/notifications/icons/CloseIcon.d.ts +0 -2
- package/react/components/notifications/icons/CloseIcon.js +0 -10
- package/react/components/notifications/icons/CloseIcon.js.map +0 -1
- package/react/components/notifications/stories/NotificationCardShell.stories.d.ts +0 -14
- package/react/components/notifications/stories/NotificationCardShell.stories.js +0 -108
- package/react/components/notifications/stories/NotificationCardShell.stories.js.map +0 -1
- package/react/components/notifications/tests/NotificationCardShell.spec.d.ts +0 -1
- package/react/components/notifications/tests/NotificationCardShell.spec.js +0 -91
- package/react/components/notifications/tests/NotificationCardShell.spec.js.map +0 -1
- package/react/components/processMonitor/helpers.spec.d.ts +0 -1
- package/react/components/processMonitor/helpers.spec.js +0 -48
- package/react/components/processMonitor/helpers.spec.js.map +0 -1
- package/react/components/sdd/AddApp.d.ts +0 -17
- package/react/components/sdd/AddApp.js +0 -178
- package/react/components/sdd/AddApp.js.map +0 -1
- package/react/components/sdd/AppEditAccess.d.ts +0 -16
- package/react/components/sdd/AppEditAccess.js +0 -130
- package/react/components/sdd/AppEditAccess.js.map +0 -1
- package/react/components/sdd/AppEditPage.d.ts +0 -26
- package/react/components/sdd/AppEditPage.js +0 -421
- package/react/components/sdd/AppEditPage.js.map +0 -1
- package/react/components/sdd/Appearance.d.ts +0 -18
- package/react/components/sdd/Appearance.js +0 -64
- package/react/components/sdd/Appearance.js.map +0 -1
- package/react/components/sdd/Application.d.ts +0 -37
- package/react/components/sdd/Application.js +0 -269
- package/react/components/sdd/Application.js.map +0 -1
- package/react/components/sdd/Applications.d.ts +0 -20
- package/react/components/sdd/Applications.js +0 -281
- package/react/components/sdd/Applications.js.map +0 -1
- package/react/components/sdd/AssetsPage.d.ts +0 -15
- package/react/components/sdd/AssetsPage.js +0 -59
- package/react/components/sdd/AssetsPage.js.map +0 -1
- package/react/components/sdd/Authentication.d.ts +0 -9
- package/react/components/sdd/Authentication.js +0 -61
- package/react/components/sdd/Authentication.js.map +0 -1
- package/react/components/sdd/AuthenticationProviderConfig.d.ts +0 -9
- package/react/components/sdd/AuthenticationProviderConfig.js +0 -90
- package/react/components/sdd/AuthenticationProviderConfig.js.map +0 -1
- package/react/components/sdd/Content.d.ts +0 -8
- package/react/components/sdd/Content.js +0 -7
- package/react/components/sdd/Content.js.map +0 -1
- package/react/components/sdd/ContentHeader.d.ts +0 -5
- package/react/components/sdd/ContentHeader.js +0 -10
- package/react/components/sdd/ContentHeader.js.map +0 -1
- package/react/components/sdd/CurrentView.d.ts +0 -11
- package/react/components/sdd/CurrentView.js +0 -14
- package/react/components/sdd/CurrentView.js.map +0 -1
- package/react/components/sdd/EditPreload.d.ts +0 -13
- package/react/components/sdd/EditPreload.js +0 -183
- package/react/components/sdd/EditPreload.js.map +0 -1
- package/react/components/sdd/Export.d.ts +0 -17
- package/react/components/sdd/Export.js +0 -65
- package/react/components/sdd/Export.js.map +0 -1
- package/react/components/sdd/ExportCloud.d.ts +0 -6
- package/react/components/sdd/ExportCloud.js +0 -38
- package/react/components/sdd/ExportCloud.js.map +0 -1
- package/react/components/sdd/ExportDeployInfo.d.ts +0 -2
- package/react/components/sdd/ExportDeployInfo.js +0 -18
- package/react/components/sdd/ExportDeployInfo.js.map +0 -1
- package/react/components/sdd/ExportZip.d.ts +0 -6
- package/react/components/sdd/ExportZip.js +0 -48
- package/react/components/sdd/ExportZip.js.map +0 -1
- package/react/components/sdd/ItemList.d.ts +0 -17
- package/react/components/sdd/ItemList.js +0 -58
- package/react/components/sdd/ItemList.js.map +0 -1
- package/react/components/sdd/Navigation.d.ts +0 -11
- package/react/components/sdd/Navigation.js +0 -59
- package/react/components/sdd/Navigation.js.map +0 -1
- package/react/components/sdd/OptionalSettingsView.d.ts +0 -10
- package/react/components/sdd/OptionalSettingsView.js +0 -48
- package/react/components/sdd/OptionalSettingsView.js.map +0 -1
- package/react/components/sdd/Preloads.d.ts +0 -6
- package/react/components/sdd/Preloads.js +0 -24
- package/react/components/sdd/Preloads.js.map +0 -1
- package/react/components/sdd/ProjectErrors.d.ts +0 -11
- package/react/components/sdd/ProjectErrors.js +0 -25
- package/react/components/sdd/ProjectErrors.js.map +0 -1
- package/react/components/sdd/Publish.d.ts +0 -8
- package/react/components/sdd/Publish.js +0 -112
- package/react/components/sdd/Publish.js.map +0 -1
- package/react/components/sdd/PublishProgress.d.ts +0 -9
- package/react/components/sdd/PublishProgress.js +0 -24
- package/react/components/sdd/PublishProgress.js.map +0 -1
- package/react/components/sdd/SmartDesktopDesigner.d.ts +0 -30
- package/react/components/sdd/SmartDesktopDesigner.js +0 -146
- package/react/components/sdd/SmartDesktopDesigner.js.map +0 -1
- package/react/components/sdd/ThemePage.d.ts +0 -14
- package/react/components/sdd/ThemePage.js +0 -106
- package/react/components/sdd/ThemePage.js.map +0 -1
- package/react/components/sdd/Themes.d.ts +0 -22
- package/react/components/sdd/Themes.js +0 -15
- package/react/components/sdd/Themes.js.map +0 -1
- package/react/components/sdd/Toolbar.d.ts +0 -16
- package/react/components/sdd/Toolbar.js +0 -134
- package/react/components/sdd/Toolbar.js.map +0 -1
- package/react/components/sdd/View.d.ts +0 -8
- package/react/components/sdd/View.js +0 -7
- package/react/components/sdd/View.js.map +0 -1
- package/react/components/sdd/appEditPage/Behavior.d.ts +0 -34
- package/react/components/sdd/appEditPage/Behavior.js +0 -134
- package/react/components/sdd/appEditPage/Behavior.js.map +0 -1
- package/react/components/sdd/appEditPage/Component.d.ts +0 -22
- package/react/components/sdd/appEditPage/Component.js +0 -76
- package/react/components/sdd/appEditPage/Component.js.map +0 -1
- package/react/components/sdd/appEditPage/DebugToolkit.d.ts +0 -9
- package/react/components/sdd/appEditPage/DebugToolkit.js +0 -20
- package/react/components/sdd/appEditPage/DebugToolkit.js.map +0 -1
- package/react/components/sdd/appEditPage/Interop.d.ts +0 -10
- package/react/components/sdd/appEditPage/Interop.js +0 -40
- package/react/components/sdd/appEditPage/Interop.js.map +0 -1
- package/react/components/sdd/appEditPage/Position.d.ts +0 -18
- package/react/components/sdd/appEditPage/Position.js +0 -72
- package/react/components/sdd/appEditPage/Position.js.map +0 -1
- package/react/components/sdd/appEditPage/Preloads.d.ts +0 -9
- package/react/components/sdd/appEditPage/Preloads.js +0 -16
- package/react/components/sdd/appEditPage/Preloads.js.map +0 -1
- package/react/components/sdd/appEditPage/SelectConnect.d.ts +0 -15
- package/react/components/sdd/appEditPage/SelectConnect.js +0 -28
- package/react/components/sdd/appEditPage/SelectConnect.js.map +0 -1
- package/react/components/sdd/appEditPage/Workspace.d.ts +0 -12
- package/react/components/sdd/appEditPage/Workspace.js +0 -30
- package/react/components/sdd/appEditPage/Workspace.js.map +0 -1
- package/react/components/sdd/common/fsbl_functions.d.ts +0 -2
- package/react/components/sdd/common/fsbl_functions.js +0 -17
- package/react/components/sdd/common/fsbl_functions.js.map +0 -1
- package/react/components/sdd/common/getCSSVars.d.ts +0 -1
- package/react/components/sdd/common/getCSSVars.js +0 -15
- package/react/components/sdd/common/getCSSVars.js.map +0 -1
- package/react/components/sdd/common/setPreloadDefaults.d.ts +0 -1
- package/react/components/sdd/common/setPreloadDefaults.js +0 -26
- package/react/components/sdd/common/setPreloadDefaults.js.map +0 -1
- package/react/components/sdd/common/views.d.ts +0 -3
- package/react/components/sdd/common/views.js +0 -190
- package/react/components/sdd/common/views.js.map +0 -1
- package/react/components/sdd/fixtures/apps.d.ts +0 -9
- package/react/components/sdd/fixtures/apps.js +0 -383
- package/react/components/sdd/fixtures/apps.js.map +0 -1
- package/react/components/sdd/fixtures/authenticationProps.d.ts +0 -2
- package/react/components/sdd/fixtures/authenticationProps.js +0 -23
- package/react/components/sdd/fixtures/authenticationProps.js.map +0 -1
- package/react/components/sdd/fixtures/configTemplate.d.ts +0 -44
- package/react/components/sdd/fixtures/configTemplate.js +0 -54
- package/react/components/sdd/fixtures/configTemplate.js.map +0 -1
- package/react/components/sdd/fixtures/exportProps.d.ts +0 -2
- package/react/components/sdd/fixtures/exportProps.js +0 -34
- package/react/components/sdd/fixtures/exportProps.js.map +0 -1
- package/react/components/sdd/fixtures/preloads.d.ts +0 -3
- package/react/components/sdd/fixtures/preloads.js +0 -59
- package/react/components/sdd/fixtures/preloads.js.map +0 -1
- package/react/components/sdd/fixtures/projectErrorsProps.d.ts +0 -3
- package/react/components/sdd/fixtures/projectErrorsProps.js +0 -13
- package/react/components/sdd/fixtures/projectErrorsProps.js.map +0 -1
- package/react/components/sdd/fixtures/publishProgress.d.ts +0 -7
- package/react/components/sdd/fixtures/publishProgress.js +0 -358
- package/react/components/sdd/fixtures/publishProgress.js.map +0 -1
- package/react/components/sdd/fixtures/themeProps.d.ts +0 -26
- package/react/components/sdd/fixtures/themeProps.js +0 -18
- package/react/components/sdd/fixtures/themeProps.js.map +0 -1
- package/react/components/sdd/fixtures/views.d.ts +0 -3
- package/react/components/sdd/fixtures/views.js +0 -74
- package/react/components/sdd/fixtures/views.js.map +0 -1
- package/react/components/sdd/sdd_helpers.d.ts +0 -20
- package/react/components/sdd/sdd_helpers.js +0 -36
- package/react/components/sdd/sdd_helpers.js.map +0 -1
- package/react/components/sdd/smartDesktopClient.d.ts +0 -466
- package/react/components/sdd/smartDesktopClient.js +0 -906
- package/react/components/sdd/smartDesktopClient.js.map +0 -1
- package/react/components/sdd/smartDesktopClient.spec.d.ts +0 -1
- package/react/components/sdd/smartDesktopClient.spec.js +0 -64
- package/react/components/sdd/smartDesktopClient.spec.js.map +0 -1
- package/react/components/sdd/stories/AddApp.stories.d.ts +0 -11
- package/react/components/sdd/stories/AddApp.stories.js +0 -26
- package/react/components/sdd/stories/AddApp.stories.js.map +0 -1
- package/react/components/sdd/stories/AppEditPage.stories.d.ts +0 -17
- package/react/components/sdd/stories/AppEditPage.stories.js +0 -40
- package/react/components/sdd/stories/AppEditPage.stories.js.map +0 -1
- package/react/components/sdd/stories/Appearance.stories.d.ts +0 -10
- package/react/components/sdd/stories/Appearance.stories.js +0 -27
- package/react/components/sdd/stories/Appearance.stories.js.map +0 -1
- package/react/components/sdd/stories/Applications.stories.d.ts +0 -14
- package/react/components/sdd/stories/Applications.stories.js +0 -38
- package/react/components/sdd/stories/Applications.stories.js.map +0 -1
- package/react/components/sdd/stories/AssetsPage.stories.d.ts +0 -10
- package/react/components/sdd/stories/AssetsPage.stories.js +0 -16
- package/react/components/sdd/stories/AssetsPage.stories.js.map +0 -1
- package/react/components/sdd/stories/Authentication.stories.d.ts +0 -13
- package/react/components/sdd/stories/Authentication.stories.js +0 -25
- package/react/components/sdd/stories/Authentication.stories.js.map +0 -1
- package/react/components/sdd/stories/ContentHeader.stories.d.ts +0 -10
- package/react/components/sdd/stories/ContentHeader.stories.js +0 -13
- package/react/components/sdd/stories/ContentHeader.stories.js.map +0 -1
- package/react/components/sdd/stories/Export.stories.d.ts +0 -11
- package/react/components/sdd/stories/Export.stories.js +0 -19
- package/react/components/sdd/stories/Export.stories.js.map +0 -1
- package/react/components/sdd/stories/ExportCloud.stories.d.ts +0 -11
- package/react/components/sdd/stories/ExportCloud.stories.js +0 -19
- package/react/components/sdd/stories/ExportCloud.stories.js.map +0 -1
- package/react/components/sdd/stories/ExportZip.stories.d.ts +0 -12
- package/react/components/sdd/stories/ExportZip.stories.js +0 -26
- package/react/components/sdd/stories/ExportZip.stories.js.map +0 -1
- package/react/components/sdd/stories/ItemList.stories.d.ts +0 -16
- package/react/components/sdd/stories/ItemList.stories.js +0 -94
- package/react/components/sdd/stories/ItemList.stories.js.map +0 -1
- package/react/components/sdd/stories/Navigation.stories.d.ts +0 -11
- package/react/components/sdd/stories/Navigation.stories.js +0 -22
- package/react/components/sdd/stories/Navigation.stories.js.map +0 -1
- package/react/components/sdd/stories/OptionalSettingsView.stories.d.ts +0 -12
- package/react/components/sdd/stories/OptionalSettingsView.stories.js +0 -27
- package/react/components/sdd/stories/OptionalSettingsView.stories.js.map +0 -1
- package/react/components/sdd/stories/ProjectErrors.stories.d.ts +0 -11
- package/react/components/sdd/stories/ProjectErrors.stories.js +0 -19
- package/react/components/sdd/stories/ProjectErrors.stories.js.map +0 -1
- package/react/components/sdd/stories/Publish.stories.d.ts +0 -16
- package/react/components/sdd/stories/Publish.stories.js +0 -53
- package/react/components/sdd/stories/Publish.stories.js.map +0 -1
- package/react/components/sdd/stories/PublishProgress.stories.d.ts +0 -14
- package/react/components/sdd/stories/PublishProgress.stories.js +0 -26
- package/react/components/sdd/stories/PublishProgress.stories.js.map +0 -1
- package/react/components/sdd/stories/SmartDesktopDesigner.stories.d.ts +0 -10
- package/react/components/sdd/stories/SmartDesktopDesigner.stories.js +0 -65
- package/react/components/sdd/stories/SmartDesktopDesigner.stories.js.map +0 -1
- package/react/components/sdd/stories/ThemePage.stories.d.ts +0 -10
- package/react/components/sdd/stories/ThemePage.stories.js +0 -16
- package/react/components/sdd/stories/ThemePage.stories.js.map +0 -1
- package/react/components/sdd/stories/Themes.stories.d.ts +0 -10
- package/react/components/sdd/stories/Themes.stories.js +0 -28
- package/react/components/sdd/stories/Themes.stories.js.map +0 -1
- package/react/components/sdd/stories/Toolbar.stories.d.ts +0 -14
- package/react/components/sdd/stories/Toolbar.stories.js +0 -38
- package/react/components/sdd/stories/Toolbar.stories.js.map +0 -1
- package/react/components/sdd/tests/AddApp.spec.d.ts +0 -1
- package/react/components/sdd/tests/AddApp.spec.js +0 -239
- package/react/components/sdd/tests/AddApp.spec.js.map +0 -1
- package/react/components/sdd/tests/AppEditPage.spec.d.ts +0 -1
- package/react/components/sdd/tests/AppEditPage.spec.js +0 -1348
- package/react/components/sdd/tests/AppEditPage.spec.js.map +0 -1
- package/react/components/sdd/tests/Application.spec.d.ts +0 -1
- package/react/components/sdd/tests/Application.spec.js +0 -1460
- package/react/components/sdd/tests/Application.spec.js.map +0 -1
- package/react/components/sdd/tests/Applications.spec.d.ts +0 -1
- package/react/components/sdd/tests/Applications.spec.js +0 -165
- package/react/components/sdd/tests/Applications.spec.js.map +0 -1
- package/react/components/sdd/tests/Authentication.spec.d.ts +0 -1
- package/react/components/sdd/tests/Authentication.spec.js +0 -118
- package/react/components/sdd/tests/Authentication.spec.js.map +0 -1
- package/react/components/sdd/tests/ContentHeader.spec.d.ts +0 -1
- package/react/components/sdd/tests/ContentHeader.spec.js +0 -33
- package/react/components/sdd/tests/ContentHeader.spec.js.map +0 -1
- package/react/components/sdd/tests/EditPreload.spec.d.ts +0 -1
- package/react/components/sdd/tests/EditPreload.spec.js +0 -126
- package/react/components/sdd/tests/EditPreload.spec.js.map +0 -1
- package/react/components/sdd/tests/Export.spec.d.ts +0 -1
- package/react/components/sdd/tests/Export.spec.js +0 -190
- package/react/components/sdd/tests/Export.spec.js.map +0 -1
- package/react/components/sdd/tests/ExportZip.spec.d.ts +0 -1
- package/react/components/sdd/tests/ExportZip.spec.js +0 -32
- package/react/components/sdd/tests/ExportZip.spec.js.map +0 -1
- package/react/components/sdd/tests/ItemList.spec.d.ts +0 -1
- package/react/components/sdd/tests/ItemList.spec.js +0 -98
- package/react/components/sdd/tests/ItemList.spec.js.map +0 -1
- package/react/components/sdd/tests/Navigation.spec.d.ts +0 -1
- package/react/components/sdd/tests/Navigation.spec.js +0 -26
- package/react/components/sdd/tests/Navigation.spec.js.map +0 -1
- package/react/components/sdd/tests/OptionalSettingsView.spec.d.ts +0 -1
- package/react/components/sdd/tests/OptionalSettingsView.spec.js +0 -299
- package/react/components/sdd/tests/OptionalSettingsView.spec.js.map +0 -1
- package/react/components/sdd/tests/ProjectErrors.spec.d.ts +0 -1
- package/react/components/sdd/tests/ProjectErrors.spec.js +0 -46
- package/react/components/sdd/tests/ProjectErrors.spec.js.map +0 -1
- package/react/components/sdd/tests/Publish.spec.d.ts +0 -1
- package/react/components/sdd/tests/Publish.spec.js +0 -31
- package/react/components/sdd/tests/Publish.spec.js.map +0 -1
- package/react/components/sdd/tests/PublishProgess.spec.d.ts +0 -1
- package/react/components/sdd/tests/PublishProgess.spec.js +0 -17
- package/react/components/sdd/tests/PublishProgess.spec.js.map +0 -1
- package/react/components/sdd/tests/SmartDesktopDesigner.spec.d.ts +0 -1
- package/react/components/sdd/tests/SmartDesktopDesigner.spec.js +0 -57
- package/react/components/sdd/tests/SmartDesktopDesigner.spec.js.map +0 -1
- package/react/components/sdd/tests/Themes.spec.d.ts +0 -1
- package/react/components/sdd/tests/Themes.spec.js +0 -52
- package/react/components/sdd/tests/Themes.spec.js.map +0 -1
- package/react/components/sdd/tests/Toolbar.spec.d.ts +0 -1
- package/react/components/sdd/tests/Toolbar.spec.js +0 -256
- package/react/components/sdd/tests/Toolbar.spec.js.map +0 -1
- package/react/components/sdd/tests/a11y_helper.d.ts +0 -2
- package/react/components/sdd/tests/a11y_helper.js +0 -32
- package/react/components/sdd/tests/a11y_helper.js.map +0 -1
- package/react/components/sdd/tests/sdd_helpers.spec.d.ts +0 -1
- package/react/components/sdd/tests/sdd_helpers.spec.js +0 -18
- package/react/components/sdd/tests/sdd_helpers.spec.js.map +0 -1
- package/react/components/sdd/themeDefinitions.d.ts +0 -50
- package/react/components/sdd/themeDefinitions.js +0 -51
- package/react/components/sdd/themeDefinitions.js.map +0 -1
- package/react/components/search/Highlight.spec.d.ts +0 -1
- package/react/components/search/Highlight.spec.js +0 -22
- package/react/components/search/Highlight.spec.js.map +0 -1
- package/react/components/search/Highlight.stories.d.ts +0 -15
- package/react/components/search/Highlight.stories.js +0 -39
- package/react/components/search/Highlight.stories.js.map +0 -1
- package/react/components/search/SearchResult.spec.d.ts +0 -1
- package/react/components/search/SearchResult.spec.js +0 -46
- package/react/components/search/SearchResult.spec.js.map +0 -1
- package/react/components/search/SearchResult.stories.d.ts +0 -16
- package/react/components/search/SearchResult.stories.js +0 -113
- package/react/components/search/SearchResult.stories.js.map +0 -1
- package/react/components/search/SearchResults.spec.d.ts +0 -1
- package/react/components/search/SearchResults.spec.js +0 -35
- package/react/components/search/SearchResults.spec.js.map +0 -1
- package/react/components/search/SearchResults.stories.d.ts +0 -11
- package/react/components/search/SearchResults.stories.js +0 -458
- package/react/components/search/SearchResults.stories.js.map +0 -1
- package/react/components/shared/Animate.d.ts +0 -15
- package/react/components/shared/Animate.js +0 -36
- package/react/components/shared/Animate.js.map +0 -1
- package/react/components/shared/NavigationButton.d.ts +0 -10
- package/react/components/shared/NavigationButton.js +0 -13
- package/react/components/shared/NavigationButton.js.map +0 -1
- package/react/components/shared/tests/DefaultDropdownButton.spec.d.ts +0 -1
- package/react/components/shared/tests/DefaultDropdownButton.spec.js +0 -75
- package/react/components/shared/tests/DefaultDropdownButton.spec.js.map +0 -1
- package/react/components/shared/tests/addProtocolToValidURL.spec.d.ts +0 -1
- package/react/components/shared/tests/addProtocolToValidURL.spec.js +0 -20
- package/react/components/shared/tests/addProtocolToValidURL.spec.js.map +0 -1
- package/react/components/shared/validateURL.spec.d.ts +0 -1
- package/react/components/shared/validateURL.spec.js +0 -25
- package/react/components/shared/validateURL.spec.js.map +0 -1
- package/react/components/singleInputDialog/SingleInputDialog.spec.d.ts +0 -1
- package/react/components/singleInputDialog/SingleInputDialog.spec.js +0 -38
- package/react/components/singleInputDialog/SingleInputDialog.spec.js.map +0 -1
- package/react/components/singleInputDialog/SingleInputDialog.stories.d.ts +0 -15
- package/react/components/singleInputDialog/SingleInputDialog.stories.js +0 -65
- package/react/components/singleInputDialog/SingleInputDialog.stories.js.map +0 -1
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.d.ts +0 -2
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js +0 -9
- package/react/components/smartDesktopDesigner/SmartDesktopDesigner.js.map +0 -1
- package/react/components/smartDesktopDesigner/common/views.d.ts +0 -3
- package/react/components/smartDesktopDesigner/common/views.js +0 -2
- package/react/components/smartDesktopDesigner/common/views.js.map +0 -1
- package/react/components/system/System.spec.d.ts +0 -1
- package/react/components/system/System.spec.js +0 -21
- package/react/components/system/System.spec.js.map +0 -1
- package/react/components/system/System.stories.d.ts +0 -9
- package/react/components/system/System.stories.js +0 -42
- package/react/components/system/System.stories.js.map +0 -1
- package/react/components/toolbar/AutoArrange.spec.d.ts +0 -1
- package/react/components/toolbar/AutoArrange.spec.js +0 -54
- package/react/components/toolbar/AutoArrange.spec.js.map +0 -1
- package/react/components/toolbar/AutoArrange.stories.d.ts +0 -11
- package/react/components/toolbar/AutoArrange.stories.js +0 -22
- package/react/components/toolbar/AutoArrange.stories.js.map +0 -1
- package/react/components/toolbar/DragHandle.spec.d.ts +0 -1
- package/react/components/toolbar/DragHandle.spec.js +0 -32
- package/react/components/toolbar/DragHandle.spec.js.map +0 -1
- package/react/components/toolbar/DragHandle.stories.d.ts +0 -13
- package/react/components/toolbar/DragHandle.stories.js +0 -40
- package/react/components/toolbar/DragHandle.stories.js.map +0 -1
- package/react/components/toolbar/MinimizeAll.spec.d.ts +0 -1
- package/react/components/toolbar/MinimizeAll.spec.js +0 -49
- package/react/components/toolbar/MinimizeAll.spec.js.map +0 -1
- package/react/components/toolbar/MinimizeAll.stories.d.ts +0 -11
- package/react/components/toolbar/MinimizeAll.stories.js +0 -22
- package/react/components/toolbar/MinimizeAll.stories.js.map +0 -1
- package/react/components/toolbar/RevealAll.spec.d.ts +0 -1
- package/react/components/toolbar/RevealAll.spec.js +0 -49
- package/react/components/toolbar/RevealAll.spec.js.map +0 -1
- package/react/components/toolbar/RevealAll.stories.d.ts +0 -11
- package/react/components/toolbar/RevealAll.stories.js +0 -22
- package/react/components/toolbar/RevealAll.stories.js.map +0 -1
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.d.ts +0 -29
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js +0 -51
- package/react/components/toolbar/advancedAppLauncher/components/TagsMenu.js.map +0 -1
- package/react/components/userPreferences/stories/DashbarEditor.stories.d.ts +0 -10
- package/react/components/userPreferences/stories/DashbarEditor.stories.js +0 -42
- package/react/components/userPreferences/stories/DashbarEditor.stories.js.map +0 -1
- package/react/components/userPreferences/stories/DashbarEditorItem.stories.d.ts +0 -11
- package/react/components/userPreferences/stories/DashbarEditorItem.stories.js +0 -21
- package/react/components/userPreferences/stories/DashbarEditorItem.stories.js.map +0 -1
- package/react/components/userPreferences/stories/General.stories.d.ts +0 -13
- package/react/components/userPreferences/stories/General.stories.js +0 -16
- package/react/components/userPreferences/stories/General.stories.js.map +0 -1
- package/react/components/userPreferences/stories/Notifications.stories.d.ts +0 -9
- package/react/components/userPreferences/stories/Notifications.stories.js +0 -17
- package/react/components/userPreferences/stories/Notifications.stories.js.map +0 -1
- package/react/components/userPreferences/stories/NotificationsSourceTypes.stories.d.ts +0 -9
- package/react/components/userPreferences/stories/NotificationsSourceTypes.stories.js +0 -20
- package/react/components/userPreferences/stories/NotificationsSourceTypes.stories.js.map +0 -1
- package/react/components/userPreferences/stories/NotificationsSources.stories.d.ts +0 -12
- package/react/components/userPreferences/stories/NotificationsSources.stories.js +0 -28
- package/react/components/userPreferences/stories/NotificationsSources.stories.js.map +0 -1
- package/react/components/userPreferences/stories/ScheduledClose.stories.d.ts +0 -12
- package/react/components/userPreferences/stories/ScheduledClose.stories.js +0 -53
- package/react/components/userPreferences/stories/ScheduledClose.stories.js.map +0 -1
- package/react/components/userPreferences/stories/UserPreferences.stories.d.ts +0 -8
- package/react/components/userPreferences/stories/UserPreferences.stories.js +0 -53
- package/react/components/userPreferences/stories/UserPreferences.stories.js.map +0 -1
- package/react/components/userPreferences/stories/WorkspaceButton.stories.d.ts +0 -11
- package/react/components/userPreferences/stories/WorkspaceButton.stories.js +0 -20
- package/react/components/userPreferences/stories/WorkspaceButton.stories.js.map +0 -1
- package/react/components/userPreferences/stories/WorkspaceComponents.stories.d.ts +0 -13
- package/react/components/userPreferences/stories/WorkspaceComponents.stories.js +0 -26
- package/react/components/userPreferences/stories/WorkspaceComponents.stories.js.map +0 -1
- package/react/components/userPreferences/stories/WorkspaceItem.stories.d.ts +0 -9
- package/react/components/userPreferences/stories/WorkspaceItem.stories.js +0 -30
- package/react/components/userPreferences/stories/WorkspaceItem.stories.js.map +0 -1
- package/react/components/userPreferences/stories/WorkspaceItemList.stories.d.ts +0 -10
- package/react/components/userPreferences/stories/WorkspaceItemList.stories.js +0 -57
- package/react/components/userPreferences/stories/WorkspaceItemList.stories.js.map +0 -1
- package/react/components/userPreferences/stories/Workspaces.stories.d.ts +0 -9
- package/react/components/userPreferences/stories/Workspaces.stories.js +0 -44
- package/react/components/userPreferences/stories/Workspaces.stories.js.map +0 -1
- package/react/components/userPreferences/tests/ContentSection.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/ContentSection.spec.js +0 -41
- package/react/components/userPreferences/tests/ContentSection.spec.js.map +0 -1
- package/react/components/userPreferences/tests/DashbarEditor.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/DashbarEditor.spec.js +0 -37
- package/react/components/userPreferences/tests/DashbarEditor.spec.js.map +0 -1
- package/react/components/userPreferences/tests/DashbarEditorItem.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/DashbarEditorItem.spec.js +0 -38
- package/react/components/userPreferences/tests/DashbarEditorItem.spec.js.map +0 -1
- package/react/components/userPreferences/tests/General.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/General.spec.js +0 -15
- package/react/components/userPreferences/tests/General.spec.js.map +0 -1
- package/react/components/userPreferences/tests/LeftNav.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/LeftNav.spec.js +0 -26
- package/react/components/userPreferences/tests/LeftNav.spec.js.map +0 -1
- package/react/components/userPreferences/tests/NotificationSourceTypes.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/NotificationSourceTypes.spec.js +0 -14
- package/react/components/userPreferences/tests/NotificationSourceTypes.spec.js.map +0 -1
- package/react/components/userPreferences/tests/Notifications.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/Notifications.spec.js +0 -17
- package/react/components/userPreferences/tests/Notifications.spec.js.map +0 -1
- package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js +0 -43
- package/react/components/userPreferences/tests/NotificationsPreferencesHome.spec.js.map +0 -1
- package/react/components/userPreferences/tests/NotificationsSourcesPreferences.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/NotificationsSourcesPreferences.spec.js +0 -22
- package/react/components/userPreferences/tests/NotificationsSourcesPreferences.spec.js.map +0 -1
- package/react/components/userPreferences/tests/ScheduledClose.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/ScheduledClose.spec.js +0 -47
- package/react/components/userPreferences/tests/ScheduledClose.spec.js.map +0 -1
- package/react/components/userPreferences/tests/UserPreferencesBase.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/UserPreferencesBase.spec.js +0 -44
- package/react/components/userPreferences/tests/UserPreferencesBase.spec.js.map +0 -1
- package/react/components/userPreferences/tests/Workspace.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/Workspace.spec.js +0 -139
- package/react/components/userPreferences/tests/Workspace.spec.js.map +0 -1
- package/react/components/userPreferences/tests/WorkspaceButton.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/WorkspaceButton.spec.js +0 -38
- package/react/components/userPreferences/tests/WorkspaceButton.spec.js.map +0 -1
- package/react/components/userPreferences/tests/WorkspaceComponents.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/WorkspaceComponents.spec.js +0 -22
- package/react/components/userPreferences/tests/WorkspaceComponents.spec.js.map +0 -1
- package/react/components/userPreferences/tests/WorkspaceItem.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/WorkspaceItem.spec.js +0 -64
- package/react/components/userPreferences/tests/WorkspaceItem.spec.js.map +0 -1
- package/react/components/userPreferences/tests/WorkspaceItemList.spec.d.ts +0 -1
- package/react/components/userPreferences/tests/WorkspaceItemList.spec.js +0 -45
- package/react/components/userPreferences/tests/WorkspaceItemList.spec.js.map +0 -1
- package/react/components/utils.d.ts +0 -2
- package/react/components/utils.js +0 -6
- package/react/components/utils.js.map +0 -1
- package/react/components/yesNoDialog/Timer.spec.d.ts +0 -1
- package/react/components/yesNoDialog/Timer.spec.js +0 -18
- package/react/components/yesNoDialog/Timer.spec.js.map +0 -1
- package/react/components/yesNoDialog/Timer.stories.d.ts +0 -9
- package/react/components/yesNoDialog/Timer.stories.js +0 -15
- package/react/components/yesNoDialog/Timer.stories.js.map +0 -1
- package/react/components/yesNoDialog/YesNoDialog.spec.d.ts +0 -1
- package/react/components/yesNoDialog/YesNoDialog.spec.js +0 -63
- package/react/components/yesNoDialog/YesNoDialog.spec.js.map +0 -1
- package/react/components/yesNoDialog/YesNoDialog.stories.d.ts +0 -14
- package/react/components/yesNoDialog/YesNoDialog.stories.js +0 -74
- package/react/components/yesNoDialog/YesNoDialog.stories.js.map +0 -1
- package/react/enzymeSetup.d.ts +0 -1
- package/react/enzymeSetup.js +0 -35
- package/react/enzymeSetup.js.map +0 -1
- package/react/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,2481 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notes. Because reducers use Immer, you can't just console.log pieces of your store. You'll get a bunch of proxy
|
|
3
|
+
* stuff from the WritableDraft<> template. Wrap your data in unImmer() to print it out normally.
|
|
4
|
+
*/
|
|
5
|
+
var _a, _b;
|
|
6
|
+
import { unImmer } from "../../../../common/redux/createReducer";
|
|
7
|
+
import { concatNoDups, INTENT_RESOLVER_CHANNEL, } from "../../../../clients/Interop/types";
|
|
8
|
+
import { selectConnect } from "../selectConnect";
|
|
9
|
+
import { RouterClient } from "../../../../clients/routerClient";
|
|
10
|
+
import { LauncherClient } from "../../../../clients/launcherClient";
|
|
11
|
+
import { Logger } from "../../../../clients/logger";
|
|
12
|
+
import { setActionResult } from "../../../../common/redux/actionIdMapper";
|
|
13
|
+
import { filterForAppAuthorization, filterForClientAuthorization } from "./authorize";
|
|
14
|
+
import { httpGet } from "../../../../common/REST";
|
|
15
|
+
import { authVerify, authVerifyJWT } from "../AuthSignVerify";
|
|
16
|
+
import { getFriendlyName, interopAssertion, uuidsFromWindowName, notifyEndUser } from "./commonUtils";
|
|
17
|
+
import testPoint from "../../../../common/testPoint";
|
|
18
|
+
import { createAction } from "@reduxjs/toolkit";
|
|
19
|
+
import { isEqual } from "lodash";
|
|
20
|
+
import { ResolveError, OpenError } from "@finos/fdc3";
|
|
21
|
+
// Logger errors are also logged to the console, which clutters up the unit test results for error paths, so when running under Node use warnings instead
|
|
22
|
+
if (((_b = (_a = window === null || window === void 0 ? void 0 : window.process) === null || _a === void 0 ? void 0 : _a.release) === null || _b === void 0 ? void 0 : _b.name) === "node") {
|
|
23
|
+
Logger.error = Logger.warn;
|
|
24
|
+
Logger.system.error = Logger.system.warn;
|
|
25
|
+
}
|
|
26
|
+
const workspaceUuid = "#Workspace";
|
|
27
|
+
/**
|
|
28
|
+
* Return uuids for specified appId
|
|
29
|
+
*
|
|
30
|
+
* @param { resolverState, appId }
|
|
31
|
+
* @returns {string[]}
|
|
32
|
+
*/
|
|
33
|
+
const uuidsFromAppId = ({ resolverState, appId }) => Object.values(resolverState.clients)
|
|
34
|
+
.filter((client) => client.appId === appId)
|
|
35
|
+
.map((client) => client.uuid);
|
|
36
|
+
/**
|
|
37
|
+
* Returns all app definitions for a given appId
|
|
38
|
+
*
|
|
39
|
+
* @param appId
|
|
40
|
+
* @param appDefinitions
|
|
41
|
+
* @returns appName for the given appId (or "unknown-appName" if unique match not found)
|
|
42
|
+
*/
|
|
43
|
+
const appsForAppId = (appId, appDefinitions) => Object.values(appDefinitions).filter((definition) => definition.appId === appId);
|
|
44
|
+
/**
|
|
45
|
+
* Return appId for a given appName; to prevent security hole, return nothing unless there is a unique match for the name
|
|
46
|
+
*
|
|
47
|
+
* @param appName
|
|
48
|
+
* @param appDefinitions
|
|
49
|
+
* @returns appId for the given appName or null if not a unique match
|
|
50
|
+
*/
|
|
51
|
+
const getValidatedAppIdForAppName = (appName, appDefinitions) => {
|
|
52
|
+
let appId = null;
|
|
53
|
+
let matchingApps = Object.values(appDefinitions).filter((definition) => definition.name === appName);
|
|
54
|
+
if (matchingApps.length === 1) {
|
|
55
|
+
({ appId } = matchingApps[0]);
|
|
56
|
+
}
|
|
57
|
+
return appId;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Return appId for specified target
|
|
61
|
+
*
|
|
62
|
+
* @param appDefinitions
|
|
63
|
+
* @param target
|
|
64
|
+
* @returns appId or null
|
|
65
|
+
*/
|
|
66
|
+
const appIdFromTargetApp = (appDefinitions, target) => {
|
|
67
|
+
let appId;
|
|
68
|
+
if (typeof target === "string") {
|
|
69
|
+
appId = getValidatedAppIdForAppName(target, appDefinitions);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (target.appId) {
|
|
73
|
+
({ appId } = target);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
appId = getValidatedAppIdForAppName(target.name, appDefinitions);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return appId;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Returns a set of channels against which to apply an action, given the joinedChannels of a client and the channel requested
|
|
83
|
+
* (1) the specified channel, (2) all joined channels (if no channel was specified), or (3) "global" (if no channels were joined)
|
|
84
|
+
*/
|
|
85
|
+
// const targetedChannels = (state: ResolverStore, joinedChannels: string[], channel?: string): string[] =>
|
|
86
|
+
// channel ? [channel] : joinedChannels.length ? joinedChannels : ["global"];
|
|
87
|
+
const actions = {
|
|
88
|
+
clientAdded: createAction("resolver/clientAdded"),
|
|
89
|
+
clientRemoved: createAction("resolver/clientRemoved"),
|
|
90
|
+
register: createAction("resolver/register"),
|
|
91
|
+
completeRegistration: createAction("resolver/completeRegistration"),
|
|
92
|
+
heartbeat: createAction("resolver/heartbeat"),
|
|
93
|
+
cleanupAndVerify: createAction("resolver/cleanupAndVerify"),
|
|
94
|
+
unregister: createAction("resolver/unregister"),
|
|
95
|
+
broadcast: createAction("resolver/broadcast"),
|
|
96
|
+
subscribeContext: createAction("resolver/subscribeContext"),
|
|
97
|
+
unsubscribeContext: createAction("resolver/unsubscribeContext"),
|
|
98
|
+
joinChannels: createAction("resolver/joinChannels"),
|
|
99
|
+
leaveChannels: createAction("resolver/leaveChannels"),
|
|
100
|
+
sendMessageToDestinations: createAction("resolver/sendMessageToDestinations"),
|
|
101
|
+
sendSelectConnectMessagesToDestinations: createAction("resolver/sendSelectConnectMessagesToDestinations"),
|
|
102
|
+
registerSelectConnectChannel: createAction("resolver/registerSelectConnectChannel"),
|
|
103
|
+
open: createAction("resolver/open"),
|
|
104
|
+
raiseIntent: createAction("resolver/raiseIntent"),
|
|
105
|
+
subscribeIntent: createAction("resolver/subscribeIntent"),
|
|
106
|
+
unsubscribeIntent: createAction("resolver/unsubscribeIntent"),
|
|
107
|
+
addAppDefinitions: createAction("resolver/addAppDefinitions"),
|
|
108
|
+
removeAppDefinitions: createAction("resolver/removeAppDefinitions"),
|
|
109
|
+
handleUIResolutionResponse: createAction("resolver/handleUIResolutionResponse"),
|
|
110
|
+
openedApp: createAction("resolver/openedApp"),
|
|
111
|
+
registerUIResolver: createAction("resolver/registerUIResolver"),
|
|
112
|
+
setInteropRegistrationData: createAction("resolver/setInteropRegistrationData"),
|
|
113
|
+
resetDetectedLoopState: createAction("resolver/resetDetectedLoopState"),
|
|
114
|
+
addIntentListenerMaxInitializationTimeout: createAction("resolver/addIntentListenerMaxInitializationTimeout"),
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Removes any object entries that are explicitly "undefined" or null.
|
|
118
|
+
* We use this in the broadcast loop detection algorithm.
|
|
119
|
+
*/
|
|
120
|
+
const removeEmpty = (obj) => {
|
|
121
|
+
if (typeof obj !== "object" || obj === null)
|
|
122
|
+
return obj;
|
|
123
|
+
let newObj = {};
|
|
124
|
+
Object.keys(obj).forEach((key) => {
|
|
125
|
+
if (obj[key] === Object(obj[key]))
|
|
126
|
+
newObj[key] = removeEmpty(obj[key]);
|
|
127
|
+
else if (obj[key] !== undefined && obj[key] !== null)
|
|
128
|
+
newObj[key] = obj[key];
|
|
129
|
+
});
|
|
130
|
+
return newObj;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Filters out intent recipients that are unauthorized as a result of an `authorize` rule.
|
|
134
|
+
*/
|
|
135
|
+
const filterUnauthorizedRecipients = ({ which, candidates, state, uuid, intentName, contextType, }) => {
|
|
136
|
+
// Reduce our candidate lists down to arrays of strings (destinations) that can be checked by the SelectConnect `authorize` rule.
|
|
137
|
+
const destinations = candidates.map((candidate) => { var _a, _b; return (_b = (_a = candidate.uuid) !== null && _a !== void 0 ? _a : candidate.meta.appId) !== null && _b !== void 0 ? _b : candidate.meta.name; });
|
|
138
|
+
// Retrieve the authorized destinations by running them through the `authorize` rule.
|
|
139
|
+
const authorizedDestinations = which === "apps"
|
|
140
|
+
? filterForAppAuthorization({
|
|
141
|
+
state,
|
|
142
|
+
originClientUuid: uuid,
|
|
143
|
+
intentType: intentName,
|
|
144
|
+
contextType: contextType || "",
|
|
145
|
+
destinationAppIdList: destinations,
|
|
146
|
+
})
|
|
147
|
+
: filterForClientAuthorization({
|
|
148
|
+
state,
|
|
149
|
+
originClientUuid: uuid,
|
|
150
|
+
intentType: intentName,
|
|
151
|
+
contextType: contextType || "",
|
|
152
|
+
destinationClientUuidList: destinations,
|
|
153
|
+
});
|
|
154
|
+
// Use the authorized destination lists to rebuild and return the candidate list with only authorized candidates.
|
|
155
|
+
return candidates.filter((candidate) => {
|
|
156
|
+
var _a, _b;
|
|
157
|
+
const identifier = (_b = (_a = candidate.uuid) !== null && _a !== void 0 ? _a : candidate.meta.appId) !== null && _b !== void 0 ? _b : candidate.meta.name;
|
|
158
|
+
return authorizedDestinations.includes(identifier);
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* TargetApp is either a string or an AppMetadata which contains appId and name members. This
|
|
163
|
+
* function returns true when the provided appName matches the target as a string or
|
|
164
|
+
* the provided appName and appId matches the AppMetaData.
|
|
165
|
+
*
|
|
166
|
+
* For convenience, if target is null or undefined then this will always return false.
|
|
167
|
+
*/
|
|
168
|
+
const targetMatch = (appName, appId, target) => {
|
|
169
|
+
if (!target)
|
|
170
|
+
return false;
|
|
171
|
+
if (typeof target === "string")
|
|
172
|
+
return appName === target;
|
|
173
|
+
return appId === target.appId && appName === target.name;
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* Gets all of the clients who have called `addIntentListener()` for the given intent.
|
|
177
|
+
*/
|
|
178
|
+
const getRunningAppsForIntent = ({ state, intent, target, }) => Object.values(state.resolver.clients).flatMap((client) => {
|
|
179
|
+
var _a, _b;
|
|
180
|
+
if (intent && client.subscriptions.globals.intents[intent]) {
|
|
181
|
+
if (!target || targetMatch(client.appName, client.appId, target)) {
|
|
182
|
+
return [
|
|
183
|
+
{
|
|
184
|
+
uuid: client.uuid,
|
|
185
|
+
windowName: client.windowName,
|
|
186
|
+
meta: {
|
|
187
|
+
appId: client.appId,
|
|
188
|
+
name: (_a = state.resolver.apps.definitions[client.appId]) === null || _a === void 0 ? void 0 : _a.name,
|
|
189
|
+
title: (_b = state.resolver.apps.definitions[client.appId]) === null || _b === void 0 ? void 0 : _b.title,
|
|
190
|
+
},
|
|
191
|
+
appId: client.appId,
|
|
192
|
+
},
|
|
193
|
+
];
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
return [];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
return [];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
/**
|
|
204
|
+
* Utility function to return list of intents after combining an appD definition's intents with intents in store.
|
|
205
|
+
*/
|
|
206
|
+
const appendedIntentData = (resolverState, appDDefinition) => {
|
|
207
|
+
let currentIntents = unImmer(resolverState.intents);
|
|
208
|
+
if (appDDefinition.intents) {
|
|
209
|
+
appDDefinition.intents.forEach((intentDef) => {
|
|
210
|
+
const key = appDDefinition.appId;
|
|
211
|
+
if (!currentIntents[intentDef.name]) {
|
|
212
|
+
let launchableHandlers = {};
|
|
213
|
+
launchableHandlers[key] = null;
|
|
214
|
+
currentIntents[intentDef.name] = {
|
|
215
|
+
info: {
|
|
216
|
+
name: intentDef.name,
|
|
217
|
+
displayName: intentDef.displayName,
|
|
218
|
+
},
|
|
219
|
+
launchableHandlers,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
currentIntents[intentDef.name].launchableHandlers[key] = null;
|
|
224
|
+
}
|
|
225
|
+
const intentElement = currentIntents[intentDef.name];
|
|
226
|
+
if (intentDef.contexts) {
|
|
227
|
+
intentDef.contexts.forEach((contextName) => {
|
|
228
|
+
intentElement.launchableHandlers[key] = concatNoDups(intentElement.launchableHandlers[key], contextName);
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
Logger.system.debug("Interop.resolver.appendedIntentData", intentElement, currentIntents);
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
return currentIntents;
|
|
235
|
+
};
|
|
236
|
+
// Utility function to return an array of intentData elements filtered by context (if provided)
|
|
237
|
+
export const filterIntentsByContext = (intentsData, context) => Object.values(intentsData).filter((element) => {
|
|
238
|
+
// return true to keep the intent (don't filter it); return false to not keep the intent (filter it)
|
|
239
|
+
// if no context type then don't filter this intent
|
|
240
|
+
if (!(context === null || context === void 0 ? void 0 : context.type))
|
|
241
|
+
return true;
|
|
242
|
+
// if no launchable handlers to match context, then filter this intent
|
|
243
|
+
if (!element.launchableHandlers)
|
|
244
|
+
return false;
|
|
245
|
+
// if one of the supported apps for this intent can handle the specified context type, then don't filter this intent
|
|
246
|
+
for (const appContextList of Object.values(element.launchableHandlers)) {
|
|
247
|
+
// if no contexts specified, then it's essentially a wildcard match, so don't filter
|
|
248
|
+
if (!appContextList)
|
|
249
|
+
return true;
|
|
250
|
+
// if the input context matches one in the list, then don't filter
|
|
251
|
+
if (appContextList.find((contextType) => contextType === context.type))
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
return false;
|
|
255
|
+
});
|
|
256
|
+
// Utility function to strip from intent handlers the apps that don't handle the specified context.
|
|
257
|
+
// May optionally filter apps if not launchable or a singleton that is already open
|
|
258
|
+
// Also remove an intent from the array if all it's launchableHandler's apps have been filtered.
|
|
259
|
+
export const filterAppHandlersFromIntents = ({ resolverState, intents, context, target, filterNotLaunchable, filterOpenSingletons, }) => {
|
|
260
|
+
// Intents are readonly so create a mutable clone to modify and return
|
|
261
|
+
intents = unImmer(intents);
|
|
262
|
+
intents.forEach((intentElement) => {
|
|
263
|
+
var _a, _b, _c;
|
|
264
|
+
for (const [appId, contextList] of Object.entries(intentElement.launchableHandlers)) {
|
|
265
|
+
const unscrubbedConfig = resolverState.apps.definitions[appId].manifest;
|
|
266
|
+
// Refactor this when we make appd entries have launchableByUser default to true
|
|
267
|
+
const launchableByUser = (_b = (_a = unscrubbedConfig === null || unscrubbedConfig === void 0 ? void 0 : unscrubbedConfig.foreign) === null || _a === void 0 ? void 0 : _a.components["App Launcher"]) === null || _b === void 0 ? void 0 : _b.launchableByUser;
|
|
268
|
+
const openInstances = uuidsFromAppId({ resolverState, appId }).length > 0;
|
|
269
|
+
const singleton = (_c = unscrubbedConfig === null || unscrubbedConfig === void 0 ? void 0 : unscrubbedConfig.component) === null || _c === void 0 ? void 0 : _c.singleton;
|
|
270
|
+
if (target && !targetMatch(resolverState.apps.definitions[appId].name, appId, target)) {
|
|
271
|
+
// since app doesn't match target, remove it from list
|
|
272
|
+
delete intentElement.launchableHandlers[appId];
|
|
273
|
+
}
|
|
274
|
+
else if (filterNotLaunchable && !launchableByUser) {
|
|
275
|
+
// since app isn't launchable and there is no open instance
|
|
276
|
+
Logger.system.debug("Interop.resolver.filterAppHandlersFromIntents filtered as non-launchable", appId);
|
|
277
|
+
delete intentElement.launchableHandlers[appId];
|
|
278
|
+
}
|
|
279
|
+
else if (filterOpenSingletons && singleton && openInstances) {
|
|
280
|
+
// since app is a singleton and it's already open, remove it from list
|
|
281
|
+
Logger.system.debug("Interop.resolver.filterAppHandlersFromIntents filtered as singleton", appId);
|
|
282
|
+
delete intentElement.launchableHandlers[appId];
|
|
283
|
+
}
|
|
284
|
+
else if (!context || !contextList) {
|
|
285
|
+
// do nothing -- no context implies a wildcard -- all contexts are excepted
|
|
286
|
+
}
|
|
287
|
+
else if (!contextList.includes(context.type)) {
|
|
288
|
+
// since app doesn't include context, remove it from list
|
|
289
|
+
delete intentElement.launchableHandlers[appId];
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
// app includes context, but filter out any other contexts
|
|
293
|
+
intentElement.launchableHandlers[appId] = contextList.filter((appContext) => appContext == context.type);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
// filter out any of the intents that no longer have at least one launchable handler
|
|
298
|
+
intents = intents.filter((intentElement) => Object.keys(intentElement.launchableHandlers).length > 0);
|
|
299
|
+
return intents;
|
|
300
|
+
};
|
|
301
|
+
// Utility function to find a set of intents for a given context. If the intentName is specified then the corresponding intent is the only one returned.
|
|
302
|
+
// Note the intent list will be filtered to only include apps that can handle the context.
|
|
303
|
+
export const findAndFilterAppIntents = ({ resolverState, intentName, context, target, filterNotLaunchable, filterOpenSingletons, originUuid, }) => {
|
|
304
|
+
let appIntents = [];
|
|
305
|
+
const intentsData = unImmer(resolverState.intents);
|
|
306
|
+
// filter intents by the specified context
|
|
307
|
+
// This is redundant because filterAppHandlersFromIntents already filters it out?
|
|
308
|
+
const intentsFilteredByContext = filterIntentsByContext(intentsData, context);
|
|
309
|
+
// strip from intent handlers the apps that don't support the specified context, don't match target, or aren't launchable.
|
|
310
|
+
const strippedIntents = filterAppHandlersFromIntents({
|
|
311
|
+
resolverState,
|
|
312
|
+
intents: intentsFilteredByContext,
|
|
313
|
+
context,
|
|
314
|
+
target,
|
|
315
|
+
filterNotLaunchable,
|
|
316
|
+
filterOpenSingletons,
|
|
317
|
+
});
|
|
318
|
+
// Filter out unauthorized apps
|
|
319
|
+
let intentData = [];
|
|
320
|
+
if (intentName) {
|
|
321
|
+
// after filtering and stripping the intents by context, find the first one that matches theIntentName
|
|
322
|
+
const oneResult = strippedIntents.find((intentElement) => intentElement.info.name === intentName);
|
|
323
|
+
if (oneResult) {
|
|
324
|
+
intentData.push(oneResult);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
intentData = strippedIntents;
|
|
329
|
+
}
|
|
330
|
+
appIntents = intentData
|
|
331
|
+
.map((resolverIntent) => {
|
|
332
|
+
let apps = Object.keys(resolverIntent.launchableHandlers).map((key) => {
|
|
333
|
+
var _a;
|
|
334
|
+
const definition = resolverState.apps.definitions[key];
|
|
335
|
+
return definition
|
|
336
|
+
? {
|
|
337
|
+
appId: (_a = definition.appId) !== null && _a !== void 0 ? _a : key,
|
|
338
|
+
name: definition.name,
|
|
339
|
+
title: definition.title,
|
|
340
|
+
version: definition.version,
|
|
341
|
+
description: definition.description,
|
|
342
|
+
}
|
|
343
|
+
: {
|
|
344
|
+
appId: key,
|
|
345
|
+
name: key,
|
|
346
|
+
};
|
|
347
|
+
});
|
|
348
|
+
if (originUuid) {
|
|
349
|
+
const authorizedApps = filterForAppAuthorization({
|
|
350
|
+
state: { resolver: resolverState },
|
|
351
|
+
originClientUuid: originUuid,
|
|
352
|
+
destinationAppIdList: apps.map((app) => app.appId || app.name),
|
|
353
|
+
contextType: (context === null || context === void 0 ? void 0 : context.type) || "",
|
|
354
|
+
});
|
|
355
|
+
apps = apps.filter((app) => (app.appId && authorizedApps.includes(app.appId)) || authorizedApps.includes(app.name));
|
|
356
|
+
}
|
|
357
|
+
return {
|
|
358
|
+
intent: resolverIntent.info,
|
|
359
|
+
apps,
|
|
360
|
+
};
|
|
361
|
+
})
|
|
362
|
+
// Filter out any appIntents that don't have any apps attached to them
|
|
363
|
+
// (happens when a given intent contains some apps, but none of them are authorized)
|
|
364
|
+
.filter((appIntent) => appIntent.apps.length > 0);
|
|
365
|
+
Logger.system.debug("Interop.resolver.findAndFilterAppIntents", {
|
|
366
|
+
intentName,
|
|
367
|
+
appIntents,
|
|
368
|
+
intentData,
|
|
369
|
+
intentsData,
|
|
370
|
+
intentsFilteredByContext,
|
|
371
|
+
strippedIntents,
|
|
372
|
+
});
|
|
373
|
+
return appIntents;
|
|
374
|
+
};
|
|
375
|
+
export const sendMessageOnRouter = async (routerChannel, message) => {
|
|
376
|
+
Logger.system.debug("Interop.resolver.sendMessageOnRouter", routerChannel, message);
|
|
377
|
+
RouterClient.query(routerChannel, unImmer(message), () => { });
|
|
378
|
+
};
|
|
379
|
+
/**
|
|
380
|
+
* Performs a very simple check to see if a broadcasted context is a duplicate - the result of a potential infinite
|
|
381
|
+
* broadcast loop. If the app's current context is the same as its broadcasted context then it's suspect. But it's still
|
|
382
|
+
* possible for users or developers to intentionally resend an app's current context, so we only say it's a duplicate
|
|
383
|
+
* if this occurs within 100 milliseconds (since FDC3 is supposed to operate at human speeds).
|
|
384
|
+
*/
|
|
385
|
+
export const isDupBroadcast = (currentContext, broadcastedContext) => {
|
|
386
|
+
var _a;
|
|
387
|
+
const timeframe = 100;
|
|
388
|
+
const lastUpdated = (_a = currentContext === null || currentContext === void 0 ? void 0 : currentContext.meta) === null || _a === void 0 ? void 0 : _a.timestamp;
|
|
389
|
+
return (lastUpdated &&
|
|
390
|
+
Date.now() - lastUpdated < timeframe &&
|
|
391
|
+
isEqual(removeEmpty(currentContext === null || currentContext === void 0 ? void 0 : currentContext.context), removeEmpty(broadcastedContext)));
|
|
392
|
+
};
|
|
393
|
+
/**
|
|
394
|
+
* Associates the provided context with the app's set of current contexts. This saved context represents the currently
|
|
395
|
+
* assigned context for that app. This is used to detect broadcast loops.
|
|
396
|
+
*/
|
|
397
|
+
export const saveCurrentContext = (currentContexts, context) => {
|
|
398
|
+
var _a;
|
|
399
|
+
currentContexts[context.type] = {
|
|
400
|
+
context,
|
|
401
|
+
meta: Object.assign(Object.assign({}, (_a = currentContexts[context.type]) === null || _a === void 0 ? void 0 : _a.meta), { timestamp: Date.now() }),
|
|
402
|
+
};
|
|
403
|
+
};
|
|
404
|
+
const getInitialState = () => {
|
|
405
|
+
return {
|
|
406
|
+
pendingInteropRegistrationData: [],
|
|
407
|
+
pendingOpenActionIds: {},
|
|
408
|
+
config: {
|
|
409
|
+
serverUUID: `interopService.${Date.now()}_${Math.random()}`,
|
|
410
|
+
registeredUIResolver: null,
|
|
411
|
+
},
|
|
412
|
+
clients: {},
|
|
413
|
+
selectConnectChannels: {},
|
|
414
|
+
channelMeta: {},
|
|
415
|
+
lastChannelState: {},
|
|
416
|
+
lastChannelStateByType: {},
|
|
417
|
+
apps: {
|
|
418
|
+
definitions: {},
|
|
419
|
+
intentResolutionInProgress: false,
|
|
420
|
+
intentResolutionCurrentActionId: null,
|
|
421
|
+
},
|
|
422
|
+
intents: {},
|
|
423
|
+
contextTypes: {},
|
|
424
|
+
queue: {},
|
|
425
|
+
loopDetectionMap: {},
|
|
426
|
+
addIntentListenerMaxInitializationTimeout: 15000,
|
|
427
|
+
};
|
|
428
|
+
};
|
|
429
|
+
export const openApp = async ({ actionId, appId, pendingMessage, originatingAppId, originatingAppWindow, appDefinitions, }) => {
|
|
430
|
+
let error;
|
|
431
|
+
let windowName = undefined;
|
|
432
|
+
// Don't try to open an app that isn't known to the interopService. Cleaner but also because spawn results are inconsistent in picking up spawn errors.
|
|
433
|
+
if (appDefinitions[appId]) {
|
|
434
|
+
// set windowInterop.parent so auto-associate will work correctly for FDC3.
|
|
435
|
+
const { error: launcherError, response } = await LauncherClient.spawn(appId, {
|
|
436
|
+
addToWorkspace: true,
|
|
437
|
+
windowInterop: { parent: { windowName: originatingAppWindow, componentType: originatingAppId } },
|
|
438
|
+
});
|
|
439
|
+
if (response) {
|
|
440
|
+
const wi = response === null || response === void 0 ? void 0 : response.windowIdentifier;
|
|
441
|
+
windowName = wi === null || wi === void 0 ? void 0 : wi.windowName;
|
|
442
|
+
// something went wrong if the assigned window name has "undefined-" in it (this case doesn't result in a spawn error code being returned)
|
|
443
|
+
error = (launcherError !== null && launcherError !== void 0 ? launcherError : (windowName && windowName.includes("undefined-"))) ? `app ${appId} is undefined` : null;
|
|
444
|
+
Logger.system.debug("Interop.resolver.openApp", {
|
|
445
|
+
appId,
|
|
446
|
+
windowName,
|
|
447
|
+
pendingMessage,
|
|
448
|
+
response,
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
error = "No response from LauncherClient.spawn()";
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
error = `Application ${appId} not found in AppD configuration`;
|
|
457
|
+
}
|
|
458
|
+
return {
|
|
459
|
+
actionId,
|
|
460
|
+
error,
|
|
461
|
+
windowName,
|
|
462
|
+
pendingMessage,
|
|
463
|
+
};
|
|
464
|
+
};
|
|
465
|
+
// handles app resolution for raising an intent
|
|
466
|
+
export const resolveIntentApps = async (actionId, resolutionList, pendingMessage, originatingAppName, originatingAppId, originatingAppWindow) => {
|
|
467
|
+
const intentTargetList = {
|
|
468
|
+
resolutionList,
|
|
469
|
+
originatingAppName,
|
|
470
|
+
originatingAppId,
|
|
471
|
+
originatingAppWindow,
|
|
472
|
+
};
|
|
473
|
+
Logger.system.debug("Sending message to INTENT_RESOLVER_CHANNEL", INTENT_RESOLVER_CHANNEL, intentTargetList);
|
|
474
|
+
const { err, response } = await RouterClient.query(INTENT_RESOLVER_CHANNEL, intentTargetList);
|
|
475
|
+
if (err)
|
|
476
|
+
Logger.system.error("resolveIntentApps", err.toString());
|
|
477
|
+
const resolverResolution = response === null || response === void 0 ? void 0 : response.data;
|
|
478
|
+
Logger.system.debug("Interop.resolver.resolveIntentApps query response", {
|
|
479
|
+
intentTargetList,
|
|
480
|
+
resolverResolution,
|
|
481
|
+
});
|
|
482
|
+
return {
|
|
483
|
+
actionId,
|
|
484
|
+
resolverResolution,
|
|
485
|
+
pendingMessage,
|
|
486
|
+
};
|
|
487
|
+
};
|
|
488
|
+
/**
|
|
489
|
+
* Sends an intent to the FDC3 Resolver UI.
|
|
490
|
+
*/
|
|
491
|
+
const sendIntentToAppResolver = ({ state, cmd, actionId, fsa, resolutionList, originatingAppWindow, }) => {
|
|
492
|
+
var _a, _b, _c, _d;
|
|
493
|
+
// We will send a new intent to the UI, whether it's busy or not.
|
|
494
|
+
// If it is busy, cancel whatever it was busy with.
|
|
495
|
+
if (state.resolver.apps.intentResolutionInProgress) {
|
|
496
|
+
// Warning that this is what we're doing
|
|
497
|
+
Logger.warn("An intent has been raised while the previous intent remains unresolved. The previously raised intent will be cancelled.");
|
|
498
|
+
// Resolve previous action with ResolverUnavailable (same thing that gets fired when a raised intent is cancelled)
|
|
499
|
+
const raiseIntentResult = {
|
|
500
|
+
type: "raiseIntent",
|
|
501
|
+
error: ResolveError.ResolverUnavailable,
|
|
502
|
+
};
|
|
503
|
+
setActionResult(state.resolver.apps.intentResolutionCurrentActionId, raiseIntentResult);
|
|
504
|
+
}
|
|
505
|
+
state.resolver.apps.intentResolutionInProgress = true;
|
|
506
|
+
state.resolver.apps.intentResolutionCurrentActionId = actionId;
|
|
507
|
+
// Tell the UI resolver the name of the originating app, and if we don't know the name just use the uuid
|
|
508
|
+
const originatingAppName = (_b = (_a = state.resolver.clients[fsa.meta.uuid]) === null || _a === void 0 ? void 0 : _a.appName) !== null && _b !== void 0 ? _b : fsa.meta.uuid;
|
|
509
|
+
const originatingAppId = (_d = (_c = state.resolver.clients[fsa.meta.uuid]) === null || _c === void 0 ? void 0 : _c.appId) !== null && _d !== void 0 ? _d : originatingAppName;
|
|
510
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(resolveIntentApps, {
|
|
511
|
+
args: [actionId, unImmer(resolutionList), fsa, originatingAppName, originatingAppId, originatingAppWindow],
|
|
512
|
+
successActionCreator: actions.handleUIResolutionResponse,
|
|
513
|
+
});
|
|
514
|
+
};
|
|
515
|
+
/**
|
|
516
|
+
* Sends an intent to a running app by looping the fsa to broadcast
|
|
517
|
+
*/
|
|
518
|
+
const sendIntentToRunningApp = ({ app, cmd, fsa, }) => {
|
|
519
|
+
const { uuid } = app;
|
|
520
|
+
const interopBroadcast = Object.assign(Object.assign({}, fsa), { meta: Object.assign(Object.assign({}, fsa.meta), { to: uuid }) });
|
|
521
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.broadcast(interopBroadcast));
|
|
522
|
+
};
|
|
523
|
+
/**
|
|
524
|
+
* Opens an app as a result of a RaiseIntent. The intent is forwarded
|
|
525
|
+
* to `openApp` which will then queue it until a listener is registered
|
|
526
|
+
*/
|
|
527
|
+
const openAppForIntent = ({ actionId, fsa, cmd, state, appId, originatingAppId, originatingAppWindow, }) => {
|
|
528
|
+
Logger.system.debug("Interop.resolver.raiseIntent opening app", {
|
|
529
|
+
appId,
|
|
530
|
+
fsa,
|
|
531
|
+
});
|
|
532
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(openApp, {
|
|
533
|
+
args: [
|
|
534
|
+
{
|
|
535
|
+
actionId,
|
|
536
|
+
appId,
|
|
537
|
+
pendingMessage: fsa,
|
|
538
|
+
originatingAppId,
|
|
539
|
+
originatingAppWindow,
|
|
540
|
+
appDefinitions: unImmer(state.resolver.apps.definitions),
|
|
541
|
+
},
|
|
542
|
+
],
|
|
543
|
+
successActionCreator: actions.openedApp,
|
|
544
|
+
});
|
|
545
|
+
};
|
|
546
|
+
/**
|
|
547
|
+
* Filter any stale messages from queue and respond to any corresponding pending actions.
|
|
548
|
+
* This is an indirect method to recognize an apps isn't following expected behavior as defined in appD.
|
|
549
|
+
*/
|
|
550
|
+
export const filterAndResolveStaleMessages = ({ state }, cmd) => {
|
|
551
|
+
// Any message that has not been delivered within ERROR_TIME is a stale message that will be dropped
|
|
552
|
+
const ERROR_TIME = 60 * 1000;
|
|
553
|
+
// ERROR_TIME often takes too long for the typical developer feedback, so put out a warning message earlier.
|
|
554
|
+
const WARNING_TIME = 10 * 1000;
|
|
555
|
+
Object.keys(state.resolver.queue).forEach((key) => {
|
|
556
|
+
const queue = state.resolver.queue[key];
|
|
557
|
+
Logger.system.debug(`Interop.resolver.filterAndResolveStaleMessages ${key} queue depth=${queue.length}`, queue);
|
|
558
|
+
// Filter out and process messages that are ready to be sent (or drop stale messages). It is important to abide by the queue's order, processing from oldest to newest.
|
|
559
|
+
const newQueue = queue.filter((item) => {
|
|
560
|
+
const { pendingMessage, timestamp } = item;
|
|
561
|
+
// Filter the message if the timestamp has expired; might happen for app that doesn't register for pending message;
|
|
562
|
+
// Large ERROR_TIME value is needed to cover a large workspace load of heavy apps.
|
|
563
|
+
// We probably need a config value; in mean time a mid-range but sufficiently large timer value is used
|
|
564
|
+
if (timestamp && Date.now() - timestamp > ERROR_TIME) {
|
|
565
|
+
Logger.error("Stale interop message discarded since no receiving app. Interop.resolver.filterAndResolveStaleMessages: Message expired because it couldn't be delivered. Likely cause is app behavior doesn't match expected behavior, perhaps due to appD config", item, pendingMessage);
|
|
566
|
+
const messageTitle = "FDC3 AppD Config Issue";
|
|
567
|
+
const messageDetails = `Stale interop message discarded since no receiving app. Check the central logger for more information.`;
|
|
568
|
+
const devModeOnly = true;
|
|
569
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(notifyEndUser, {
|
|
570
|
+
args: [messageTitle, messageDetails, devModeOnly],
|
|
571
|
+
});
|
|
572
|
+
// if the stale message has a pending action, then respond to the action with an error
|
|
573
|
+
const { pendingActionId } = pendingMessage.meta;
|
|
574
|
+
if (pendingActionId) {
|
|
575
|
+
const actionResult = pendingActionId.type === "raiseIntent"
|
|
576
|
+
? {
|
|
577
|
+
type: "raiseIntent",
|
|
578
|
+
error: ResolveError.ResolverTimeout,
|
|
579
|
+
}
|
|
580
|
+
: {
|
|
581
|
+
type: "open",
|
|
582
|
+
error: OpenError.AppTimeout,
|
|
583
|
+
};
|
|
584
|
+
setActionResult(pendingActionId, actionResult);
|
|
585
|
+
}
|
|
586
|
+
return false;
|
|
587
|
+
}
|
|
588
|
+
else if (timestamp && Date.now() - timestamp > WARNING_TIME) {
|
|
589
|
+
Logger.warn("Interop.resolver.filterAndResolveStaleMessages: Message has been in the queue a long time. Possible cause is app behavior doesn't match appD config (e.g. app doesn't handle intent that appD indicates is handled", item);
|
|
590
|
+
}
|
|
591
|
+
// otherwise the message is not stale so keep it
|
|
592
|
+
return true;
|
|
593
|
+
});
|
|
594
|
+
newQueue.length ? (state.resolver.queue[key] = newQueue) : delete state.resolver.queue[key];
|
|
595
|
+
});
|
|
596
|
+
};
|
|
597
|
+
/**
|
|
598
|
+
* Logs an error if an app didn't add listeners for all the intents identified in its AppD definition
|
|
599
|
+
*/
|
|
600
|
+
const verifyListeners = ({ state }, cmd) => {
|
|
601
|
+
Object.keys(state.resolver.apps.definitions).forEach((appId) => {
|
|
602
|
+
const appDefinition = state.resolver.apps.definitions[appId];
|
|
603
|
+
// If the name and appId are the same, then that's our name. Otherwise, we might have multiple instances of
|
|
604
|
+
// the same name, so we use a compound `Chart:3424343`
|
|
605
|
+
const friendlyName = getFriendlyName(appDefinition);
|
|
606
|
+
Logger.system.debug(`Interop.resolver.verifyIntentListeners checking ${friendlyName}`);
|
|
607
|
+
const initializationComplete = (appDefinition === null || appDefinition === void 0 ? void 0 : appDefinition.firstRegistrationTimestamp) &&
|
|
608
|
+
Date.now() - appDefinition.firstRegistrationTimestamp > state.resolver.addIntentListenerMaxInitializationTimeout;
|
|
609
|
+
if (initializationComplete && !(appDefinition === null || appDefinition === void 0 ? void 0 : appDefinition.verified)) {
|
|
610
|
+
const intents = (appDefinition === null || appDefinition === void 0 ? void 0 : appDefinition.intents) ? Object.values(appDefinition === null || appDefinition === void 0 ? void 0 : appDefinition.intents) : [];
|
|
611
|
+
// An app is incomplete if it didn't add a listener for at least one of the intents in its AppD entry
|
|
612
|
+
const missingIntents = intents.flatMap((intent) => (intent.appListenerAdded ? [] : [intent.name]));
|
|
613
|
+
if (missingIntents.length) {
|
|
614
|
+
// If incomplete then log an error, but only do it once for the app
|
|
615
|
+
Logger.system.error(`Interop.resolver.verifyIntentListeners: "${friendlyName}" didn't call addIntentListener() for intents specified in its AppD config. Update AppD config to match functionality of app.`, "MISSING INTENTS:", missingIntents, "EXPECTED INTENTS:", appDefinition.intents);
|
|
616
|
+
const messageTitle = "FDC3 AppD Config Issue";
|
|
617
|
+
const messageDetails = `"${friendlyName}" didn't call addIntentListener() for intents "${missingIntents}" specified in its AppD config. Check the central logger for more information.`;
|
|
618
|
+
const devModeOnly = true; // This const sole purpose is to improve readability when invoking the notifyEndUser method bellow.
|
|
619
|
+
// the true argument is to flag that this a notification to display in dev mode only
|
|
620
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(notifyEndUser, {
|
|
621
|
+
args: [messageTitle, messageDetails, devModeOnly],
|
|
622
|
+
});
|
|
623
|
+
}
|
|
624
|
+
// Regardless of whether it registered all intents or not, it's now been verified. With this flag set to true we'll never get another
|
|
625
|
+
// user notification for that app type again.
|
|
626
|
+
appDefinition.verified = true;
|
|
627
|
+
}
|
|
628
|
+
});
|
|
629
|
+
};
|
|
630
|
+
/**
|
|
631
|
+
* Sends a heartbeat message to every attached client. Clients can use the receipt/non-receipt of a heartbeat
|
|
632
|
+
* to assess whether they've lost connectivity to the interop service.
|
|
633
|
+
*/
|
|
634
|
+
const sendHeartbeats = ({ state }, cmd) => {
|
|
635
|
+
Logger.system.debug(`Interop.resolver.sendHeartbeats`, Object.keys(state.resolver.clients));
|
|
636
|
+
const heartbeatFSA = {
|
|
637
|
+
type: "heartbeat",
|
|
638
|
+
meta: {
|
|
639
|
+
uuid: "interopService",
|
|
640
|
+
},
|
|
641
|
+
};
|
|
642
|
+
Object.values(state.resolver.clients).forEach((client) => {
|
|
643
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(sendMessageOnRouter, {
|
|
644
|
+
args: [client.routerChannel, heartbeatFSA],
|
|
645
|
+
});
|
|
646
|
+
});
|
|
647
|
+
};
|
|
648
|
+
/**
|
|
649
|
+
* Filter any messages from queue that are addressed to unregistered clients plus respond to any corresponding pending actions.
|
|
650
|
+
*/
|
|
651
|
+
const filterAndResolveDeadMessages = ({ state }) => {
|
|
652
|
+
Object.keys(state.resolver.queue).forEach((key) => {
|
|
653
|
+
const queue = state.resolver.queue[key];
|
|
654
|
+
Logger.system.debug(`Interop.resolver.filterAndResolveDeadMessages ${key} queue depth=${queue.length}`, queue);
|
|
655
|
+
const newQueue = queue.filter((item) => {
|
|
656
|
+
const { pendingMessage } = item;
|
|
657
|
+
// if message destination is not registered, then it is a dead message
|
|
658
|
+
if (state.resolver.clients[pendingMessage.meta.uuid] === undefined) {
|
|
659
|
+
Logger.error("Interop.resolver.filterAndResolveDeadMessages: Destination client is not registered so message dropped.", item, pendingMessage);
|
|
660
|
+
// if the dead message has a pending action, then respond to the action with an error
|
|
661
|
+
const { pendingActionId } = pendingMessage.meta;
|
|
662
|
+
if (pendingActionId) {
|
|
663
|
+
const actionResult = pendingActionId.type === "raiseIntent"
|
|
664
|
+
? {
|
|
665
|
+
type: "raiseIntent",
|
|
666
|
+
error: ResolveError.ResolverTimeout,
|
|
667
|
+
}
|
|
668
|
+
: {
|
|
669
|
+
type: "open",
|
|
670
|
+
error: OpenError.AppTimeout,
|
|
671
|
+
};
|
|
672
|
+
setActionResult(pendingActionId, actionResult);
|
|
673
|
+
}
|
|
674
|
+
return false;
|
|
675
|
+
}
|
|
676
|
+
// otherwise the message is not dead so keep it
|
|
677
|
+
return true;
|
|
678
|
+
});
|
|
679
|
+
newQueue.length ? (state.resolver.queue[key] = newQueue) : delete state.resolver.queue[key];
|
|
680
|
+
});
|
|
681
|
+
};
|
|
682
|
+
/**
|
|
683
|
+
* Returns true if the message matches any of the provided criteria
|
|
684
|
+
*/
|
|
685
|
+
const matchMessage = ({ pendingMessage, type, intent, contextType, channel, }) => {
|
|
686
|
+
var _a;
|
|
687
|
+
if (type && pendingMessage.type === type)
|
|
688
|
+
return true;
|
|
689
|
+
if (intent && pendingMessage.payload.intent === intent)
|
|
690
|
+
return true;
|
|
691
|
+
if (contextType && ((_a = pendingMessage.payload.context) === null || _a === void 0 ? void 0 : _a.type) === contextType)
|
|
692
|
+
return true;
|
|
693
|
+
return !!(channel && pendingMessage.meta.channel === channel);
|
|
694
|
+
};
|
|
695
|
+
/**
|
|
696
|
+
* Releases queued messages. This can be called from three possible places:
|
|
697
|
+
* 1) subscribeContext - In order to release any pending broadcasts (such as from a prior `open` call, or from a #Workspace initializing broadcast)
|
|
698
|
+
* 2) subscribeIntent - Similarly, in order to release any pending intents from a prior call to `raiseIntent`
|
|
699
|
+
* 3) register - When an app client registers (and thus selectConnect rules can be processed correctly)
|
|
700
|
+
*
|
|
701
|
+
* This manages a race condition. subscribeContext/subscribeIntent can occur both before or after register completes.
|
|
702
|
+
* (a) When they occur before, then the app won't yet be ready, so the items remain queued but the "subscriberIsReady" flag is flipped to true.
|
|
703
|
+
* Then when register calls releaseQueuedMessages again, all of the items with subscriberIsReady will be released.
|
|
704
|
+
*
|
|
705
|
+
* (b) When they occur after, the app will already be ready, so the items will immediately be broadcast
|
|
706
|
+
*/
|
|
707
|
+
export const releaseQueuedMessages = ({ state, uuid, channel, cmd, type, intent, contextType, }) => {
|
|
708
|
+
const { windowName, readiness } = state.resolver.clients[uuid];
|
|
709
|
+
const key = state.resolver.queue[uuid] ? uuid : windowName;
|
|
710
|
+
const queue = state.resolver.queue[key];
|
|
711
|
+
if (!queue)
|
|
712
|
+
return;
|
|
713
|
+
Logger.system.debug(`Interop.resolver.releaseQueuedMessages ${windowName} depth=${queue.length}`, {
|
|
714
|
+
queue,
|
|
715
|
+
state: state.resolver,
|
|
716
|
+
uuid,
|
|
717
|
+
channel,
|
|
718
|
+
cmd,
|
|
719
|
+
type,
|
|
720
|
+
intent,
|
|
721
|
+
contextType,
|
|
722
|
+
});
|
|
723
|
+
// Filter out and process messages that are ready to be sent. It is important to abide by the queue's order, processing from oldest to newest.
|
|
724
|
+
const newQueue = queue.filter((item) => {
|
|
725
|
+
const { pendingMessage } = item;
|
|
726
|
+
/**
|
|
727
|
+
* Tricky logic here. If "type" is set then the call was from subscribeContext or subscribeIntent. In this case
|
|
728
|
+
* if the app isn't yet ready then just set the subscriberIsReady flag to true
|
|
729
|
+
*
|
|
730
|
+
* But if "type" isn't set, then the call was from register. The app is now ready, so release this
|
|
731
|
+
* item only if a prior call to subscribeContext or subscribeIntent has flipped the subscriberIsReady flag to true.
|
|
732
|
+
*/
|
|
733
|
+
if (type && readiness !== "ready") {
|
|
734
|
+
item.subscriberIsReady = true;
|
|
735
|
+
return true;
|
|
736
|
+
}
|
|
737
|
+
else if (!type && !item.subscriberIsReady) {
|
|
738
|
+
return true;
|
|
739
|
+
}
|
|
740
|
+
// If the message doesn't match any of our criteria for releasing, then keep it in the queue
|
|
741
|
+
if (!matchMessage({ pendingMessage, type, intent, contextType, channel }))
|
|
742
|
+
return true;
|
|
743
|
+
// Make sure the broadcast is only to this specific uuid
|
|
744
|
+
const directedMessage = Object.assign(Object.assign({}, pendingMessage), { meta: Object.assign(Object.assign({}, pendingMessage.meta), { to: uuid }) });
|
|
745
|
+
Logger.system.debug(`Interop.resolver.releaseQueuedMessages ${windowName} BROADCAST`, item, directedMessage);
|
|
746
|
+
// Broadcast it now that we're subscribed
|
|
747
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.broadcast(unImmer(directedMessage)));
|
|
748
|
+
// and unqueue it
|
|
749
|
+
return false;
|
|
750
|
+
});
|
|
751
|
+
newQueue.length ? (state.resolver.queue[key] = newQueue) : delete state.resolver.queue[key];
|
|
752
|
+
};
|
|
753
|
+
const getDestinationsForContext = ({ clients, sender, senderUuid, channel: toChannel, context, to, autoBroadcast, }) => {
|
|
754
|
+
const contextType = context.type;
|
|
755
|
+
const destinationForChannel = (receiver, channel, isSubscribed, isSubscribedToWildcard) => {
|
|
756
|
+
var _a, _b, _c, _d;
|
|
757
|
+
const { routerChannel, uuid } = receiver;
|
|
758
|
+
const subscribedOnThisChannel = !!((_b = (_a = receiver.subscriptions.channels[channel]) === null || _a === void 0 ? void 0 : _a.contexts[contextType]) === null || _b === void 0 ? void 0 : _b.context);
|
|
759
|
+
const subscribedToWildCardOnThisChannel = !!((_d = (_c = receiver.subscriptions.channels[channel]) === null || _c === void 0 ? void 0 : _c.contexts["*"]) === null || _d === void 0 ? void 0 : _d.context);
|
|
760
|
+
const type = "client";
|
|
761
|
+
// Is receiver listening on the specified channel?
|
|
762
|
+
if (receiver.subscriptions.channels[channel]) {
|
|
763
|
+
if (subscribedOnThisChannel)
|
|
764
|
+
return [{ type, uuid, channel, contextType, context, routerChannel }];
|
|
765
|
+
if (subscribedToWildCardOnThisChannel)
|
|
766
|
+
return [{ type, uuid, channel, contextType: "*", context, routerChannel }];
|
|
767
|
+
}
|
|
768
|
+
// Is receiver joined to this channel? (the sender has chosen to broadcast directly on a "system channel" using the channel API)
|
|
769
|
+
// In this case, don't include the "channel" in the destination message
|
|
770
|
+
const destination = (isSubscribed && [{ type, uuid, contextType, context, routerChannel }]) ||
|
|
771
|
+
(isSubscribedToWildcard && [{ type, uuid, contextType: "*", context, routerChannel }]) ||
|
|
772
|
+
[];
|
|
773
|
+
if (receiver.joinedChannels.includes(channel)) {
|
|
774
|
+
return destination;
|
|
775
|
+
}
|
|
776
|
+
// Broadcasts that don't specify a channel are received by listeners on their global channel
|
|
777
|
+
return [];
|
|
778
|
+
};
|
|
779
|
+
const destinationFor = (receiver, isSubscribed, isSubscribedToWildcard) => {
|
|
780
|
+
var _a, _b, _c, _d, _e;
|
|
781
|
+
const { routerChannel, uuid } = receiver;
|
|
782
|
+
const type = "client";
|
|
783
|
+
// The destination is the context listener, and if not then the wild card listener, and if not then nothing
|
|
784
|
+
const destination = (isSubscribed && [{ type, uuid, contextType, context, routerChannel }]) ||
|
|
785
|
+
(isSubscribedToWildcard && [{ type, uuid, contextType: "*", context, routerChannel }]) ||
|
|
786
|
+
[];
|
|
787
|
+
// Directed messages should only go to that specific app
|
|
788
|
+
if (to)
|
|
789
|
+
return destination;
|
|
790
|
+
// Is the receiver joined to any of the same channels as the sender?
|
|
791
|
+
if (sender && sender.joinedChannels.some((c) => receiver.joinedChannels.includes(c)))
|
|
792
|
+
return destination;
|
|
793
|
+
// Are neither sender nor receiver using the linker, and neither are joined to channels (independently of using the linker)
|
|
794
|
+
if (!((_b = (_a = receiver.config) === null || _a === void 0 ? void 0 : _a.interop) === null || _b === void 0 ? void 0 : _b.useLinker) &&
|
|
795
|
+
!((_d = (_c = sender === null || sender === void 0 ? void 0 : sender.config) === null || _c === void 0 ? void 0 : _c.interop) === null || _d === void 0 ? void 0 : _d.useLinker) &&
|
|
796
|
+
!((_e = sender === null || sender === void 0 ? void 0 : sender.joinedChannels) === null || _e === void 0 ? void 0 : _e.length) &&
|
|
797
|
+
!receiver.joinedChannels.length) {
|
|
798
|
+
return destination;
|
|
799
|
+
}
|
|
800
|
+
return [];
|
|
801
|
+
};
|
|
802
|
+
const destinations = Object.values(clients).flatMap((receiver) => {
|
|
803
|
+
var _a, _b;
|
|
804
|
+
// Filter any clients not in our store
|
|
805
|
+
if (!receiver)
|
|
806
|
+
return [];
|
|
807
|
+
const { routerChannel, uuid } = receiver;
|
|
808
|
+
// Don't send messages to ourselves, but allow if autoBroadcast (where senderUuid must be set to destination uuid for authentication)
|
|
809
|
+
if (uuid === senderUuid && !autoBroadcast)
|
|
810
|
+
return [];
|
|
811
|
+
// If the message is directed to a specific recipient then ignore all other uuids
|
|
812
|
+
if (to && uuid !== to)
|
|
813
|
+
return [];
|
|
814
|
+
// The set of all possible applicable subscriptions
|
|
815
|
+
const isSubscribed = !!((_a = receiver.subscriptions.globals.contexts[contextType]) === null || _a === void 0 ? void 0 : _a.context);
|
|
816
|
+
const isSubscribedToWildcard = !!((_b = receiver.subscriptions.globals.contexts["*"]) === null || _b === void 0 ? void 0 : _b.context);
|
|
817
|
+
const type = "client";
|
|
818
|
+
// Broadcasts on a specific "app channel" are only received by listeners on that specific channel
|
|
819
|
+
if (toChannel)
|
|
820
|
+
return destinationForChannel(receiver, toChannel, isSubscribed, isSubscribedToWildcard);
|
|
821
|
+
// Derive the destination - e.g. from joined system channels or directed message ("to")
|
|
822
|
+
const destination = destinationFor(receiver, isSubscribed, isSubscribedToWildcard);
|
|
823
|
+
if (destination.length)
|
|
824
|
+
return destination;
|
|
825
|
+
// broadcast messages originating internally do not have a sender, so skip next check if sender isn't defined
|
|
826
|
+
if (!sender)
|
|
827
|
+
return [];
|
|
828
|
+
// Is the receiver listening for this context type *only* on a specified system channel that the sender is joined to?
|
|
829
|
+
// i.e. did the receiver call channel.addContextLister() on a system channel?
|
|
830
|
+
const channelSends = sender.joinedChannels.flatMap((joinedChannel) => {
|
|
831
|
+
var _a, _b, _c, _d;
|
|
832
|
+
const localSubscription = (_b = (_a = receiver.subscriptions.channels[joinedChannel]) === null || _a === void 0 ? void 0 : _a.contexts[contextType]) === null || _b === void 0 ? void 0 : _b.context;
|
|
833
|
+
const localAnySubscription = (_d = (_c = receiver.subscriptions.channels[joinedChannel]) === null || _c === void 0 ? void 0 : _c.contexts["*"]) === null || _d === void 0 ? void 0 : _d.context;
|
|
834
|
+
if (localSubscription)
|
|
835
|
+
return [{ type, uuid, channel: joinedChannel, contextType, context, routerChannel }];
|
|
836
|
+
if (localAnySubscription)
|
|
837
|
+
return [{ type, uuid, channel: joinedChannel, contextType: "*", context, routerChannel }];
|
|
838
|
+
return [];
|
|
839
|
+
});
|
|
840
|
+
if (channelSends.length)
|
|
841
|
+
return channelSends;
|
|
842
|
+
// Any remaining clients aren't listening on the correct channel or contextType
|
|
843
|
+
return [];
|
|
844
|
+
});
|
|
845
|
+
return destinations;
|
|
846
|
+
};
|
|
847
|
+
const getDestinationsForIntent = ({ clients, to, context, intent, }) => {
|
|
848
|
+
const contextType = context === null || context === void 0 ? void 0 : context.type;
|
|
849
|
+
const receiver = clients[to];
|
|
850
|
+
// flatMap is used to add or remove items from an array: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap#for_adding_and_removing_items_during_a_map
|
|
851
|
+
const destinations = Object.values(clients).flatMap((destination) => {
|
|
852
|
+
// Filter any clients not in our store
|
|
853
|
+
if (!destination)
|
|
854
|
+
return [];
|
|
855
|
+
const { routerChannel, uuid } = destination;
|
|
856
|
+
// The set of all possible applicable subscriptions
|
|
857
|
+
const globalSubscription = receiver.subscriptions.globals.intents[intent];
|
|
858
|
+
const type = "client";
|
|
859
|
+
if (uuid == receiver.uuid) {
|
|
860
|
+
// When we find our receiver (if it's subscribed which it should be) then add it as a destination for the intent
|
|
861
|
+
if (globalSubscription)
|
|
862
|
+
return [{ type, uuid, intent, contextType, context, routerChannel }];
|
|
863
|
+
}
|
|
864
|
+
else if (context &&
|
|
865
|
+
globalSubscription &&
|
|
866
|
+
(receiver === null || receiver === void 0 ? void 0 : receiver.joinedChannels.some((c) => destination.joinedChannels.includes(c)))) {
|
|
867
|
+
// But if any destination is linked to the receiver (i.e. joined to any of the same channels) then also send that destination a context update (no intent!)
|
|
868
|
+
return [{ type, uuid, contextType, context, routerChannel }];
|
|
869
|
+
}
|
|
870
|
+
// Any remaining clients aren't listening on the correct channel or intent
|
|
871
|
+
return [];
|
|
872
|
+
});
|
|
873
|
+
return destinations;
|
|
874
|
+
};
|
|
875
|
+
/**
|
|
876
|
+
* Returns timestamp when JWT was created (uses JWT header data, which is also included in the signed data).
|
|
877
|
+
*/
|
|
878
|
+
const getJwtCreationTime = (jwt) => {
|
|
879
|
+
try {
|
|
880
|
+
const jwtData = JSON.parse(atob(jwt.split(".")[1]));
|
|
881
|
+
return jwtData.iat * 1000; // JWT uses seconds but milliseconds should be returned for timestamp compatibility
|
|
882
|
+
}
|
|
883
|
+
catch (e) {
|
|
884
|
+
Logger.system.error(`Interop.resolver.validAuthenticationToken: getJwtCreationTime failed. Bad JWT ${jwt}.`);
|
|
885
|
+
return 0; // must ensure expired if bad JWT
|
|
886
|
+
}
|
|
887
|
+
};
|
|
888
|
+
/**
|
|
889
|
+
* Returns true if static authorization signature has expired. This timestamp prevents static authentication tokens from being reused.
|
|
890
|
+
*/
|
|
891
|
+
const SIGNATURE_TTL = 30000; // static auth uses a TTL check distinct from dynamic auth
|
|
892
|
+
const expiredStaticAuthSignature = (authenticationToken) => {
|
|
893
|
+
// Typically the timestamp field is already set, but for a JTW the timestamp field must be set here to when the JWT was created.
|
|
894
|
+
// Note for static auth, the timestamp field is in the signed data, but for JWT the iot field can be reliably used.
|
|
895
|
+
if (authenticationToken.signatureStringType === "static-jwt") {
|
|
896
|
+
authenticationToken.timestamp = getJwtCreationTime(authenticationToken.signatureString);
|
|
897
|
+
}
|
|
898
|
+
const expired = authenticationToken.timestamp != undefined && Date.now() - authenticationToken.timestamp > SIGNATURE_TTL;
|
|
899
|
+
return expired;
|
|
900
|
+
};
|
|
901
|
+
/**
|
|
902
|
+
* Returns matching InteropRegistrationData based on windowName
|
|
903
|
+
* @param windowName
|
|
904
|
+
* @param pendingInteropRegistrationData
|
|
905
|
+
* @returns matching object
|
|
906
|
+
*/
|
|
907
|
+
const getMatchingInteropRegistrationData = (windowName, pendingInteropRegistrationData) => {
|
|
908
|
+
const matchingRegistrationData = pendingInteropRegistrationData.find((registrationData) => windowName === registrationData.name);
|
|
909
|
+
Logger.system.debug(`Interop.resolver.getMatchingInteropRegistrationData result for ${windowName}`, {
|
|
910
|
+
windowName,
|
|
911
|
+
matchingRegistrationData,
|
|
912
|
+
});
|
|
913
|
+
return matchingRegistrationData;
|
|
914
|
+
};
|
|
915
|
+
const removeAppInteropRegistrationData = (windowName, pendingInteropRegistrationData) => {
|
|
916
|
+
let whatWillBeFiltered = pendingInteropRegistrationData.filter((registrationData) => windowName === registrationData.name);
|
|
917
|
+
let filteredRegistrationData = pendingInteropRegistrationData.filter((registrationData) => windowName !== registrationData.name);
|
|
918
|
+
Logger.system.debug("forceObjectsToLogger", `Interop.resolver.removeAppInteropRegistrationData for ${windowName}`, {
|
|
919
|
+
windowName,
|
|
920
|
+
whatWillBeFiltered,
|
|
921
|
+
filteredRegistrationData,
|
|
922
|
+
pendingInteropRegistrationData,
|
|
923
|
+
});
|
|
924
|
+
return filteredRegistrationData;
|
|
925
|
+
};
|
|
926
|
+
/**
|
|
927
|
+
* Returns signiture key (i.e. the public key) needed for static auth. The key may be in config or referenced by a URL.
|
|
928
|
+
* @param config
|
|
929
|
+
* @returns a signature key, or undefined if key couldn't be found
|
|
930
|
+
*/
|
|
931
|
+
const getSignatureKey = async (config) => {
|
|
932
|
+
let signatureKey;
|
|
933
|
+
if (config === null || config === void 0 ? void 0 : config.signatureKeyURL) {
|
|
934
|
+
let { err, getData } = await httpGet(config.signatureKeyURL);
|
|
935
|
+
if (err) {
|
|
936
|
+
Logger.system.error(`Interop.resolver.getSignatureKey: the fetch for the signature key failed: ${err}`, {
|
|
937
|
+
config,
|
|
938
|
+
});
|
|
939
|
+
}
|
|
940
|
+
else {
|
|
941
|
+
signatureKey = getData;
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
else if (config === null || config === void 0 ? void 0 : config.signatureKey) {
|
|
945
|
+
({ signatureKey } = config);
|
|
946
|
+
}
|
|
947
|
+
Logger.system.debug(`Interop.resolver.getSignatureKey result`, {
|
|
948
|
+
config,
|
|
949
|
+
signatureKey,
|
|
950
|
+
});
|
|
951
|
+
return signatureKey;
|
|
952
|
+
};
|
|
953
|
+
/**
|
|
954
|
+
* Returns true if static authentication was successful
|
|
955
|
+
* @param config
|
|
956
|
+
* @param authenticationToken
|
|
957
|
+
* @returns true if authenticated and false otherwise
|
|
958
|
+
*/
|
|
959
|
+
export const validStaticAuthenticationToken = async (config, authenticationToken) => {
|
|
960
|
+
let authenticated = false;
|
|
961
|
+
const signatureKey = await getSignatureKey(config);
|
|
962
|
+
if (signatureKey) {
|
|
963
|
+
if (!expiredStaticAuthSignature(authenticationToken)) {
|
|
964
|
+
if (authenticationToken.signatureStringType === "static-jwt") {
|
|
965
|
+
const { verificationResult } = await authVerifyJWT(signatureKey, authenticationToken.signatureString);
|
|
966
|
+
authenticated = verificationResult;
|
|
967
|
+
}
|
|
968
|
+
else if (authenticationToken.signatureStringType === "static") {
|
|
969
|
+
const { verificationResult } = await authVerify(signatureKey, authenticationToken.signatureString, { timestamp: authenticationToken.timestamp });
|
|
970
|
+
authenticated = verificationResult;
|
|
971
|
+
}
|
|
972
|
+
else {
|
|
973
|
+
Logger.system.error(`Interop.resolver.validAuthenticationToken static authenticated failed -- token signatureStringType must be "static" or "static-jwt", but found ${authenticationToken.signatureStringType}`, config, authenticationToken);
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
else {
|
|
977
|
+
Logger.system.error("Interop.resolver.validAuthenticationToken static authenticated failed due to missing or expired authentication timestamp.", config, authenticationToken, Date.now());
|
|
978
|
+
}
|
|
979
|
+
if (authenticated) {
|
|
980
|
+
Logger.system.debug("Interop.resolver.validAuthenticationToken static authenticated successful", config, authenticationToken);
|
|
981
|
+
}
|
|
982
|
+
else if (!expiredStaticAuthSignature(authenticationToken)) {
|
|
983
|
+
Logger.system.error("Interop.resolver.validAuthenticationToken static authenticated failed. Confirm the app's AppD config has the correct `signatureKey` value.", config, authenticationToken);
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
else {
|
|
987
|
+
Logger.system.error("Interop.resolver.validAuthenticationToken static authenticated failed -- `signatureKey` could not be found", config, authenticationToken);
|
|
988
|
+
}
|
|
989
|
+
return authenticated;
|
|
990
|
+
};
|
|
991
|
+
// Returns true if an app is autoAssociated with the parent (as specified in the parents's appD).
|
|
992
|
+
const isAutoAssociatedWithParent = (appId, parentAppD) => {
|
|
993
|
+
var _a, _b, _c, _d;
|
|
994
|
+
let autoAssociate;
|
|
995
|
+
let selectedChild = false;
|
|
996
|
+
const selectConnectProp = (_b = (_a = parentAppD === null || parentAppD === void 0 ? void 0 : parentAppD.manifest) === null || _a === void 0 ? void 0 : _a.interop) === null || _b === void 0 ? void 0 : _b.selectConnect;
|
|
997
|
+
if (Array.isArray(selectConnectProp)) {
|
|
998
|
+
const autoAssociateElement = (_c = selectConnectProp === null || selectConnectProp === void 0 ? void 0 : selectConnectProp.find((element) => element.autoAssociate)) !== null && _c !== void 0 ? _c : {};
|
|
999
|
+
({ autoAssociate } = autoAssociateElement);
|
|
1000
|
+
if (Array.isArray(autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.selectChildren)) {
|
|
1001
|
+
selectedChild = (_d = autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.selectChildren) === null || _d === void 0 ? void 0 : _d.includes(appId);
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
return ((autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.allChildren) || selectedChild || (!(autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.selectChildren) && (autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.usingConnectId)));
|
|
1005
|
+
};
|
|
1006
|
+
// Returns true if an app auto-associates its children (as specified in the app's appD).
|
|
1007
|
+
const isAutoAssociatingChildren = (appD) => {
|
|
1008
|
+
var _a, _b, _c;
|
|
1009
|
+
let autoAssociate;
|
|
1010
|
+
const selectConnectProp = (_b = (_a = appD === null || appD === void 0 ? void 0 : appD.manifest) === null || _a === void 0 ? void 0 : _a.interop) === null || _b === void 0 ? void 0 : _b.selectConnect;
|
|
1011
|
+
if (Array.isArray(selectConnectProp)) {
|
|
1012
|
+
const autoAssociateElement = (_c = selectConnectProp === null || selectConnectProp === void 0 ? void 0 : selectConnectProp.find((element) => element.autoAssociate)) !== null && _c !== void 0 ? _c : {};
|
|
1013
|
+
({ autoAssociate } = autoAssociateElement);
|
|
1014
|
+
}
|
|
1015
|
+
return (autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.allChildren) || (autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.selectChildren) || (autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.usingConnectId);
|
|
1016
|
+
};
|
|
1017
|
+
const getAppDSpecifiedConnectId = (appD) => {
|
|
1018
|
+
var _a, _b, _c;
|
|
1019
|
+
let autoAssociate;
|
|
1020
|
+
const selectConnectProp = (_b = (_a = appD === null || appD === void 0 ? void 0 : appD.manifest) === null || _a === void 0 ? void 0 : _a.interop) === null || _b === void 0 ? void 0 : _b.selectConnect;
|
|
1021
|
+
if (Array.isArray(selectConnectProp)) {
|
|
1022
|
+
const autoAssociateElement = (_c = selectConnectProp === null || selectConnectProp === void 0 ? void 0 : selectConnectProp.find((element) => element.autoAssociate)) !== null && _c !== void 0 ? _c : {};
|
|
1023
|
+
({ autoAssociate } = autoAssociateElement);
|
|
1024
|
+
}
|
|
1025
|
+
return autoAssociate === null || autoAssociate === void 0 ? void 0 : autoAssociate.usingConnectId;
|
|
1026
|
+
};
|
|
1027
|
+
let connectIdCounter = 0; // counter of new connected ids created since startup (for use in newConnectId)
|
|
1028
|
+
// Generate a unique connection Id within Finsemble (just unique within this run -- don't need a GUID)
|
|
1029
|
+
const newConnectId = () => `connectId-${new Date().getTime()}-${connectIdCounter++}`;
|
|
1030
|
+
// Maps a launchGroupId to a connect Id. Note: the same connectId must always be returned for a given launcherGroupId
|
|
1031
|
+
const deriveConnectIdFromLaunchGroupId = (launchGroupId) => `connectId-${launchGroupId}`;
|
|
1032
|
+
// Get the connectId for a launcherGroupId. If launcherGroup app has connectId defined in appD, then use it; otherwise create a connectId directly from the launcherGroup Id
|
|
1033
|
+
const getLauncherGroupConnectId = (parentAppD, launchGroupId) => { var _a; return (_a = getAppDSpecifiedConnectId(parentAppD)) !== null && _a !== void 0 ? _a : deriveConnectIdFromLaunchGroupId(launchGroupId); };
|
|
1034
|
+
// Return the parent's connectId, which must be defined in the parent's client data. Keeping connectId in client data support dynamic auto-associations.
|
|
1035
|
+
const getParentClientConnectId = (parentWindow, clients) => {
|
|
1036
|
+
const uuids = uuidsFromWindowName({ clients, windowName: parentWindow });
|
|
1037
|
+
interopAssertion("uuid exists for parent window", uuids.length === 1);
|
|
1038
|
+
const parentUuid = uuids[0];
|
|
1039
|
+
const { connectId } = clients[parentUuid];
|
|
1040
|
+
interopAssertion("connectId exists for parent", connectId != undefined);
|
|
1041
|
+
return connectId;
|
|
1042
|
+
};
|
|
1043
|
+
// return client's connectId if defined
|
|
1044
|
+
const getClientConnectId = (parentWindow, clients) => {
|
|
1045
|
+
let connectId;
|
|
1046
|
+
const uuids = uuidsFromWindowName({ clients, windowName: parentWindow });
|
|
1047
|
+
if (uuids.length === 1) {
|
|
1048
|
+
const parentUuid = uuids[0];
|
|
1049
|
+
({ connectId } = clients[parentUuid]);
|
|
1050
|
+
}
|
|
1051
|
+
return connectId;
|
|
1052
|
+
};
|
|
1053
|
+
// Returns a windows connectId (which might be null). This is the top-level function for getting a window's connectId.
|
|
1054
|
+
const maybeGetWindowConnectId = async (windowName, windowDescriptor, clients, appDefinitions) => {
|
|
1055
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
|
|
1056
|
+
const UnknownApp = "unknown-app";
|
|
1057
|
+
const WorkspaceWindowName = "workspaceService";
|
|
1058
|
+
let resolvedConnectId;
|
|
1059
|
+
const appId = (_b = (_a = windowDescriptor === null || windowDescriptor === void 0 ? void 0 : windowDescriptor.componentType) !== null && _a !== void 0 ? _a : windowDescriptor === null || windowDescriptor === void 0 ? void 0 : windowDescriptor.name) !== null && _b !== void 0 ? _b : UnknownApp;
|
|
1060
|
+
const windowInterop = (_c = windowDescriptor === null || windowDescriptor === void 0 ? void 0 : windowDescriptor.windowInterop) !== null && _c !== void 0 ? _c : {};
|
|
1061
|
+
const appD = appDefinitions[appId];
|
|
1062
|
+
const parentAppD = appDefinitions[(_e = (_d = windowInterop.parent) === null || _d === void 0 ? void 0 : _d.componentType) !== null && _e !== void 0 ? _e : UnknownApp];
|
|
1063
|
+
if (windowInterop.connectId) {
|
|
1064
|
+
// if the window already has a connectId in the window descriptor, then use it
|
|
1065
|
+
resolvedConnectId = windowInterop.connectId;
|
|
1066
|
+
}
|
|
1067
|
+
else if (isAutoAssociatedWithParent(appId, parentAppD)) {
|
|
1068
|
+
// if current window is auto-associated with parent then use parent's connectId
|
|
1069
|
+
if (windowInterop.launchGroupId) {
|
|
1070
|
+
resolvedConnectId =
|
|
1071
|
+
(_h = getClientConnectId((_g = (_f = windowInterop.grandParent) === null || _f === void 0 ? void 0 : _f.windowName) !== null && _g !== void 0 ? _g : "undefined", clients)) !== null && _h !== void 0 ? _h : getLauncherGroupConnectId(parentAppD, (_j = windowInterop.launchGroupId) !== null && _j !== void 0 ? _j : "undefined");
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
resolvedConnectId = await getParentClientConnectId((_l = (_k = windowInterop.parent) === null || _k === void 0 ? void 0 : _k.windowName) !== null && _l !== void 0 ? _l : "undefined", clients);
|
|
1075
|
+
}
|
|
1076
|
+
interopAssertion("connectId found for parent", resolvedConnectId != null);
|
|
1077
|
+
// else if this window is auto-associating children then assigned a connect Id to it for future use with spawned children
|
|
1078
|
+
}
|
|
1079
|
+
else if (isAutoAssociatingChildren(appD)) {
|
|
1080
|
+
resolvedConnectId = (_o = (_m = getAppDSpecifiedConnectId(appD)) !== null && _m !== void 0 ? _m : getClientConnectId(windowName, clients)) !== null && _o !== void 0 ? _o : newConnectId();
|
|
1081
|
+
}
|
|
1082
|
+
const spawnedFromWorkspace = ((_p = windowInterop === null || windowInterop === void 0 ? void 0 : windowInterop.parent) === null || _p === void 0 ? void 0 : _p.windowName) === WorkspaceWindowName;
|
|
1083
|
+
Logger.debug("forceObjectsToLogger", "maybeGetWindowConnectId", {
|
|
1084
|
+
windowName,
|
|
1085
|
+
windowDescriptor,
|
|
1086
|
+
clients,
|
|
1087
|
+
appD,
|
|
1088
|
+
appId,
|
|
1089
|
+
parentAppD,
|
|
1090
|
+
windowInterop,
|
|
1091
|
+
spawnedFromWorkspace,
|
|
1092
|
+
resolvedConnectId,
|
|
1093
|
+
});
|
|
1094
|
+
return { connectId: resolvedConnectId, spawnedFromWorkspace };
|
|
1095
|
+
};
|
|
1096
|
+
// Return window name embedded in identifier. Extracting the name like this is dirty but expediant and effective; still the longer term app security solution will likely supercede this
|
|
1097
|
+
const extractWindowName = (id) => id.split(".")[1];
|
|
1098
|
+
// authentication is successful only when the window name embedded in the token matches the window name embedded in the router origin
|
|
1099
|
+
const validDynamicAuthenticationToken = (routerOrigin, token) => token.signatureString === extractWindowName(routerOrigin);
|
|
1100
|
+
/*
|
|
1101
|
+
* Authenticates an FDC3 client and returns if successful
|
|
1102
|
+
*
|
|
1103
|
+
* @param appId
|
|
1104
|
+
* @param friendlyName
|
|
1105
|
+
* @param routerOrigin where the request originated from
|
|
1106
|
+
* @returns true if authenticated and false otherwise
|
|
1107
|
+
*/
|
|
1108
|
+
const authenticateClient = async ({ appId, friendlyName, routerOrigin, authenticationToken, config, }) => {
|
|
1109
|
+
var _a;
|
|
1110
|
+
Logger.system.debug(`Interop.resolver.authenticateClient App=${friendlyName}}.`, {
|
|
1111
|
+
appId,
|
|
1112
|
+
routerOrigin,
|
|
1113
|
+
authenticationToken,
|
|
1114
|
+
});
|
|
1115
|
+
let authenticated = false;
|
|
1116
|
+
if (appId !== ((_a = authenticationToken === null || authenticationToken === void 0 ? void 0 : authenticationToken.meta.appId) !== null && _a !== void 0 ? _a : authenticationToken === null || authenticationToken === void 0 ? void 0 : authenticationToken.meta.name)) {
|
|
1117
|
+
// confirm the app registered with the right appId
|
|
1118
|
+
Logger.system.error(`Interop.resolver.authenticateClient: authentication failed due to appId mismatch in token. App=${friendlyName}}.`, appId, authenticationToken);
|
|
1119
|
+
authenticated = false;
|
|
1120
|
+
}
|
|
1121
|
+
else if (authenticationToken.signatureStringType === "dynamic") {
|
|
1122
|
+
authenticated = validDynamicAuthenticationToken(routerOrigin, authenticationToken);
|
|
1123
|
+
}
|
|
1124
|
+
else if (authenticationToken.signatureStringType === "static" ||
|
|
1125
|
+
authenticationToken.signatureStringType === "static-jwt") {
|
|
1126
|
+
// authenticate and update app name
|
|
1127
|
+
authenticated = await validStaticAuthenticationToken(config, authenticationToken);
|
|
1128
|
+
}
|
|
1129
|
+
else {
|
|
1130
|
+
// since neither dynamic or static, the app will not be authenticated
|
|
1131
|
+
authenticated = false;
|
|
1132
|
+
}
|
|
1133
|
+
if (!authenticated) {
|
|
1134
|
+
Logger.system.error(`Interop.resolver.register: authentication failed for App=${friendlyName}}.`, routerOrigin, authenticationToken);
|
|
1135
|
+
}
|
|
1136
|
+
return authenticated;
|
|
1137
|
+
};
|
|
1138
|
+
// Contains all the async processing for registering a client
|
|
1139
|
+
const processRegistrationRequest = async ({ appId, resolverState, config, uuid, routerOrigin, windowName, authenticationToken, actionId, }) => {
|
|
1140
|
+
var _a;
|
|
1141
|
+
const appDefinition = (_a = resolverState.apps.definitions[appId]) !== null && _a !== void 0 ? _a : {};
|
|
1142
|
+
const friendlyName = getFriendlyName(appDefinition);
|
|
1143
|
+
// get pending data for the given appId plus remove it from the pending list
|
|
1144
|
+
const matchingRegistrationData = getMatchingInteropRegistrationData(windowName, resolverState.pendingInteropRegistrationData);
|
|
1145
|
+
// get connectId to support auto-associate, which drives the linker's auto-join functionality
|
|
1146
|
+
const { connectId, spawnedFromWorkspace } = await maybeGetWindowConnectId(windowName, matchingRegistrationData, resolverState.clients, resolverState.apps.definitions);
|
|
1147
|
+
const authenticated = await authenticateClient({
|
|
1148
|
+
appId,
|
|
1149
|
+
friendlyName,
|
|
1150
|
+
routerOrigin,
|
|
1151
|
+
authenticationToken,
|
|
1152
|
+
config,
|
|
1153
|
+
});
|
|
1154
|
+
// return to completeRegistration reducer
|
|
1155
|
+
return {
|
|
1156
|
+
config,
|
|
1157
|
+
authenticated,
|
|
1158
|
+
appId,
|
|
1159
|
+
windowName,
|
|
1160
|
+
uuid,
|
|
1161
|
+
connectId,
|
|
1162
|
+
spawnedFromWorkspace,
|
|
1163
|
+
actionId,
|
|
1164
|
+
};
|
|
1165
|
+
};
|
|
1166
|
+
// Time interval for loop detection.
|
|
1167
|
+
const LoopDetectionTimeThreshold = 6000;
|
|
1168
|
+
// Number of times an outgoing broadcast must occur within LoopDetectionTimeThreshold time before considered a loop
|
|
1169
|
+
const LoopDetectionCountThreshold = 4;
|
|
1170
|
+
// The interval to wait before cleaning up after a loop is detected (required to filter out in-transit messages)
|
|
1171
|
+
const LoopDetectCleanupInterval = 4000;
|
|
1172
|
+
/**
|
|
1173
|
+
* Set timestamp for the last broadcast to a specific client -- this is the timestamp used to detect loops
|
|
1174
|
+
*
|
|
1175
|
+
* @param {string} senderUuid the being sent a broadcast message
|
|
1176
|
+
* @param {LoopDetectionMap} loopDetectionMap
|
|
1177
|
+
*/
|
|
1178
|
+
const loopDetectionSetTimestamp = (senderUuid, loopDetectionMap) => {
|
|
1179
|
+
let loopDetectionRecord = loopDetectionMap[senderUuid] || {
|
|
1180
|
+
timestamp: 0,
|
|
1181
|
+
count: 0,
|
|
1182
|
+
loopNotificationIssued: false,
|
|
1183
|
+
};
|
|
1184
|
+
loopDetectionRecord.timestamp = Date.now();
|
|
1185
|
+
loopDetectionMap[senderUuid] = loopDetectionRecord;
|
|
1186
|
+
Logger.system.debug("Interop.resolver.loopDetectionSetTimestamp", senderUuid, loopDetectionRecord);
|
|
1187
|
+
};
|
|
1188
|
+
/**
|
|
1189
|
+
* after loop detected can't immediately reset counter because multiple messages that are still in transit could keep the loop going; so pause then reset (so system will return to normal state)
|
|
1190
|
+
*
|
|
1191
|
+
* @param {string} senderUuid the app sending the broadcast message
|
|
1192
|
+
* @param {ReturnType<typeof setTimeout>} oldTimerId the previous timer if there was one; should clear since being superseded
|
|
1193
|
+
* @returns {Promise<DelayResetResults>}
|
|
1194
|
+
*/
|
|
1195
|
+
const loopDetectionDelayReset = async (senderUuid, oldTimerId) => {
|
|
1196
|
+
let delayPromise = new Promise((resolve) => {
|
|
1197
|
+
if (oldTimerId)
|
|
1198
|
+
clearTimeout(oldTimerId);
|
|
1199
|
+
let newTimerId = setTimeout(() => {
|
|
1200
|
+
resolve({
|
|
1201
|
+
senderUuid,
|
|
1202
|
+
newTimerId,
|
|
1203
|
+
});
|
|
1204
|
+
}, LoopDetectCleanupInterval);
|
|
1205
|
+
});
|
|
1206
|
+
return delayPromise;
|
|
1207
|
+
};
|
|
1208
|
+
/**
|
|
1209
|
+
* Determines if there is an infinite broadcast loop.
|
|
1210
|
+
*
|
|
1211
|
+
* Detection Algorithm:
|
|
1212
|
+
* If a client that is sent a broadcast message "immediately" bounces back with an outgoing broadcast message
|
|
1213
|
+
* AND this broadcast+bounce-back consistently happens multiple times (i.e.LoopDetectionCountThreshold) all within a set time frame (i.e. LoopDetectionTimeThreshold)
|
|
1214
|
+
* THEN there is a broadcast loop (so return true).
|
|
1215
|
+
* Related Details:
|
|
1216
|
+
* a) Anytime this function returns true, the broadcast reducer will drop the broadcast message to help break the loop
|
|
1217
|
+
* b) If a client broadcasts a message independently, without receiving a message within the LoopDetectionCountThreshold time, then the message is assumed to not be from
|
|
1218
|
+
* a loop and the client's loop-detection counter is cleared (if there is a loop though it will continue and still be caught later).
|
|
1219
|
+
* c) After a loop is detected, the detection counter will be maintained for a time interval, LoopDetectCleanupInterval, so messages will continue to be dropped; otherwise messages in transit can
|
|
1220
|
+
* restart the loop. Later after LoopDetectCleanupInterval expires for a detected loop, then the detection counter is reset to restore the client back to its normal operating state.
|
|
1221
|
+
*
|
|
1222
|
+
* Note 1: By considering the context type, a simpler algorithm could identify the most common loop case where a client rebroadcasts an incoming context;
|
|
1223
|
+
* however that could result in a false positive if the user performed a UI action that triggered a broadcast while the same context was also broadcast elsewhere.
|
|
1224
|
+
* Note 2: This algorithm's constants are purposefully set slow (e.g. 6 seconds) to avoid a false positive; however, the tradeoff is it might not detect a loop in a heavily congested system with extremely slow message delivery
|
|
1225
|
+
* due to LoopDetectionTimeThreshold being exceeded. This is more of a issue within a heavy production situation though (e.g. large workspace of apps that are all contributing to a
|
|
1226
|
+
* broadcast storm) -- it isn't likely with typical app integration and initial testing.
|
|
1227
|
+
*
|
|
1228
|
+
* @param {string} senderUuid id of client requesting a broadcast
|
|
1229
|
+
* @param {LoopDetectionMap} loopDetectionMap
|
|
1230
|
+
* @returns {boolean} Returns true if loop detected
|
|
1231
|
+
*/
|
|
1232
|
+
const loopDetectionFound = (senderUuid, loopDetectionMap, cmd) => {
|
|
1233
|
+
let loopDetected = false;
|
|
1234
|
+
let loopDetectionRecord = loopDetectionMap[senderUuid];
|
|
1235
|
+
if (loopDetectionRecord) {
|
|
1236
|
+
const timeSinceMessageSentTo = Date.now() - loopDetectionRecord.timestamp;
|
|
1237
|
+
// if enough time has passed, reset the counter given a loop implies continuous messages within the time interval
|
|
1238
|
+
if (timeSinceMessageSentTo > LoopDetectionTimeThreshold) {
|
|
1239
|
+
loopDetectionRecord.count = 0;
|
|
1240
|
+
// once the count is exceeded within a specific time period then loop detected -- this will cause messages to start being dropped and eventually stop the loop
|
|
1241
|
+
}
|
|
1242
|
+
else if (timeSinceMessageSentTo <= LoopDetectionTimeThreshold &&
|
|
1243
|
+
++loopDetectionRecord.count >= LoopDetectionCountThreshold) {
|
|
1244
|
+
loopDetected = true;
|
|
1245
|
+
// display one notification per client per loop detection
|
|
1246
|
+
if (!loopDetectionRecord.loopNotificationIssued) {
|
|
1247
|
+
const messageTitle = "FDC3 broadcast loop detected so messages dropped.";
|
|
1248
|
+
const messageDetails = `A broadcast loop was detected in ${senderUuid}. Check the central logger for more information.`;
|
|
1249
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(notifyEndUser, {
|
|
1250
|
+
args: [messageTitle, messageDetails],
|
|
1251
|
+
});
|
|
1252
|
+
loopDetectionRecord.loopNotificationIssued = true;
|
|
1253
|
+
}
|
|
1254
|
+
// wait, then reset the loop detection state for this app to restore normal functionality
|
|
1255
|
+
cmd.run(loopDetectionDelayReset, {
|
|
1256
|
+
args: [senderUuid, loopDetectionRecord.timerId],
|
|
1257
|
+
successActionCreator: actions.resetDetectedLoopState,
|
|
1258
|
+
});
|
|
1259
|
+
}
|
|
1260
|
+
loopDetectionMap[senderUuid] = loopDetectionRecord;
|
|
1261
|
+
Logger.system.debug("Interop.resolver.loopDetectionFound", loopDetected, senderUuid, timeSinceMessageSentTo, loopDetectionRecord.count);
|
|
1262
|
+
}
|
|
1263
|
+
return loopDetected;
|
|
1264
|
+
};
|
|
1265
|
+
/**
|
|
1266
|
+
* Returns true if the fsa is okay to be processed. This means that it has to be either and intent or context broadcast.
|
|
1267
|
+
* If it's an intent, then it must have a "to" field (which should have been set by RaiseIntent)
|
|
1268
|
+
*
|
|
1269
|
+
* We also check to make sure that a loop isn't being created.
|
|
1270
|
+
*/
|
|
1271
|
+
const isValidBroadcastMessage = ({ state, fsa, cmd, }) => {
|
|
1272
|
+
const { intent, context } = fsa.payload;
|
|
1273
|
+
const { uuid, to } = fsa.meta;
|
|
1274
|
+
// Disable loopDetection since false positives are too likely. Might reconsider later so not deleting.
|
|
1275
|
+
// if (loopDetectionFound(uuid, state.resolver.loopDetectionMap, cmd)) {
|
|
1276
|
+
// Logger.error(
|
|
1277
|
+
// `interopService detected probable broadcast loop for ${fsa.meta.uuid}`,
|
|
1278
|
+
// "Context",
|
|
1279
|
+
// context,
|
|
1280
|
+
// "Intent",
|
|
1281
|
+
// intent
|
|
1282
|
+
// );
|
|
1283
|
+
// // drop the broadcast message since loop detected (i.e. stop the broadcast loop)
|
|
1284
|
+
// return false;
|
|
1285
|
+
// }
|
|
1286
|
+
if (!intent && !context) {
|
|
1287
|
+
const error = `interopService resolver broadcast: message received without a "context" or "intent" field. Cannot be routed.`;
|
|
1288
|
+
state.root.testing.error = error;
|
|
1289
|
+
Logger.error(error, fsa);
|
|
1290
|
+
return false;
|
|
1291
|
+
}
|
|
1292
|
+
if (intent && !to) {
|
|
1293
|
+
const error = `interopService resolver broadcast: intent received without a "to" field. Cannot be routed.`;
|
|
1294
|
+
state.root.testing.error = error;
|
|
1295
|
+
Logger.error(error, fsa);
|
|
1296
|
+
return false;
|
|
1297
|
+
}
|
|
1298
|
+
return true;
|
|
1299
|
+
};
|
|
1300
|
+
/**
|
|
1301
|
+
* Saves the context from a broadcast message in the store. Contexts are saved in two places:
|
|
1302
|
+
* 1) In the client entry (except when the sending app is raising an intent or opening a new app)
|
|
1303
|
+
* 2) In the channel entry (except when this broadcast is the result of an autoBroadcast)
|
|
1304
|
+
*/
|
|
1305
|
+
const maybeSaveContext = ({ state, fsa }) => {
|
|
1306
|
+
var _a, _b, _c;
|
|
1307
|
+
const { context, intent } = fsa.payload;
|
|
1308
|
+
const contextType = context === null || context === void 0 ? void 0 : context.type;
|
|
1309
|
+
const { setSenderContext, uuid: senderUuid, channel, autoBroadcast } = fsa.meta;
|
|
1310
|
+
const sender = state.resolver.clients[senderUuid];
|
|
1311
|
+
// If the caller doesn't want its context set (e.g. this broadcast came from `open`) or this broadcast came from an intent
|
|
1312
|
+
const dontSetSenderContext = setSenderContext === false || intent;
|
|
1313
|
+
// If we don't have a context then there's nothing to set.
|
|
1314
|
+
if (!context)
|
|
1315
|
+
return;
|
|
1316
|
+
/**
|
|
1317
|
+
* When an app broadcasts a context we set that broadcasting app's own context in our local store (its state) to that value.
|
|
1318
|
+
* If the context is *already* that value (by deep comparison) then the app probably hasn't been written correctly
|
|
1319
|
+
* and is creating a broadcast loop. In this case we short-circuit.
|
|
1320
|
+
*
|
|
1321
|
+
* We call `removeEmpty()` on each side of the deep comparison in order to avoid false negatives due to mismatches
|
|
1322
|
+
* between null, undefined, and missing object members.
|
|
1323
|
+
*
|
|
1324
|
+
* Note that broadcasts that emanate from `open` should have "meta.setSenderContext===false" to avoid setting their own local context
|
|
1325
|
+
*/
|
|
1326
|
+
const currentContexts = channel
|
|
1327
|
+
? (_a = sender === null || sender === void 0 ? void 0 : sender.subscriptions.channels[channel]) === null || _a === void 0 ? void 0 : _a.contexts
|
|
1328
|
+
: sender === null || sender === void 0 ? void 0 : sender.subscriptions.globals.contexts;
|
|
1329
|
+
if (!dontSetSenderContext && contextType && currentContexts) {
|
|
1330
|
+
// don't check for duplicate broadcasts when autoBroadcasting -- autoBroadcasts can look like duplicates
|
|
1331
|
+
if (!autoBroadcast && isDupBroadcast(currentContexts[contextType], context)) {
|
|
1332
|
+
const warning = `Possible broadcast loop detected for app "${sender.appId}" on context type "${contextType}"`;
|
|
1333
|
+
Logger.warn(warning);
|
|
1334
|
+
}
|
|
1335
|
+
// currently saveCurrentContext only needs to be maintained for isDupBroadcast; otherwise we could remove it.
|
|
1336
|
+
saveCurrentContext(currentContexts, context);
|
|
1337
|
+
}
|
|
1338
|
+
// If the message originates from the workspace module, then use desination's joinedChannels instead of senders.
|
|
1339
|
+
// This exception to the rule is a compromise due to the workspace module not being joined to any channels.
|
|
1340
|
+
const whichClient = fsa.meta.uuid === workspaceUuid && fsa.meta.to ? fsa.meta.to : senderUuid;
|
|
1341
|
+
// The destination channel is the one that is specified, otherwise it is all the app's joined channels
|
|
1342
|
+
const destinationChannels = (_c = (channel ? [channel] : (_b = state.resolver.clients[whichClient]) === null || _b === void 0 ? void 0 : _b.joinedChannels)) !== null && _c !== void 0 ? _c : [];
|
|
1343
|
+
// Broadcasts of contexts must be cached per channels (join, getCurrentContext, and addListener will use).
|
|
1344
|
+
// However, don't save autoBroadcast contexts -- this would introduce a potential timing problem.
|
|
1345
|
+
if (!autoBroadcast) {
|
|
1346
|
+
destinationChannels.forEach((oneChannel) => {
|
|
1347
|
+
var _a;
|
|
1348
|
+
// save, given the last context will be rebroadcast when a client joins a channel
|
|
1349
|
+
state.resolver.lastChannelState[oneChannel] = { context, senderUuid };
|
|
1350
|
+
if (context === null || context === void 0 ? void 0 : context.type) {
|
|
1351
|
+
// save by context type per channel to support getCurrentContext
|
|
1352
|
+
let map = (_a = state.resolver.lastChannelStateByType[oneChannel]) !== null && _a !== void 0 ? _a : {};
|
|
1353
|
+
map[context.type] = { context, senderUuid };
|
|
1354
|
+
state.resolver.lastChannelStateByType[oneChannel] = Object.assign(Object.assign({}, state.resolver.lastChannelStateByType[oneChannel]), { [context.type]: { context, senderUuid } });
|
|
1355
|
+
}
|
|
1356
|
+
Logger.system.debug(`Interop.resolver.broadcast lastChannelState set for ${oneChannel}`, context, state.resolver.lastChannelState, state.resolver.lastChannelStateByType);
|
|
1357
|
+
});
|
|
1358
|
+
}
|
|
1359
|
+
};
|
|
1360
|
+
/**
|
|
1361
|
+
* If a message is directed ("to") but we haven't found any valid destinations
|
|
1362
|
+
* then it most likely is because this broadcast has occurred before the app is ready
|
|
1363
|
+
* to listen (race condition). So we'll queue the message. Later calls to subscribeContext
|
|
1364
|
+
* will be responsible for dequeuing and rebroadcasting that message.
|
|
1365
|
+
*/
|
|
1366
|
+
const isUnavailableDirectedMessage = ({ state, fsa, destinations, }) => {
|
|
1367
|
+
var _a;
|
|
1368
|
+
const { to, autoBroadcast } = fsa.meta;
|
|
1369
|
+
if (to && !destinations.length) {
|
|
1370
|
+
// However, if the message is from autoBroadcast then don't queue because the message could become stale (replaced by a more recent broadcast context).
|
|
1371
|
+
// Not to worry, the current context will be autoBroadcast again when `subscribeContext` adds this destination's listener.
|
|
1372
|
+
if (!autoBroadcast) {
|
|
1373
|
+
state.resolver.queue[to] = ((_a = state.resolver.queue[to]) !== null && _a !== void 0 ? _a : []).concat([
|
|
1374
|
+
{
|
|
1375
|
+
pendingMessage: fsa,
|
|
1376
|
+
timestamp: Date.now(),
|
|
1377
|
+
},
|
|
1378
|
+
]);
|
|
1379
|
+
}
|
|
1380
|
+
else {
|
|
1381
|
+
Logger.system.debug(`Interop.resolver.broadcast: autoBroadcast dropped for ${to} since it wasn't a valid destination (e.g. no listener added)`);
|
|
1382
|
+
}
|
|
1383
|
+
return true;
|
|
1384
|
+
}
|
|
1385
|
+
return false;
|
|
1386
|
+
};
|
|
1387
|
+
/**
|
|
1388
|
+
* Update the current context for all of the destination clients (again this is only to help detect broadcast loops)
|
|
1389
|
+
*/
|
|
1390
|
+
const saveDestinationContexts = ({ state, destinations }) => {
|
|
1391
|
+
destinations.forEach((destination) => {
|
|
1392
|
+
Logger.system.debug("Interop.resolver.broadcast selectConnectDestinations", destinations);
|
|
1393
|
+
if (destination.type === "client" && destination.context) {
|
|
1394
|
+
const { subscriptions } = state.resolver.clients[destination.uuid];
|
|
1395
|
+
if (destination.channel) {
|
|
1396
|
+
saveCurrentContext(subscriptions.channels[destination.channel].contexts, destination.context);
|
|
1397
|
+
}
|
|
1398
|
+
else {
|
|
1399
|
+
saveCurrentContext(subscriptions.globals.contexts, destination.context);
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
});
|
|
1403
|
+
};
|
|
1404
|
+
/**
|
|
1405
|
+
* A broadcast message can result in many individual actions:
|
|
1406
|
+
* 1) Messages to be sent to individual destinations
|
|
1407
|
+
* 2) Dispatches to be run back through redux
|
|
1408
|
+
* 3) Messages to be sent to one or more remote SelectConnect modules (via router)
|
|
1409
|
+
*
|
|
1410
|
+
* This method takes the set of these destinations that has been calculated by the broadcast logic and
|
|
1411
|
+
* breaks them down into three arrays of individual actions.
|
|
1412
|
+
*/
|
|
1413
|
+
const breakDownDestinations = ({ state, fsa, destinations, }) => {
|
|
1414
|
+
const { autoBroadcast, targetSubscriberId, pendingActionId } = fsa.meta;
|
|
1415
|
+
const messagesToSend = destinations.flatMap((destination) => {
|
|
1416
|
+
if (destination.type === "client") {
|
|
1417
|
+
let message = {
|
|
1418
|
+
uuid: destination.uuid,
|
|
1419
|
+
routerChannel: destination.routerChannel,
|
|
1420
|
+
pendingActionId,
|
|
1421
|
+
targetSubscriberId: autoBroadcast ? targetSubscriberId : undefined,
|
|
1422
|
+
};
|
|
1423
|
+
// Use this iterative method in order to avoid `channel : undefined` from showing up in the raw Router message
|
|
1424
|
+
if (destination.channel)
|
|
1425
|
+
message.channel = destination.channel;
|
|
1426
|
+
if (destination.context)
|
|
1427
|
+
message.context = destination.context;
|
|
1428
|
+
if (destination.intent)
|
|
1429
|
+
message.intent = destination.intent;
|
|
1430
|
+
return [message];
|
|
1431
|
+
}
|
|
1432
|
+
else {
|
|
1433
|
+
return [];
|
|
1434
|
+
}
|
|
1435
|
+
});
|
|
1436
|
+
const dispatchesToSend = destinations.flatMap((destination) => {
|
|
1437
|
+
var _a;
|
|
1438
|
+
if (destination.type === "selectConnect") {
|
|
1439
|
+
const selectConnectChannel = state.resolver.selectConnectChannels[destination.name];
|
|
1440
|
+
if (selectConnectChannel && "dispatchAction" in selectConnectChannel) {
|
|
1441
|
+
return [
|
|
1442
|
+
{
|
|
1443
|
+
type: selectConnectChannel.dispatchAction,
|
|
1444
|
+
payload: {
|
|
1445
|
+
fsa,
|
|
1446
|
+
uuid: destination.uuid,
|
|
1447
|
+
context: destination.context,
|
|
1448
|
+
contextType: (_a = destination.context) === null || _a === void 0 ? void 0 : _a.type,
|
|
1449
|
+
intent: destination.intent,
|
|
1450
|
+
},
|
|
1451
|
+
},
|
|
1452
|
+
];
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
return [];
|
|
1456
|
+
});
|
|
1457
|
+
const selectConnectChannelMessagesToSend = destinations.flatMap((destination) => {
|
|
1458
|
+
var _a;
|
|
1459
|
+
if (destination.type === "selectConnect") {
|
|
1460
|
+
const selectConnectChannel = state.resolver.selectConnectChannels[destination.name];
|
|
1461
|
+
if (selectConnectChannel && "routerChannel" in selectConnectChannel) {
|
|
1462
|
+
return [
|
|
1463
|
+
{
|
|
1464
|
+
routerChannel: selectConnectChannel.routerChannel,
|
|
1465
|
+
fsa,
|
|
1466
|
+
uuid: destination.uuid,
|
|
1467
|
+
context: destination.context,
|
|
1468
|
+
contextType: (_a = destination.context) === null || _a === void 0 ? void 0 : _a.type,
|
|
1469
|
+
intent: destination.intent,
|
|
1470
|
+
},
|
|
1471
|
+
];
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1474
|
+
return [];
|
|
1475
|
+
});
|
|
1476
|
+
return { messagesToSend, dispatchesToSend, selectConnectChannelMessagesToSend };
|
|
1477
|
+
};
|
|
1478
|
+
export const getClientAppConfig = (appDConfig) => {
|
|
1479
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1480
|
+
const unscrubbedConfig = appDConfig === null || appDConfig === void 0 ? void 0 : appDConfig.manifest;
|
|
1481
|
+
const interopConfig = (_a = unscrubbedConfig === null || unscrubbedConfig === void 0 ? void 0 : unscrubbedConfig.interop) !== null && _a !== void 0 ? _a : {};
|
|
1482
|
+
// Logic to determine whether to show the linker
|
|
1483
|
+
// 1) Is it explicitly turned on or turned off in the "Window Manager" config?
|
|
1484
|
+
const windowManagerShowLinker = (_d = (_c = (_b = unscrubbedConfig === null || unscrubbedConfig === void 0 ? void 0 : unscrubbedConfig.foreign) === null || _b === void 0 ? void 0 : _b.components) === null || _c === void 0 ? void 0 : _c["Window Manager"]) === null || _d === void 0 ? void 0 : _d.showLinker;
|
|
1485
|
+
// 2) Use the above logic unless `useLinker` is explicitly set in the interop config (override)
|
|
1486
|
+
const useLinker = (_e = interopConfig === null || interopConfig === void 0 ? void 0 : interopConfig.useLinker) !== null && _e !== void 0 ? _e : windowManagerShowLinker !== false;
|
|
1487
|
+
const config = Object.assign(Object.assign({}, unscrubbedConfig), { interop: Object.assign(Object.assign({}, interopConfig), { selectConnect: (_f = interopConfig === null || interopConfig === void 0 ? void 0 : interopConfig.selectConnect) !== null && _f !== void 0 ? _f : [], useLinker }) });
|
|
1488
|
+
return config;
|
|
1489
|
+
};
|
|
1490
|
+
// Utility function used by joinChannel and subscribeChannel to send one auto-broadcast message to a specified client for a specific handler for given channel and context name.
|
|
1491
|
+
// If there is nothing to broadcast, then this function is a no-op.
|
|
1492
|
+
const autoBroadCastToSpecifiedClient = ({ uuid, globalSubscription, channel, contextType, targetSubscriberId, resolverState, cmd, }) => {
|
|
1493
|
+
var _a, _b, _c;
|
|
1494
|
+
let channelData;
|
|
1495
|
+
// If specific context type was specified, then get the last channel state for that context; otherwise, just get the last channel state (independent of context)
|
|
1496
|
+
if (contextType && contextType != "*") {
|
|
1497
|
+
channelData = (_b = (_a = resolverState === null || resolverState === void 0 ? void 0 : resolverState.lastChannelStateByType[channel]) === null || _a === void 0 ? void 0 : _a[contextType]) !== null && _b !== void 0 ? _b : {};
|
|
1498
|
+
}
|
|
1499
|
+
else {
|
|
1500
|
+
channelData = (_c = resolverState === null || resolverState === void 0 ? void 0 : resolverState.lastChannelState[channel]) !== null && _c !== void 0 ? _c : {};
|
|
1501
|
+
}
|
|
1502
|
+
// If the channel has context state, then broadcast it to the client.
|
|
1503
|
+
// Note the original broadcasting app's uuid is set in the broadcast's "from" field for proper authorization.
|
|
1504
|
+
if ((channelData === null || channelData === void 0 ? void 0 : channelData.context) && (channelData === null || channelData === void 0 ? void 0 : channelData.senderUuid)) {
|
|
1505
|
+
Logger.system.debug(`Interop.resolver.autoBroadCastToSpecifiedClient: Context broadcasted to ${channel} for ${uuid}`);
|
|
1506
|
+
// the targetSubscriberId specifies in the broadcast tells the client which specific listener's handler should be invoked
|
|
1507
|
+
const directedBroadcast = {
|
|
1508
|
+
type: "broadcast",
|
|
1509
|
+
payload: {
|
|
1510
|
+
context: unImmer(channelData.context),
|
|
1511
|
+
},
|
|
1512
|
+
meta: {
|
|
1513
|
+
uuid: channelData.senderUuid,
|
|
1514
|
+
to: uuid,
|
|
1515
|
+
autoBroadcast: true,
|
|
1516
|
+
targetSubscriberId,
|
|
1517
|
+
channel: globalSubscription ? undefined : channel,
|
|
1518
|
+
noSelectConnect: true,
|
|
1519
|
+
},
|
|
1520
|
+
};
|
|
1521
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.broadcast(directedBroadcast));
|
|
1522
|
+
}
|
|
1523
|
+
};
|
|
1524
|
+
// For each channel left, if no more apps in the channel (i.e. the channel is stale) then clear
|
|
1525
|
+
// the channel state; to know if last app in channel, all the clients must be searched
|
|
1526
|
+
const cleanupStaleChannels = (channelsLeft, resolverState) => {
|
|
1527
|
+
// In special test cases, this functionality is disabled.
|
|
1528
|
+
if (testPoint.state.disableCleanupStaleChannels)
|
|
1529
|
+
return;
|
|
1530
|
+
const setOfAllClients = Object.values(resolverState.clients);
|
|
1531
|
+
// if all apps have left then channel, then clear the channel state.
|
|
1532
|
+
channelsLeft.forEach((channel) => {
|
|
1533
|
+
let channelStillInUse = setOfAllClients.some((clientInSet) => clientInSet.joinedChannels.includes(channel));
|
|
1534
|
+
if (!channelStillInUse) {
|
|
1535
|
+
Logger.system.debug(`Interop.resolver.cleanupStaleChannels: context state for channel ${channel} cleared since all apps left the channel`);
|
|
1536
|
+
delete resolverState.lastChannelState[channel];
|
|
1537
|
+
delete resolverState.lastChannelStateByType[channel];
|
|
1538
|
+
}
|
|
1539
|
+
});
|
|
1540
|
+
};
|
|
1541
|
+
const getValidatedAppName = (appId, appDefinitions) => {
|
|
1542
|
+
let appName = null;
|
|
1543
|
+
const appList = appsForAppId(appId, appDefinitions);
|
|
1544
|
+
if (appList.length === 1) {
|
|
1545
|
+
appName = appList[0].name;
|
|
1546
|
+
}
|
|
1547
|
+
else if (appList.length === 0) {
|
|
1548
|
+
Logger.system.warn(`getValidatedAppName: No definitions found for appId=${appId} so no name assigned.`, appList);
|
|
1549
|
+
}
|
|
1550
|
+
else if (appList.length > 1) {
|
|
1551
|
+
Logger.system.error(`getValidatedAppName: Multiple app definitions found for appId=${appId} so no name assigned.`, appList);
|
|
1552
|
+
}
|
|
1553
|
+
return appName;
|
|
1554
|
+
};
|
|
1555
|
+
const addReducerCases = (builder) => {
|
|
1556
|
+
builder
|
|
1557
|
+
// For an fdc3 client to be authenticated, it must register with a token that is contained in pendingInteropRegistrationData, which is added to here.
|
|
1558
|
+
// The window service's spawn function defines these tokens, sending a copy here and another copy to the newly spawned app.
|
|
1559
|
+
.addCase(actions.setInteropRegistrationData, (state, action) => {
|
|
1560
|
+
const fsa = action.payload;
|
|
1561
|
+
const interopRegistrationData = fsa.payload;
|
|
1562
|
+
const { pendingInteropRegistrationData } = state.resolver;
|
|
1563
|
+
pendingInteropRegistrationData.push(interopRegistrationData.windowDescriptor);
|
|
1564
|
+
})
|
|
1565
|
+
.addCase(actions.heartbeat, (state, action) => {
|
|
1566
|
+
const fsa = action.payload;
|
|
1567
|
+
const { uuid } = fsa.meta;
|
|
1568
|
+
let client = state.resolver.clients[uuid];
|
|
1569
|
+
if (client) {
|
|
1570
|
+
client.heartbeatTime = Date.now();
|
|
1571
|
+
Logger.system.debug(`heartbeat received for client ${client.appId} uuid ${uuid}`);
|
|
1572
|
+
}
|
|
1573
|
+
else {
|
|
1574
|
+
Logger.system.warn(`heartbeat received for undefined uuid ${uuid}`);
|
|
1575
|
+
}
|
|
1576
|
+
})
|
|
1577
|
+
.addCase(actions.register, (state, action, cmd) => {
|
|
1578
|
+
var _a;
|
|
1579
|
+
const { actionId } = action.payload;
|
|
1580
|
+
const { fsa } = action.payload;
|
|
1581
|
+
const { clientChannel: routerChannel, windowName, authenticationToken } = fsa.payload;
|
|
1582
|
+
const { uuid, authenticatedTransport, routerOrigin } = fsa.meta;
|
|
1583
|
+
const { clients } = state.resolver;
|
|
1584
|
+
// appId is the key internal identifier for apps; it is also what is authenticated
|
|
1585
|
+
const appId = (_a = authenticationToken === null || authenticationToken === void 0 ? void 0 : authenticationToken.meta.appId) !== null && _a !== void 0 ? _a : "unknown-appid";
|
|
1586
|
+
let appName = getValidatedAppName(appId, state.resolver.apps.definitions);
|
|
1587
|
+
if (!appName) {
|
|
1588
|
+
appName = `unvalidated-name-for-${appId}`;
|
|
1589
|
+
Logger.system.warn(`Could not validate name for ${appId} so using ${appName}, which might affect SelectConnect rules.`);
|
|
1590
|
+
}
|
|
1591
|
+
const config = getClientAppConfig(state.resolver.apps.definitions[appId]);
|
|
1592
|
+
// Initialize a client entry and add to our state
|
|
1593
|
+
state.resolver.clients = Object.assign(Object.assign({}, clients), { [uuid]: {
|
|
1594
|
+
heartbeatTime: 0,
|
|
1595
|
+
readiness: "initializing",
|
|
1596
|
+
authenticated: false,
|
|
1597
|
+
authenticatedTransport: authenticatedTransport !== null && authenticatedTransport !== void 0 ? authenticatedTransport : {},
|
|
1598
|
+
uuid,
|
|
1599
|
+
windowName,
|
|
1600
|
+
appName,
|
|
1601
|
+
appId,
|
|
1602
|
+
routerChannel,
|
|
1603
|
+
config,
|
|
1604
|
+
channels: [],
|
|
1605
|
+
joinedChannels: [],
|
|
1606
|
+
subscriptions: {
|
|
1607
|
+
globals: {
|
|
1608
|
+
contexts: {},
|
|
1609
|
+
intents: {},
|
|
1610
|
+
},
|
|
1611
|
+
channels: {},
|
|
1612
|
+
},
|
|
1613
|
+
} });
|
|
1614
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(processRegistrationRequest, {
|
|
1615
|
+
args: [
|
|
1616
|
+
{
|
|
1617
|
+
appId,
|
|
1618
|
+
resolverState: unImmer(state.resolver),
|
|
1619
|
+
config,
|
|
1620
|
+
uuid,
|
|
1621
|
+
routerOrigin: routerOrigin !== null && routerOrigin !== void 0 ? routerOrigin : "unknown-router-origin",
|
|
1622
|
+
windowName,
|
|
1623
|
+
authenticationToken: unImmer(authenticationToken),
|
|
1624
|
+
actionId,
|
|
1625
|
+
},
|
|
1626
|
+
],
|
|
1627
|
+
successActionCreator: actions.completeRegistration,
|
|
1628
|
+
});
|
|
1629
|
+
})
|
|
1630
|
+
.addCase(actions.completeRegistration, (state, action, cmd) => {
|
|
1631
|
+
var _a, _b, _c;
|
|
1632
|
+
const fsa = action.payload;
|
|
1633
|
+
const { config, authenticated, appId, windowName, uuid, connectId, spawnedFromWorkspace, actionId } = fsa;
|
|
1634
|
+
const appDefinition = (_a = state.resolver.apps.definitions[appId]) !== null && _a !== void 0 ? _a : {};
|
|
1635
|
+
const friendlyName = (_b = getFriendlyName(appDefinition)) !== null && _b !== void 0 ? _b : appId;
|
|
1636
|
+
Logger.system.log(`Interop.resolver.completeRegistration for ${friendlyName}.`, action, appDefinition);
|
|
1637
|
+
if (authenticated) {
|
|
1638
|
+
Logger.system.log(`Authentication successful for ${friendlyName}.`);
|
|
1639
|
+
}
|
|
1640
|
+
else {
|
|
1641
|
+
Logger.system.error(`Authentication failed for ${friendlyName}. Check central logger for additional information.`);
|
|
1642
|
+
}
|
|
1643
|
+
// if client has a connectId then save it
|
|
1644
|
+
state.resolver.clients[uuid].connectId = connectId;
|
|
1645
|
+
// update client readiness and authentication result
|
|
1646
|
+
state.resolver.clients[uuid].authenticated = authenticated;
|
|
1647
|
+
state.resolver.clients[uuid].readiness = "ready";
|
|
1648
|
+
// if pendingOpenActionIds has an actionId, then this is the appropriate place to respond to the request that opened this client
|
|
1649
|
+
if (state.resolver.pendingOpenActionIds[windowName]) {
|
|
1650
|
+
// respond to the app that made the open request; this is only for when the open request didn't contain an initial context (otherwise respond when context listener is subscribed to))
|
|
1651
|
+
Logger.system.debug(`Interop.resolver.completeRegistration setting open result for ${windowName}.`);
|
|
1652
|
+
setActionResult(state.resolver.pendingOpenActionIds[windowName], { type: "open" });
|
|
1653
|
+
delete state.resolver.pendingOpenActionIds[windowName];
|
|
1654
|
+
}
|
|
1655
|
+
// signal other modules that new client registered
|
|
1656
|
+
if (!state.resolver.apps.definitions[appId]) {
|
|
1657
|
+
let errorMessage = `Interop.resolver.completeRegistration NOTE: "${friendlyName}" registered without an appD entry in config (e.g. $configRoot/application/appd.json). For full functionality every app must have a corresponding appD entry.`;
|
|
1658
|
+
Logger.system.log(errorMessage);
|
|
1659
|
+
// add a basic appD entry so the client can function as much as possible -- an appD entry is expected elsewhere in the code
|
|
1660
|
+
state.resolver.apps.definitions[appId] = {
|
|
1661
|
+
appId,
|
|
1662
|
+
name: appId,
|
|
1663
|
+
manifest: {
|
|
1664
|
+
interop: {
|
|
1665
|
+
useLinker: true,
|
|
1666
|
+
},
|
|
1667
|
+
},
|
|
1668
|
+
};
|
|
1669
|
+
}
|
|
1670
|
+
// save the time of the first registration to determine when initialization should be complete (see cleanupAndVerify)
|
|
1671
|
+
if (!((_c = state.resolver.apps.definitions[appId]) === null || _c === void 0 ? void 0 : _c.firstRegistrationTimestamp)) {
|
|
1672
|
+
state.resolver.apps.definitions[appId].firstRegistrationTimestamp = Date.now();
|
|
1673
|
+
}
|
|
1674
|
+
const clientAdded = {
|
|
1675
|
+
appId,
|
|
1676
|
+
config,
|
|
1677
|
+
uuid,
|
|
1678
|
+
windowName,
|
|
1679
|
+
connectId,
|
|
1680
|
+
spawnedFromWorkspace,
|
|
1681
|
+
};
|
|
1682
|
+
// this clientAdded action is defined in the linker
|
|
1683
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.clientAdded(unImmer(clientAdded)));
|
|
1684
|
+
releaseQueuedMessages({ state, uuid, cmd });
|
|
1685
|
+
setActionResult(actionId, { type: "register" });
|
|
1686
|
+
testPoint.triggerSnapshot("testPointInteropServiceClientAdded", unImmer(state));
|
|
1687
|
+
testPoint.triggerSnapshot("Fdc3RegistrationComplete", {
|
|
1688
|
+
client: unImmer(state.resolver.clients[uuid]),
|
|
1689
|
+
});
|
|
1690
|
+
})
|
|
1691
|
+
.addCase(actions.cleanupAndVerify, (state, action, cmd) => {
|
|
1692
|
+
// Send heartbeats to all attached clients
|
|
1693
|
+
sendHeartbeats({ state }, cmd);
|
|
1694
|
+
// Look through all the client queues to handle any stale message
|
|
1695
|
+
filterAndResolveStaleMessages({ state }, cmd);
|
|
1696
|
+
// Verifies that all newly registered apps' intent listeners includes all of intents in their AppD definitions
|
|
1697
|
+
verifyListeners({ state }, cmd);
|
|
1698
|
+
})
|
|
1699
|
+
.addCase(actions.unregister, (state, action, cmd) => {
|
|
1700
|
+
var _a;
|
|
1701
|
+
const fsa = action.payload;
|
|
1702
|
+
const { uuid } = fsa.meta;
|
|
1703
|
+
const { windowName } = state.resolver.clients[uuid];
|
|
1704
|
+
const channelsToLeaveFrom = (_a = state.resolver.clients[uuid].joinedChannels) !== null && _a !== void 0 ? _a : [];
|
|
1705
|
+
delete state.resolver.clients[uuid];
|
|
1706
|
+
cleanupStaleChannels(channelsToLeaveFrom, state.resolver);
|
|
1707
|
+
// Having dead messages in the queue would be rare, but not impossible. The most common scenario might be an app that never initializes correctly.
|
|
1708
|
+
filterAndResolveDeadMessages({ state });
|
|
1709
|
+
// for now there we can assume its okay to cleanup all the registration data for the corresponding windowName, but might not be true in future
|
|
1710
|
+
state.resolver.pendingInteropRegistrationData = removeAppInteropRegistrationData(windowName, state.resolver.pendingInteropRegistrationData);
|
|
1711
|
+
// If the window that just closed was the Resolver UI, then we need to unregister the Resolver from the uiResolverListener
|
|
1712
|
+
if (uuid === state.resolver.config.registeredUIResolver) {
|
|
1713
|
+
state.resolver.config.registeredUIResolver = null;
|
|
1714
|
+
// also clear "in-progress" flag in case UIResolver closed in the middle of resolving; this prevents progress flag from locking up resolution
|
|
1715
|
+
state.resolver.apps.intentResolutionInProgress = false;
|
|
1716
|
+
state.resolver.apps.intentResolutionCurrentActionId = null;
|
|
1717
|
+
}
|
|
1718
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.clientRemoved({
|
|
1719
|
+
uuid,
|
|
1720
|
+
windowName,
|
|
1721
|
+
}));
|
|
1722
|
+
testPoint.triggerSnapshot("testPointInteropServiceClientRemoved", unImmer(state));
|
|
1723
|
+
})
|
|
1724
|
+
/**
|
|
1725
|
+
* This action will accept either InteropBroadcast or InteropBroadcastInternal.
|
|
1726
|
+
* InteropBroadcast is what is received from external desktop agent clients.
|
|
1727
|
+
* InteropBroadcastInternal - is used by internal functions that use broadcast. See the type definition
|
|
1728
|
+
* for more details.
|
|
1729
|
+
*/
|
|
1730
|
+
.addCase(actions.broadcast, (state, action, cmd) => {
|
|
1731
|
+
const fsa = action.payload;
|
|
1732
|
+
const { context, intent } = fsa.payload;
|
|
1733
|
+
const { channel, uuid: senderUuid, to, noSelectConnect, autoBroadcast } = fsa.meta;
|
|
1734
|
+
const sender = state.resolver.clients[senderUuid];
|
|
1735
|
+
// For testing and debugging, clear out any previous triggered rules
|
|
1736
|
+
state.root.testing = Object.assign(Object.assign({}, state.root.testing), { triggeredRules: [], destinationsBeforeSelectConnect: [], messagesToSend: [], dispatchesToSend: [], selectConnectChannelMessagesToSend: [], error: "" });
|
|
1737
|
+
// Checks to make sure the message has a valid set of data, and is not a broadcast loop
|
|
1738
|
+
if (!isValidBroadcastMessage({ state, fsa, cmd }))
|
|
1739
|
+
return;
|
|
1740
|
+
// Saves this broadcasted context in the store (in most cases)
|
|
1741
|
+
maybeSaveContext({ state, fsa });
|
|
1742
|
+
/**
|
|
1743
|
+
* When transmitting back to a client due to a joined channel, we actually want the channel id to be null
|
|
1744
|
+
* instead of the relevant joined channel. This is because the client code expects the response on addContextListener() rather than channel.addContextListener()
|
|
1745
|
+
*
|
|
1746
|
+
* Note: "to" will always be set for an intent. "context" will always be set otherwise - but Typescript doesn't know this so we have an extra check for TS's benefit
|
|
1747
|
+
*/
|
|
1748
|
+
/* eslint-disable no-nested-ternary */
|
|
1749
|
+
const destinations = intent
|
|
1750
|
+
? to
|
|
1751
|
+
? getDestinationsForIntent({
|
|
1752
|
+
clients: state.resolver.clients,
|
|
1753
|
+
to,
|
|
1754
|
+
intent,
|
|
1755
|
+
context,
|
|
1756
|
+
})
|
|
1757
|
+
: []
|
|
1758
|
+
: context
|
|
1759
|
+
? getDestinationsForContext({
|
|
1760
|
+
clients: state.resolver.clients,
|
|
1761
|
+
sender,
|
|
1762
|
+
channel,
|
|
1763
|
+
context,
|
|
1764
|
+
senderUuid,
|
|
1765
|
+
to,
|
|
1766
|
+
autoBroadcast,
|
|
1767
|
+
})
|
|
1768
|
+
: [];
|
|
1769
|
+
state.root.testing.destinationsBeforeSelectConnect = destinations;
|
|
1770
|
+
// If the message is directed ("to") but not destination is available then return
|
|
1771
|
+
// this function will queue if necessary
|
|
1772
|
+
if (isUnavailableDirectedMessage({ state, fsa, destinations }))
|
|
1773
|
+
return;
|
|
1774
|
+
// Run through the selectConnect rules, except for a directed message ("to") which should never be re-routed because it could cause infinite loops
|
|
1775
|
+
// SelectConnect may alter, add or remove destinations
|
|
1776
|
+
const selectConnectDestinations = noSelectConnect
|
|
1777
|
+
? destinations
|
|
1778
|
+
: (() => {
|
|
1779
|
+
const [newDestinations, triggeredRules] = selectConnect(state, fsa, destinations);
|
|
1780
|
+
state.root.testing.triggeredRules = triggeredRules;
|
|
1781
|
+
return newDestinations;
|
|
1782
|
+
})();
|
|
1783
|
+
// Set's the current context for each destination in the redux store to be what we're just about to send it
|
|
1784
|
+
saveDestinationContexts({ state, destinations: selectConnectDestinations });
|
|
1785
|
+
// Get arrays of each type of action to be looper into other redux actions
|
|
1786
|
+
const { messagesToSend, dispatchesToSend, selectConnectChannelMessagesToSend } = breakDownDestinations({
|
|
1787
|
+
state,
|
|
1788
|
+
fsa,
|
|
1789
|
+
destinations: selectConnectDestinations,
|
|
1790
|
+
});
|
|
1791
|
+
Logger.system.debug("Interop.resolver.broadcast messagesToSend", messagesToSend);
|
|
1792
|
+
Logger.system.debug("Interop.resolver.broadcast dispatchesToSend", dispatchesToSend);
|
|
1793
|
+
Logger.system.debug("Interop.resolver.broadcast selectConnectChannelMessagesToSend", selectConnectChannelMessagesToSend);
|
|
1794
|
+
// Use these store locations for testing and live debugging
|
|
1795
|
+
state.root.testing.messagesToSend = messagesToSend;
|
|
1796
|
+
state.root.testing.dispatchesToSend = dispatchesToSend;
|
|
1797
|
+
state.root.testing.selectConnectChannelMessagesToSend = selectConnectChannelMessagesToSend;
|
|
1798
|
+
if (messagesToSend.length)
|
|
1799
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.sendMessageToDestinations(messagesToSend));
|
|
1800
|
+
if (selectConnectChannelMessagesToSend.length)
|
|
1801
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.sendSelectConnectMessagesToDestinations(selectConnectChannelMessagesToSend));
|
|
1802
|
+
dispatchesToSend.forEach((dispatchMessage) => {
|
|
1803
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(dispatchMessage);
|
|
1804
|
+
});
|
|
1805
|
+
})
|
|
1806
|
+
.addCase(actions.sendMessageToDestinations, (state, action, cmd) => {
|
|
1807
|
+
const messagesToSend = action.payload;
|
|
1808
|
+
messagesToSend.forEach((outgoing) => {
|
|
1809
|
+
var _a, _b, _c, _d, _e;
|
|
1810
|
+
const meta = outgoing.channel
|
|
1811
|
+
? {
|
|
1812
|
+
uuid: state.resolver.config.serverUUID,
|
|
1813
|
+
targetSubscriberId: outgoing.targetSubscriberId,
|
|
1814
|
+
channel: outgoing.channel,
|
|
1815
|
+
}
|
|
1816
|
+
: {
|
|
1817
|
+
uuid: state.resolver.config.serverUUID,
|
|
1818
|
+
targetSubscriberId: outgoing.targetSubscriberId,
|
|
1819
|
+
};
|
|
1820
|
+
let message;
|
|
1821
|
+
if (outgoing.intent) {
|
|
1822
|
+
message = {
|
|
1823
|
+
type: "intent",
|
|
1824
|
+
payload: {
|
|
1825
|
+
intent: outgoing.intent,
|
|
1826
|
+
context: outgoing.context,
|
|
1827
|
+
},
|
|
1828
|
+
meta,
|
|
1829
|
+
};
|
|
1830
|
+
}
|
|
1831
|
+
else if (outgoing.context) {
|
|
1832
|
+
message = {
|
|
1833
|
+
type: "broadcast",
|
|
1834
|
+
payload: {
|
|
1835
|
+
context: outgoing.context,
|
|
1836
|
+
},
|
|
1837
|
+
meta,
|
|
1838
|
+
};
|
|
1839
|
+
}
|
|
1840
|
+
// getCurrentContext() with no parameters (no context type) falls back to `mostRecentContext` being set
|
|
1841
|
+
if (outgoing.context)
|
|
1842
|
+
state.resolver.clients[outgoing.uuid].mostRecentContext = outgoing.context;
|
|
1843
|
+
// If pending action that was waiting on message to be sent to client, then action response can be set now.
|
|
1844
|
+
// When we add support for the client to return intent results, this code will change -- raiseIntent won't be done until result received.
|
|
1845
|
+
if (outgoing.pendingActionId) {
|
|
1846
|
+
const source = (_b = (_a = state.resolver.clients[outgoing.uuid]) === null || _a === void 0 ? void 0 : _a.appId) !== null && _b !== void 0 ? _b : "unknown";
|
|
1847
|
+
const version = (_d = (_c = state.resolver.apps.definitions[source]) === null || _c === void 0 ? void 0 : _c.version) !== null && _d !== void 0 ? _d : "unknown";
|
|
1848
|
+
const actionResult = outgoing.pendingActionId.type === "raiseIntent"
|
|
1849
|
+
? {
|
|
1850
|
+
type: "raiseIntent",
|
|
1851
|
+
result: {
|
|
1852
|
+
source,
|
|
1853
|
+
// @ts-ignore
|
|
1854
|
+
intent: (_e = outgoing.intent) !== null && _e !== void 0 ? _e : "unknown",
|
|
1855
|
+
version,
|
|
1856
|
+
},
|
|
1857
|
+
}
|
|
1858
|
+
: {
|
|
1859
|
+
type: "open",
|
|
1860
|
+
result: {
|
|
1861
|
+
source,
|
|
1862
|
+
version,
|
|
1863
|
+
},
|
|
1864
|
+
};
|
|
1865
|
+
Logger.system.debug("Interop.resolver.sendMessageToDestinations pendingAction set", outgoing.pendingActionId, actionResult);
|
|
1866
|
+
// Although this message won't actually be transmitted until the sendMessageOnRouter cmd below executes in the next redux loop,
|
|
1867
|
+
// it is virtually done here so invoke setActionResult
|
|
1868
|
+
setActionResult(outgoing.pendingActionId, actionResult);
|
|
1869
|
+
}
|
|
1870
|
+
loopDetectionSetTimestamp(outgoing.uuid, state.resolver.loopDetectionMap);
|
|
1871
|
+
// Send messages out optimistically. We don't wait for a response.
|
|
1872
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(sendMessageOnRouter, {
|
|
1873
|
+
args: [outgoing.routerChannel, message],
|
|
1874
|
+
});
|
|
1875
|
+
});
|
|
1876
|
+
})
|
|
1877
|
+
.addCase(actions.sendSelectConnectMessagesToDestinations, (state, action, cmd) => {
|
|
1878
|
+
const messagesToSend = action.payload;
|
|
1879
|
+
messagesToSend.forEach((outgoing) => {
|
|
1880
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(sendMessageOnRouter, {
|
|
1881
|
+
args: [outgoing.routerChannel, outgoing],
|
|
1882
|
+
});
|
|
1883
|
+
});
|
|
1884
|
+
})
|
|
1885
|
+
.addCase(actions.subscribeContext, (state, action, cmd) => {
|
|
1886
|
+
var _a;
|
|
1887
|
+
const fsa = action.payload;
|
|
1888
|
+
const { contextType } = fsa.payload;
|
|
1889
|
+
const { channel, uuid, targetSubscriberId } = fsa.meta;
|
|
1890
|
+
let client = state.resolver.clients[uuid];
|
|
1891
|
+
if (!client) {
|
|
1892
|
+
Logger.system.warn(`Interop.resolver.subscribeContext: client ${uuid} unknown so subscribe skipped`);
|
|
1893
|
+
return;
|
|
1894
|
+
}
|
|
1895
|
+
// We use contextType="*" as a wildcard listener
|
|
1896
|
+
const thisContextType = contextType !== null && contextType !== void 0 ? contextType : "*";
|
|
1897
|
+
const thisSubscriberContext = {
|
|
1898
|
+
context: {
|
|
1899
|
+
type: thisContextType,
|
|
1900
|
+
},
|
|
1901
|
+
meta: {
|
|
1902
|
+
timestamp: 0,
|
|
1903
|
+
targetSubscriberId,
|
|
1904
|
+
},
|
|
1905
|
+
};
|
|
1906
|
+
// When new subscriber added, broadcast the latest channel context to the subscribing app.
|
|
1907
|
+
// If the subscriber is for a specific context type, then the last message on the channel for that context type is broadcasted.
|
|
1908
|
+
// Note 1: the broadcast reducer will later filter broadcasts if client isn't authorized.
|
|
1909
|
+
// Note 2: joinChannels will later broadcast if subscriber is added without a channel specified and no joined channels.
|
|
1910
|
+
// Update client subscriptions
|
|
1911
|
+
if (channel) {
|
|
1912
|
+
client.channels = concatNoDups(client.channels, channel);
|
|
1913
|
+
// Add a channel entry for the client if none exists
|
|
1914
|
+
(_a = client.subscriptions.channels[channel]) !== null && _a !== void 0 ? _a : (client.subscriptions.channels[channel] = {
|
|
1915
|
+
contexts: {},
|
|
1916
|
+
intents: {},
|
|
1917
|
+
});
|
|
1918
|
+
// the targetSubscriberId must be maintained here in thisSubscriberContext in case it is needed for autoBroadcast to all listeners when a channel is joined
|
|
1919
|
+
client.subscriptions.channels[channel].contexts[thisContextType] = thisSubscriberContext;
|
|
1920
|
+
// NOTE FDC3 has decided that auto-broadcasts should not occur to app channels, only user channels. Therefore autoBroadCastToSpecifiedClient is not invoked here.
|
|
1921
|
+
}
|
|
1922
|
+
else {
|
|
1923
|
+
client.subscriptions.globals.contexts[thisContextType] = thisSubscriberContext;
|
|
1924
|
+
// For global subscribe: For all the channels already joined to, broadcast the latest channel context to the subscribing app.
|
|
1925
|
+
// Note 1: This might result in multiple broadcast messages (including multiple for the same context and listener)
|
|
1926
|
+
client.joinedChannels.forEach((subscribedChannel) => {
|
|
1927
|
+
autoBroadCastToSpecifiedClient({
|
|
1928
|
+
uuid,
|
|
1929
|
+
globalSubscription: true,
|
|
1930
|
+
channel: subscribedChannel,
|
|
1931
|
+
contextType,
|
|
1932
|
+
targetSubscriberId,
|
|
1933
|
+
resolverState: state.resolver,
|
|
1934
|
+
cmd,
|
|
1935
|
+
});
|
|
1936
|
+
});
|
|
1937
|
+
}
|
|
1938
|
+
releaseQueuedMessages({
|
|
1939
|
+
state,
|
|
1940
|
+
uuid,
|
|
1941
|
+
channel,
|
|
1942
|
+
cmd,
|
|
1943
|
+
type: "broadcast",
|
|
1944
|
+
contextType,
|
|
1945
|
+
});
|
|
1946
|
+
})
|
|
1947
|
+
.addCase(actions.unsubscribeContext, (state, action) => {
|
|
1948
|
+
const fsa = action.payload;
|
|
1949
|
+
const { contextType } = fsa.payload;
|
|
1950
|
+
const { channel, uuid } = fsa.meta;
|
|
1951
|
+
let client = state.resolver.clients[uuid];
|
|
1952
|
+
if (!client)
|
|
1953
|
+
return;
|
|
1954
|
+
let { subscriptions } = client;
|
|
1955
|
+
let { channels } = subscriptions;
|
|
1956
|
+
const thisContextType = contextType !== null && contextType !== void 0 ? contextType : "*";
|
|
1957
|
+
if (channel && channels[channel]) {
|
|
1958
|
+
delete channels[channel].contexts[thisContextType];
|
|
1959
|
+
if (!Object.keys(channels[channel].contexts).length)
|
|
1960
|
+
delete channels[channel].contexts[thisContextType];
|
|
1961
|
+
if (!Object.keys(channels[channel].contexts) && !Object.keys(channels[channel].intents))
|
|
1962
|
+
delete channels[channel];
|
|
1963
|
+
}
|
|
1964
|
+
else {
|
|
1965
|
+
const { contexts } = subscriptions.globals;
|
|
1966
|
+
delete contexts[thisContextType];
|
|
1967
|
+
}
|
|
1968
|
+
})
|
|
1969
|
+
.addCase(actions.joinChannels, (state, action, cmd) => {
|
|
1970
|
+
var _a;
|
|
1971
|
+
const fsa = action.payload;
|
|
1972
|
+
const { uuid } = fsa.meta;
|
|
1973
|
+
const { channels: channelsToAdd } = fsa.payload;
|
|
1974
|
+
const client = state.resolver.clients[uuid];
|
|
1975
|
+
if (!client) {
|
|
1976
|
+
Logger.system.warn(`Interop.resolver.joinChannels: client ${uuid} unknown so join skipped`);
|
|
1977
|
+
return;
|
|
1978
|
+
}
|
|
1979
|
+
const joinedChannels = (_a = client === null || client === void 0 ? void 0 : client.joinedChannels) !== null && _a !== void 0 ? _a : [];
|
|
1980
|
+
// For each channel joined, broadcast the latest channel context to the subscribing app.
|
|
1981
|
+
// Note 1: the broadcast reducer will handle when client doesn't have a listener or isn't authorized.
|
|
1982
|
+
// Note 2: Currently Finsemble's interopService allows a client to join multiple channels. We'll reevaluate this later, given FDC3 limits a client to joining only one channel at a time.
|
|
1983
|
+
channelsToAdd.forEach((channel) => {
|
|
1984
|
+
var _a;
|
|
1985
|
+
if (joinedChannels.includes(channel)) {
|
|
1986
|
+
Logger.system.warn(`Interop.resolver.joinChannels: ${channel} skipped because already joined`);
|
|
1987
|
+
}
|
|
1988
|
+
else {
|
|
1989
|
+
joinedChannels.push(channel);
|
|
1990
|
+
// autoBroadcast for join will only apply to the client's global subscriptions
|
|
1991
|
+
let contextList = Object.values((_a = client.subscriptions.globals.contexts) !== null && _a !== void 0 ? _a : {});
|
|
1992
|
+
Logger.system.debug(`Interop.resolver.joinChannels: joining ${channel} for ${uuid}`, contextList);
|
|
1993
|
+
// for each of the client's context subscriptions on the channel, broadcast the last corresponding context.
|
|
1994
|
+
contextList.forEach((currentContext) => {
|
|
1995
|
+
autoBroadCastToSpecifiedClient({
|
|
1996
|
+
uuid,
|
|
1997
|
+
globalSubscription: true,
|
|
1998
|
+
channel,
|
|
1999
|
+
contextType: currentContext.context.type,
|
|
2000
|
+
targetSubscriberId: currentContext.meta.targetSubscriberId,
|
|
2001
|
+
resolverState: state.resolver,
|
|
2002
|
+
cmd,
|
|
2003
|
+
});
|
|
2004
|
+
});
|
|
2005
|
+
}
|
|
2006
|
+
// must save here since will be a different array reference for first channel joined
|
|
2007
|
+
state.resolver.clients[uuid].joinedChannels = joinedChannels;
|
|
2008
|
+
});
|
|
2009
|
+
})
|
|
2010
|
+
.addCase(actions.leaveChannels, (state, action) => {
|
|
2011
|
+
var _a;
|
|
2012
|
+
const fsa = action.payload;
|
|
2013
|
+
const { uuid } = fsa.meta;
|
|
2014
|
+
const { channels: channelsToRemove } = fsa.payload;
|
|
2015
|
+
const client = state.resolver.clients[uuid];
|
|
2016
|
+
const joinedChannels = (_a = client === null || client === void 0 ? void 0 : client.joinedChannels) !== null && _a !== void 0 ? _a : [];
|
|
2017
|
+
const channelsToLeaveFrom = channelsToRemove !== null && channelsToRemove !== void 0 ? channelsToRemove : joinedChannels;
|
|
2018
|
+
if (client)
|
|
2019
|
+
state.resolver.clients[uuid].joinedChannels = channelsToRemove
|
|
2020
|
+
? joinedChannels.filter((name) => !channelsToRemove.includes(name))
|
|
2021
|
+
: [];
|
|
2022
|
+
cleanupStaleChannels(channelsToLeaveFrom, state.resolver);
|
|
2023
|
+
})
|
|
2024
|
+
.addCase(actions.registerSelectConnectChannel, (state, action) => {
|
|
2025
|
+
const selectConnectChannel = action.payload;
|
|
2026
|
+
state.resolver.selectConnectChannels[selectConnectChannel.name] = selectConnectChannel;
|
|
2027
|
+
})
|
|
2028
|
+
.addCase(actions.open, (state, action, cmd) => {
|
|
2029
|
+
const { actionId } = action.payload;
|
|
2030
|
+
const { fsa } = action.payload;
|
|
2031
|
+
const { context, target } = fsa.payload;
|
|
2032
|
+
const { uuid } = fsa.meta;
|
|
2033
|
+
const client = state.resolver.clients[uuid];
|
|
2034
|
+
const pendingContextBroadcastMessage = {
|
|
2035
|
+
type: "broadcast",
|
|
2036
|
+
payload: {
|
|
2037
|
+
context,
|
|
2038
|
+
},
|
|
2039
|
+
meta: {
|
|
2040
|
+
uuid: fsa.meta.uuid,
|
|
2041
|
+
// Prevent the opening app from accidentally having its local context state set to the one we're passing to the new app
|
|
2042
|
+
setSenderContext: false,
|
|
2043
|
+
},
|
|
2044
|
+
};
|
|
2045
|
+
Logger.system.debug("Interop.resolver.open target and pending message", {
|
|
2046
|
+
target,
|
|
2047
|
+
pendingContextBroadcastMessage,
|
|
2048
|
+
});
|
|
2049
|
+
const appId = appIdFromTargetApp(state.resolver.apps.definitions, target);
|
|
2050
|
+
if (!appId) {
|
|
2051
|
+
Logger.system.error(`App ${fsa.meta.uuid} failed to open target ${target} because it does not have an unambiguous identifier found in appD.`, state.resolver.apps.definitions);
|
|
2052
|
+
const actionResult = {
|
|
2053
|
+
type: "open",
|
|
2054
|
+
error: OpenError.ErrorOnLaunch,
|
|
2055
|
+
};
|
|
2056
|
+
setActionResult(actionId, actionResult);
|
|
2057
|
+
return;
|
|
2058
|
+
}
|
|
2059
|
+
const authorized = filterForAppAuthorization({
|
|
2060
|
+
state,
|
|
2061
|
+
originClientUuid: fsa.meta.uuid,
|
|
2062
|
+
contextType: (context === null || context === void 0 ? void 0 : context.type) || "",
|
|
2063
|
+
destinationAppIdList: [appId],
|
|
2064
|
+
});
|
|
2065
|
+
const isValid = authorized.length > 0;
|
|
2066
|
+
if (isValid) {
|
|
2067
|
+
// opening the app is an async function because we need to wait for a windowName to be assigned
|
|
2068
|
+
// actions.openedApp receives the openApp results and then completes delivery of context
|
|
2069
|
+
cmd.run(openApp, {
|
|
2070
|
+
args: [
|
|
2071
|
+
{
|
|
2072
|
+
actionId,
|
|
2073
|
+
appId,
|
|
2074
|
+
pendingMessage: context ? pendingContextBroadcastMessage : null,
|
|
2075
|
+
originatingAppId: client.appId,
|
|
2076
|
+
originatingAppWindow: client.windowName,
|
|
2077
|
+
appDefinitions: unImmer(state.resolver.apps.definitions),
|
|
2078
|
+
},
|
|
2079
|
+
],
|
|
2080
|
+
successActionCreator: actions.openedApp,
|
|
2081
|
+
});
|
|
2082
|
+
}
|
|
2083
|
+
else {
|
|
2084
|
+
Logger.system.log(`Warning: App ${fsa.meta.uuid} tried to open app ${appId}, despite not being authorized.`);
|
|
2085
|
+
const actionResult = {
|
|
2086
|
+
type: "open",
|
|
2087
|
+
error: OpenError.ErrorOnLaunch,
|
|
2088
|
+
};
|
|
2089
|
+
setActionResult(actionId, actionResult);
|
|
2090
|
+
}
|
|
2091
|
+
})
|
|
2092
|
+
// triggered in open to handle openApp results -- see cmd.run(openApp...)
|
|
2093
|
+
.addCase(actions.openedApp, (state, action) => {
|
|
2094
|
+
var _a, _b;
|
|
2095
|
+
const { actionId, error, windowName, pendingMessage } = action.payload;
|
|
2096
|
+
Logger.system.debug(`Interop.resolver.openedApp ${windowName}`, error, pendingMessage);
|
|
2097
|
+
if (!error && windowName && pendingMessage) {
|
|
2098
|
+
// No setActionResult is done here because a successful result won't be sent until initial FDC3 context or intent message is broadcast to the opening client.
|
|
2099
|
+
// Append actionId to signal action response must be sent when the client's initialization message is sent to it.
|
|
2100
|
+
const modifiedPendingMessage = Object.assign(Object.assign({}, pendingMessage), { meta: Object.assign(Object.assign({}, pendingMessage.meta), { pendingActionId: actionId }) });
|
|
2101
|
+
state.resolver.queue[windowName] = ((_a = state.resolver.queue[windowName]) !== null && _a !== void 0 ? _a : []).concat([
|
|
2102
|
+
{
|
|
2103
|
+
pendingMessage: modifiedPendingMessage,
|
|
2104
|
+
timestamp: Date.now(),
|
|
2105
|
+
},
|
|
2106
|
+
]);
|
|
2107
|
+
}
|
|
2108
|
+
else if (error) {
|
|
2109
|
+
Logger.system.error("open failed due to openApp error", error, windowName);
|
|
2110
|
+
const actionResult = actionId.type === "raiseIntent"
|
|
2111
|
+
? {
|
|
2112
|
+
type: "raiseIntent",
|
|
2113
|
+
error: ResolveError.NoAppsFound,
|
|
2114
|
+
}
|
|
2115
|
+
: {
|
|
2116
|
+
type: "open",
|
|
2117
|
+
error: OpenError.AppNotFound,
|
|
2118
|
+
};
|
|
2119
|
+
setActionResult(actionId, actionResult);
|
|
2120
|
+
}
|
|
2121
|
+
else if (windowName && !pendingMessage) {
|
|
2122
|
+
// no context was specified in the open for this path
|
|
2123
|
+
// check if window already registered
|
|
2124
|
+
const uuids = uuidsFromWindowName({ clients: state.resolver.clients, windowName });
|
|
2125
|
+
const existingUuid = uuids.length === 0 ? null : uuids[0];
|
|
2126
|
+
if (uuids.length > 1) {
|
|
2127
|
+
Logger.system.warn(`Interop.resolver.openedApp found multiple existing clients with same window name ${windowName}.`);
|
|
2128
|
+
}
|
|
2129
|
+
if (existingUuid && ((_b = state.resolver.clients[existingUuid]) === null || _b === void 0 ? void 0 : _b.readiness) === "ready") {
|
|
2130
|
+
// respond to the app that made the open request; this is only for when the open request didn't contain an initial context (otherwise respond when context listener is subscribed to))
|
|
2131
|
+
Logger.system.debug(`Interop.resolver.completeRegistration setting open result for ${windowName}.`);
|
|
2132
|
+
setActionResult(actionId, { type: "open" });
|
|
2133
|
+
}
|
|
2134
|
+
else {
|
|
2135
|
+
// the window hasn't completed registration yet
|
|
2136
|
+
// so save actionId so completeRegistration action can respond to it
|
|
2137
|
+
state.resolver.pendingOpenActionIds[windowName] = actionId;
|
|
2138
|
+
Logger.system.debug("Interop.resolver.openedApp: no initial context specified");
|
|
2139
|
+
}
|
|
2140
|
+
}
|
|
2141
|
+
else {
|
|
2142
|
+
Logger.system.error("Interop.resolver.openedApp interopAssertion failure -- null path taken", error, windowName, pendingMessage);
|
|
2143
|
+
}
|
|
2144
|
+
})
|
|
2145
|
+
.addCase(actions.raiseIntent, (state, action, cmd) => {
|
|
2146
|
+
var _a;
|
|
2147
|
+
const { actionId } = action.payload;
|
|
2148
|
+
const { fsa } = action.payload;
|
|
2149
|
+
const { intent: intentName, context, target } = fsa.payload;
|
|
2150
|
+
const { uuid } = fsa.meta;
|
|
2151
|
+
const client = state.resolver.clients[uuid];
|
|
2152
|
+
// Get a filtered list of AppIntent objects that match the given intentName and/or context and optionally a target app.
|
|
2153
|
+
// Note that AppIntent itself contains a list of apps, so the `appIntents` object is actually a two dimensional array
|
|
2154
|
+
// This is because raiseIntentByContext requires such a two dimensional array. See comments for ResolutionList type.
|
|
2155
|
+
const appIntents = findAndFilterAppIntents({
|
|
2156
|
+
resolverState: state.resolver,
|
|
2157
|
+
intentName,
|
|
2158
|
+
context,
|
|
2159
|
+
target,
|
|
2160
|
+
});
|
|
2161
|
+
// Get a second list which only contains launchable apps. (This also excludes singletons that are already running).
|
|
2162
|
+
const launchableAppIntents = findAndFilterAppIntents({
|
|
2163
|
+
resolverState: state.resolver,
|
|
2164
|
+
intentName,
|
|
2165
|
+
context,
|
|
2166
|
+
target,
|
|
2167
|
+
filterNotLaunchable: true,
|
|
2168
|
+
filterOpenSingletons: true,
|
|
2169
|
+
});
|
|
2170
|
+
/**
|
|
2171
|
+
* Build a multi-dimensional array of recipients. There is an entry for each known intent (each intent)
|
|
2172
|
+
* from state.resolver.intent - which was generated from appd entries.
|
|
2173
|
+
*
|
|
2174
|
+
* Within each of these entries there is a list of launchable apps (those that have intents registered in their
|
|
2175
|
+
* appd entries) and open apps (those which are running and have called addIntentListener()).
|
|
2176
|
+
*
|
|
2177
|
+
* The reason we build a multi-dimensional array is because this reducer may have been called only with a context.
|
|
2178
|
+
* The resulting `appIntents` list might therefore resolve to a number of intents that all accept that context.
|
|
2179
|
+
* See raiseIntentForContext().
|
|
2180
|
+
*/
|
|
2181
|
+
let resolutionMultiArray = appIntents.map((appIntent) => {
|
|
2182
|
+
var _a, _b, _c, _d;
|
|
2183
|
+
// Get lists of resolution objects, both for launchable apps and open apps
|
|
2184
|
+
// The list of intents and corresponding app choices that is launchable is potentially a subset of the broader list
|
|
2185
|
+
const registeredLaunchableApps = (_b = (_a = launchableAppIntents.find((thisIntentData) => thisIntentData.intent.name === appIntent.intent.name)) === null || _a === void 0 ? void 0 : _a.apps) !== null && _b !== void 0 ? _b : [];
|
|
2186
|
+
const openAppsWithHandler = getRunningAppsForIntent({
|
|
2187
|
+
state,
|
|
2188
|
+
target,
|
|
2189
|
+
intent: appIntent.intent.name,
|
|
2190
|
+
});
|
|
2191
|
+
return {
|
|
2192
|
+
launchableApps: filterUnauthorizedRecipients({
|
|
2193
|
+
state,
|
|
2194
|
+
uuid: fsa.meta.uuid,
|
|
2195
|
+
intentName,
|
|
2196
|
+
contextType: (_c = fsa.payload.context) === null || _c === void 0 ? void 0 : _c.type,
|
|
2197
|
+
which: "apps",
|
|
2198
|
+
candidates: registeredLaunchableApps.map((meta) => {
|
|
2199
|
+
return {
|
|
2200
|
+
meta,
|
|
2201
|
+
appId: meta.appId,
|
|
2202
|
+
};
|
|
2203
|
+
}),
|
|
2204
|
+
}),
|
|
2205
|
+
openApps: filterUnauthorizedRecipients({
|
|
2206
|
+
state,
|
|
2207
|
+
uuid: fsa.meta.uuid,
|
|
2208
|
+
intentName,
|
|
2209
|
+
contextType: (_d = fsa.payload.context) === null || _d === void 0 ? void 0 : _d.type,
|
|
2210
|
+
which: "uuids",
|
|
2211
|
+
candidates: openAppsWithHandler,
|
|
2212
|
+
}),
|
|
2213
|
+
intent: appIntent.intent,
|
|
2214
|
+
};
|
|
2215
|
+
});
|
|
2216
|
+
/**
|
|
2217
|
+
* Generate a list of all the running apps that have registered to listen for the intent specified in the fsa.
|
|
2218
|
+
* If the fsa doesn't have an intent (e.g. this reducer is the result of a call to getIntentsByContext) then
|
|
2219
|
+
* this will result in any empty array (those subscribers will be picked up when the resolutionMultiArray is generated below).
|
|
2220
|
+
*/
|
|
2221
|
+
const runningAppsWithHandler = getRunningAppsForIntent({
|
|
2222
|
+
state,
|
|
2223
|
+
target,
|
|
2224
|
+
intent: intentName,
|
|
2225
|
+
});
|
|
2226
|
+
/**
|
|
2227
|
+
* Add any "dynamic" intent subscribing clients to the multi-array. These are clients that have called addIntentListener()
|
|
2228
|
+
* on an unknown intent (one that is not in any appd entry).
|
|
2229
|
+
*/
|
|
2230
|
+
if (intentName && !resolutionMultiArray.some((resolutionList) => resolutionList.intent.name === intentName)) {
|
|
2231
|
+
resolutionMultiArray = resolutionMultiArray.concat({
|
|
2232
|
+
launchableApps: [],
|
|
2233
|
+
openApps: filterUnauthorizedRecipients({
|
|
2234
|
+
state,
|
|
2235
|
+
uuid: fsa.meta.uuid,
|
|
2236
|
+
intentName,
|
|
2237
|
+
contextType: (_a = fsa.payload.context) === null || _a === void 0 ? void 0 : _a.type,
|
|
2238
|
+
which: "uuids",
|
|
2239
|
+
candidates: runningAppsWithHandler,
|
|
2240
|
+
}),
|
|
2241
|
+
intent: {
|
|
2242
|
+
name: intentName,
|
|
2243
|
+
displayName: intentName,
|
|
2244
|
+
},
|
|
2245
|
+
});
|
|
2246
|
+
}
|
|
2247
|
+
const numberOfAuthorizedRecipients = resolutionMultiArray
|
|
2248
|
+
.map((resolutionList) => resolutionList.launchableApps.length + resolutionList.openApps.length)
|
|
2249
|
+
.reduce((acc, cur) => acc + cur, 0);
|
|
2250
|
+
// Provide helpful warning messages to developers for potential mismatches between AppD entries and addIntentListener()
|
|
2251
|
+
if (intentName && state.resolver.intents[intentName]) {
|
|
2252
|
+
const anyRecipients = launchableAppIntents.length > 0 || runningAppsWithHandler.length > 0;
|
|
2253
|
+
if (!anyRecipients) {
|
|
2254
|
+
Logger.warn(`No app was found for "raiseIntent ${intentName}" although the intent is defined. This might be the desired behavior, but if not then review the AppD config for apps than handle ${intentName}. One possible cause is if the app is not launchable and hasn't registered.`);
|
|
2255
|
+
}
|
|
2256
|
+
else if (!numberOfAuthorizedRecipients) {
|
|
2257
|
+
Logger.warn(`No app was found for "raiseIntent ${intentName}" after filtering for authorization, although the intent is defined. This might be the desired behavior, but if not then review the AppD config authorization rules. Also confirm the target app was authenticated when it registered.`);
|
|
2258
|
+
}
|
|
2259
|
+
}
|
|
2260
|
+
// Raising the intent is always a multi-step acton, so pull together the requisite intent data for the next steps.
|
|
2261
|
+
// Set flag to specify if UI Resolver is available and needed to decide which app handles the intent
|
|
2262
|
+
const isAppResolutionNeeded = numberOfAuthorizedRecipients > 1 && state.resolver.config.registeredUIResolver !== null;
|
|
2263
|
+
Logger.system.log(`Interop.resolver.raiseIntent needs resolution=${isAppResolutionNeeded}`, {
|
|
2264
|
+
appIntents,
|
|
2265
|
+
launchableAppIntents,
|
|
2266
|
+
resolutionMultiArray,
|
|
2267
|
+
});
|
|
2268
|
+
// if UI resolver is needed, then initiate handshake with it
|
|
2269
|
+
if (isAppResolutionNeeded) {
|
|
2270
|
+
sendIntentToAppResolver({
|
|
2271
|
+
state,
|
|
2272
|
+
cmd,
|
|
2273
|
+
actionId,
|
|
2274
|
+
fsa,
|
|
2275
|
+
resolutionList: resolutionMultiArray,
|
|
2276
|
+
originatingAppWindow: client.windowName,
|
|
2277
|
+
});
|
|
2278
|
+
return;
|
|
2279
|
+
}
|
|
2280
|
+
/**
|
|
2281
|
+
* Automatically pick the app. Either because no UI resolution is necessary, or the UI resolver isn't registered.
|
|
2282
|
+
* If the UI resolver is unregistered, then the first app in the list of possibilities is picked.
|
|
2283
|
+
*/
|
|
2284
|
+
const appToOpen = resolutionMultiArray.find((listItem) => listItem.launchableApps.length > 0);
|
|
2285
|
+
const alreadyOpenApp = resolutionMultiArray.find((listItem) => listItem.openApps.length > 0);
|
|
2286
|
+
if (appToOpen) {
|
|
2287
|
+
openAppForIntent({
|
|
2288
|
+
state,
|
|
2289
|
+
cmd,
|
|
2290
|
+
fsa,
|
|
2291
|
+
actionId,
|
|
2292
|
+
appId: appToOpen.launchableApps[0].appId,
|
|
2293
|
+
originatingAppId: client.appId,
|
|
2294
|
+
originatingAppWindow: client.windowName,
|
|
2295
|
+
});
|
|
2296
|
+
}
|
|
2297
|
+
else if (alreadyOpenApp) {
|
|
2298
|
+
sendIntentToRunningApp({
|
|
2299
|
+
state,
|
|
2300
|
+
fsa,
|
|
2301
|
+
cmd,
|
|
2302
|
+
app: alreadyOpenApp.openApps[0],
|
|
2303
|
+
});
|
|
2304
|
+
}
|
|
2305
|
+
else {
|
|
2306
|
+
// Return a ResolveError to the Desktop Agent because no valid app was found to handle the intent
|
|
2307
|
+
// Perhaps should be a user notification
|
|
2308
|
+
Logger.warn(`No app found for FDC3 intent request. Intent=\"${intentName}\" Optional Target App=\"${target}\"`);
|
|
2309
|
+
const raiseIntentResult = {
|
|
2310
|
+
type: "raiseIntent",
|
|
2311
|
+
error: ResolveError.NoAppsFound,
|
|
2312
|
+
};
|
|
2313
|
+
setActionResult(actionId, raiseIntentResult);
|
|
2314
|
+
}
|
|
2315
|
+
})
|
|
2316
|
+
// triggered by raiseIntent to handle UI Resolver response -- see cmd.run(resolveIntentApps...)
|
|
2317
|
+
.addCase(actions.handleUIResolutionResponse, (state, action, cmd) => {
|
|
2318
|
+
const fsa = action.payload;
|
|
2319
|
+
const { actionId, resolverResolution, pendingMessage } = fsa;
|
|
2320
|
+
const { intent, windowName, selectedApp, originatingAppWindow } = resolverResolution;
|
|
2321
|
+
let updatedPendingIntentMessage = unImmer(pendingMessage);
|
|
2322
|
+
state.resolver.apps.intentResolutionInProgress = false;
|
|
2323
|
+
state.resolver.apps.intentResolutionCurrentActionId = null;
|
|
2324
|
+
// if UI resolution returned a selected intent name, use if for the pending intent
|
|
2325
|
+
if (intent) {
|
|
2326
|
+
updatedPendingIntentMessage.payload.intent = intent;
|
|
2327
|
+
}
|
|
2328
|
+
// if resolve error, which might be due to user cancel, then don't resolve the intent
|
|
2329
|
+
if (resolverResolution.error) {
|
|
2330
|
+
Logger.warn(`Interop.resolver.handleUIResolutionResponse. ${resolverResolution.error}`, {
|
|
2331
|
+
state,
|
|
2332
|
+
action,
|
|
2333
|
+
resolverResolution,
|
|
2334
|
+
});
|
|
2335
|
+
const raiseIntentResult = {
|
|
2336
|
+
type: "raiseIntent",
|
|
2337
|
+
error: resolverResolution.error,
|
|
2338
|
+
};
|
|
2339
|
+
setActionResult(actionId, raiseIntentResult);
|
|
2340
|
+
// if app is already open, then immediately broadcast the intent to that app
|
|
2341
|
+
}
|
|
2342
|
+
else if (windowName) {
|
|
2343
|
+
const uuids = uuidsFromWindowName({ clients: state.resolver.clients, windowName });
|
|
2344
|
+
if (uuids.length) {
|
|
2345
|
+
const uuid = uuids[0];
|
|
2346
|
+
const interopBroadcast = Object.assign(Object.assign({}, updatedPendingIntentMessage), { meta: Object.assign(Object.assign({}, updatedPendingIntentMessage.meta), { pendingActionId: actionId,
|
|
2347
|
+
// Ensure that the broadcast goes to the specific app selected by the end user
|
|
2348
|
+
to: uuid }) });
|
|
2349
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.action(actions.broadcast(interopBroadcast));
|
|
2350
|
+
// no setActionResult here because a successful result won't be sent until initial intent message is broadcast to the app client
|
|
2351
|
+
}
|
|
2352
|
+
else {
|
|
2353
|
+
Logger.error(`Interop.resolver.handleUIResolutionResponse client ${windowName} not found. App may have been terminated during intent resolution`);
|
|
2354
|
+
const raiseIntentResult = {
|
|
2355
|
+
type: "raiseIntent",
|
|
2356
|
+
error: ResolveError.NoAppsFound,
|
|
2357
|
+
};
|
|
2358
|
+
setActionResult(actionId, raiseIntentResult);
|
|
2359
|
+
}
|
|
2360
|
+
}
|
|
2361
|
+
else if (selectedApp && selectedApp.appId) {
|
|
2362
|
+
// else open the app selected by the end user. The intent will be queued by `openedApp` until the app subscribes for the intent.
|
|
2363
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(openApp, {
|
|
2364
|
+
args: [
|
|
2365
|
+
{
|
|
2366
|
+
actionId,
|
|
2367
|
+
appId: selectedApp.appId,
|
|
2368
|
+
pendingMessage: updatedPendingIntentMessage,
|
|
2369
|
+
originatingAppId: originatingAppWindow !== null && originatingAppWindow !== void 0 ? originatingAppWindow : "undefined",
|
|
2370
|
+
originatingAppWindow: originatingAppWindow !== null && originatingAppWindow !== void 0 ? originatingAppWindow : "undefined",
|
|
2371
|
+
appDefinitions: unImmer(state.resolver.apps.definitions),
|
|
2372
|
+
},
|
|
2373
|
+
],
|
|
2374
|
+
successActionCreator: actions.openedApp,
|
|
2375
|
+
});
|
|
2376
|
+
}
|
|
2377
|
+
else {
|
|
2378
|
+
Logger.error("No appId returned from UI resolver");
|
|
2379
|
+
}
|
|
2380
|
+
Logger.system.debug("Interop.resolver.handleUIResolutionResponse resolution", {
|
|
2381
|
+
state,
|
|
2382
|
+
action,
|
|
2383
|
+
resolverResolution,
|
|
2384
|
+
});
|
|
2385
|
+
})
|
|
2386
|
+
.addCase(actions.subscribeIntent, (state, action, cmd) => {
|
|
2387
|
+
var _a, _b, _c, _d;
|
|
2388
|
+
const fsa = action.payload;
|
|
2389
|
+
const { intent: intentName } = fsa.payload;
|
|
2390
|
+
const { uuid } = fsa.meta;
|
|
2391
|
+
const client = state.resolver.clients[uuid];
|
|
2392
|
+
client.subscriptions.globals.intents[intentName] = true;
|
|
2393
|
+
const appDefinition = (_a = state.resolver.apps.definitions[client.appId]) !== null && _a !== void 0 ? _a : {};
|
|
2394
|
+
// All apps should have AppD entries that identify the intents that they will listen for but
|
|
2395
|
+
// if not then provide a clear message for app developers.
|
|
2396
|
+
const intentIsRegisteredInAppD = (_b = appDefinition === null || appDefinition === void 0 ? void 0 : appDefinition.intents) === null || _b === void 0 ? void 0 : _b.some((intent) => intent.name === intentName);
|
|
2397
|
+
if (!intentIsRegisteredInAppD) {
|
|
2398
|
+
const friendlyName = appDefinition ? getFriendlyName(appDefinition) : client.appId;
|
|
2399
|
+
const logMessage = `"${friendlyName}" added intent listener for "${intentName}" which isn't in its AppD entry. Intents will be processed but an AppD entry must include "${intentName}" for full functionality.`;
|
|
2400
|
+
Logger.system.error(logMessage);
|
|
2401
|
+
const messageTitle = "FDC3 AppD Config Issue";
|
|
2402
|
+
const messageDetails = `"${friendlyName}" added intent listener for "${intentName}" which isn't in its AppD entry. Check the central logger for more information.`;
|
|
2403
|
+
const devModeOnly = true;
|
|
2404
|
+
cmd === null || cmd === void 0 ? void 0 : cmd.run(notifyEndUser, {
|
|
2405
|
+
args: [messageTitle, messageDetails, devModeOnly],
|
|
2406
|
+
});
|
|
2407
|
+
}
|
|
2408
|
+
// find the matching intent in app definitions
|
|
2409
|
+
let matchingIntent = (_d = (_c = state.resolver.apps.definitions[client.appId]) === null || _c === void 0 ? void 0 : _c.intents) === null || _d === void 0 ? void 0 : _d.find((intent) => intent.name === intentName);
|
|
2410
|
+
// each time a listener is added, mark it so cleanAndVerify can later confirm all the expected listeners were added
|
|
2411
|
+
if (matchingIntent) {
|
|
2412
|
+
matchingIntent.appListenerAdded = true;
|
|
2413
|
+
}
|
|
2414
|
+
releaseQueuedMessages({
|
|
2415
|
+
state,
|
|
2416
|
+
uuid,
|
|
2417
|
+
cmd,
|
|
2418
|
+
type: "raiseIntent",
|
|
2419
|
+
intent: intentName,
|
|
2420
|
+
});
|
|
2421
|
+
})
|
|
2422
|
+
.addCase(actions.unsubscribeIntent, (state, action) => {
|
|
2423
|
+
const fsa = action.payload;
|
|
2424
|
+
const { intent: intentName } = fsa.payload;
|
|
2425
|
+
const { uuid } = fsa.meta;
|
|
2426
|
+
const client = state.resolver.clients[uuid];
|
|
2427
|
+
delete client.subscriptions.globals.intents[intentName];
|
|
2428
|
+
})
|
|
2429
|
+
.addCase(actions.addAppDefinitions, (state, action) => {
|
|
2430
|
+
const fsa = action.payload;
|
|
2431
|
+
const { apps } = fsa.payload;
|
|
2432
|
+
Object.values(apps).forEach((definition) => {
|
|
2433
|
+
state.resolver.apps.definitions[definition.appId] = definition;
|
|
2434
|
+
state.resolver.intents = appendedIntentData(state.resolver, definition);
|
|
2435
|
+
});
|
|
2436
|
+
Logger.system.debug("Interop.resolver.addAppDefinitions result", state.resolver.apps.definitions);
|
|
2437
|
+
})
|
|
2438
|
+
.addCase(actions.removeAppDefinitions, (state, action) => {
|
|
2439
|
+
const fsa = action.payload;
|
|
2440
|
+
const { apps } = fsa.payload;
|
|
2441
|
+
const { definitions } = state.resolver.apps;
|
|
2442
|
+
apps.forEach((appId) => {
|
|
2443
|
+
delete definitions[appId];
|
|
2444
|
+
});
|
|
2445
|
+
})
|
|
2446
|
+
.addCase(actions.registerUIResolver, (state, action) => {
|
|
2447
|
+
const fsa = action.payload;
|
|
2448
|
+
const { uuid } = fsa.meta;
|
|
2449
|
+
state.resolver.config.registeredUIResolver = uuid;
|
|
2450
|
+
})
|
|
2451
|
+
.addCase(actions.resetDetectedLoopState, (state, action) => {
|
|
2452
|
+
const { senderUuid, newTimerId } = action.payload;
|
|
2453
|
+
const { loopDetectionMap } = state.resolver;
|
|
2454
|
+
let loopDetectionRecord = loopDetectionMap[senderUuid];
|
|
2455
|
+
loopDetectionRecord.timerId = newTimerId;
|
|
2456
|
+
loopDetectionRecord.count = 0;
|
|
2457
|
+
loopDetectionRecord.loopNotificationIssued = false;
|
|
2458
|
+
Logger.system.debug("Interop.resolver.resetDetectedLoopState record", loopDetectionRecord);
|
|
2459
|
+
})
|
|
2460
|
+
.addCase(actions.addIntentListenerMaxInitializationTimeout, (state, action) => {
|
|
2461
|
+
state.resolver.addIntentListenerMaxInitializationTimeout = action.payload;
|
|
2462
|
+
Logger.system.debug("Interop.resolver.addIntentListenerMaxInitializationTimeout added", action.payload);
|
|
2463
|
+
});
|
|
2464
|
+
};
|
|
2465
|
+
// Used by Live Mocha tests to control state or simulate user actions. See fdc3Tests.js for example where Testpoint.triggerAction causes this onAction() to fire.
|
|
2466
|
+
testPoint.onAction("fdc3.resolver.disableCleanupStaleChannels", () => {
|
|
2467
|
+
testPoint.state.disableCleanupStaleChannels = true;
|
|
2468
|
+
});
|
|
2469
|
+
testPoint.onAction("fdc3.resolver.reenableCleanupStaleChannels", () => {
|
|
2470
|
+
testPoint.state.disableCleanupStaleChannels = false;
|
|
2471
|
+
});
|
|
2472
|
+
export default {
|
|
2473
|
+
getInitialState,
|
|
2474
|
+
addReducerCases,
|
|
2475
|
+
actions,
|
|
2476
|
+
workspaceUuid,
|
|
2477
|
+
initialize: (store) => {
|
|
2478
|
+
store;
|
|
2479
|
+
},
|
|
2480
|
+
};
|
|
2481
|
+
//# sourceMappingURL=resolver.js.map
|