studiokit-scaffolding-js 7.0.12-next.1.3 → 7.0.12-next.2.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.
Files changed (258) hide show
  1. package/lib/components/ActionList.js +164 -37
  2. package/lib/components/AlertDialog.js +128 -12
  3. package/lib/components/AlertWithIcon.js +88 -29
  4. package/lib/components/ConnectedModal.js +35 -12
  5. package/lib/components/Dropdowns/GroupsDropdown.js +63 -45
  6. package/lib/components/Dropdowns/ManagedNavDropdown.js +92 -67
  7. package/lib/components/Dropdowns/UserDropdown.js +105 -24
  8. package/lib/components/Dropdowns/index.js +4 -10
  9. package/lib/components/EntityOwnerList.js +47 -21
  10. package/lib/components/Error.js +101 -12
  11. package/lib/components/ErrorBoundary.js +127 -38
  12. package/lib/components/ErrorMessage.js +39 -12
  13. package/lib/components/Forms/DateField.js +56 -45
  14. package/lib/components/Forms/TimeField.js +76 -45
  15. package/lib/components/Forms/index.js +3 -5
  16. package/lib/components/Groups/CreateEditCopySaveButtons.js +109 -14
  17. package/lib/components/Groups/ExternalGroups/Attach.js +206 -151
  18. package/lib/components/Groups/ExternalGroups/Table.js +176 -48
  19. package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
  20. package/lib/components/Groups/RosterSyncInfo.js +142 -23
  21. package/lib/components/HOC/AccessibleAppComponent.js +88 -72
  22. package/lib/components/HOC/ActivityRequiredComponent.js +68 -33
  23. package/lib/components/HOC/AsyncComponent.js +49 -41
  24. package/lib/components/HOC/AuthenticatedComponent.js +55 -44
  25. package/lib/components/HOC/CollectionComponent.js +154 -104
  26. package/lib/components/HOC/CollectionFirstItemComponent.js +45 -40
  27. package/lib/components/HOC/CollectionItemComponent.js +152 -100
  28. package/lib/components/HOC/ConnectedModalComponent.js +87 -69
  29. package/lib/components/HOC/DataDependentComponent.js +26 -27
  30. package/lib/components/HOC/EntityComponent.js +57 -53
  31. package/lib/components/HOC/FullscreenModalComponent.js +139 -108
  32. package/lib/components/HOC/GroupActivityRequiredComponent.js +27 -20
  33. package/lib/components/HOC/GuidComponent.js +20 -20
  34. package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +32 -29
  35. package/lib/components/HOC/ModelErrorRedirectComponent.js +37 -39
  36. package/lib/components/HOC/SearchPersistorComponent.js +237 -173
  37. package/lib/components/HOC/UnauthenticatedComponent.js +32 -30
  38. package/lib/components/HOC/UserComponent.js +6 -8
  39. package/lib/components/Icons/IconAlphaList.js +28 -8
  40. package/lib/components/Icons/IconExternalUser.js +28 -8
  41. package/lib/components/Icons/IconImpersonation.js +28 -8
  42. package/lib/components/Icons/IconStopImpersonating.js +28 -8
  43. package/lib/components/Icons/IconTable.js +29 -9
  44. package/lib/components/Icons/IconTableDeleteCol.js +28 -8
  45. package/lib/components/Icons/IconTableDeleteRow.js +28 -8
  46. package/lib/components/Icons/IconTableInsertCol.js +28 -8
  47. package/lib/components/Icons/IconTableInsertRow.js +28 -8
  48. package/lib/components/Impersonation/Button.js +71 -16
  49. package/lib/components/Impersonation/Link.js +72 -16
  50. package/lib/components/Impersonation/UserDetail.js +60 -11
  51. package/lib/components/Loading.js +23 -8
  52. package/lib/components/LockDownBrowser/Check.js +188 -51
  53. package/lib/components/LockDownBrowser/ExitButton.js +22 -13
  54. package/lib/components/LockDownBrowser/Launch.js +64 -64
  55. package/lib/components/Lti/Confirm.js +147 -14
  56. package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +165 -36
  57. package/lib/components/Lti/Launch.js +99 -25
  58. package/lib/components/Lti/LaunchGroup.js +81 -16
  59. package/lib/components/ManageTable.js +304 -90
  60. package/lib/components/ManageTableNoDataComponent.js +38 -7
  61. package/lib/components/NewVersionAlert.js +76 -49
  62. package/lib/components/NotFound.js +81 -11
  63. package/lib/components/Notifications.js +179 -129
  64. package/lib/components/PaginationNextButton.js +28 -9
  65. package/lib/components/PaginationPreviousButton.js +28 -9
  66. package/lib/components/Quill/CustomToolbar.js +427 -222
  67. package/lib/components/Quill/Formats/Image.js +67 -67
  68. package/lib/components/Quill/Formats/List.js +38 -47
  69. package/lib/components/Quill/Formats/Video.js +23 -26
  70. package/lib/components/Quill/ImageDropModule.js +136 -114
  71. package/lib/components/Quill/ImageWarning.js +41 -12
  72. package/lib/components/Quill/ImageWithAltTextModal.js +420 -89
  73. package/lib/components/Quill/Specs/CustomImageSpec.js +32 -31
  74. package/lib/components/Quill/Specs/CustomVideoSpec.js +22 -23
  75. package/lib/components/Quill/TableModule/Blots/BaseTableBlot.js +89 -97
  76. package/lib/components/Quill/TableModule/Blots/TableBlot.js +47 -50
  77. package/lib/components/Quill/TableModule/Blots/TableBodyBlot.js +48 -51
  78. package/lib/components/Quill/TableModule/Blots/TableCellBlot.js +219 -224
  79. package/lib/components/Quill/TableModule/Blots/TableContainer.js +75 -86
  80. package/lib/components/Quill/TableModule/Blots/TableRowBlot.js +70 -73
  81. package/lib/components/Quill/TableModule/constants.js +40 -42
  82. package/lib/components/Quill/TableModule/index.js +357 -305
  83. package/lib/components/Quill/TableModule/utils.js +39 -48
  84. package/lib/components/Quill/accessibilityFix.js +219 -223
  85. package/lib/components/Quill/index.js +30 -33
  86. package/lib/components/RefreshIndicator/Bordered.js +44 -10
  87. package/lib/components/RefreshIndicator/Inline.js +43 -12
  88. package/lib/components/RefreshIndicator/index.js +257 -62
  89. package/lib/components/SearchControls.js +211 -14
  90. package/lib/components/SentryRoute.js +5 -7
  91. package/lib/components/Tables/RoleFilter.js +66 -38
  92. package/lib/components/Tables/TextFilter.js +58 -18
  93. package/lib/components/UserRoles/Add.js +193 -99
  94. package/lib/components/UserRoles/Context.js +3 -6
  95. package/lib/components/UserRoles/RoleCell.js +176 -75
  96. package/lib/components/UserRoles/Select.js +151 -20
  97. package/lib/components/UserRoles/Table.js +215 -82
  98. package/lib/components/UserRoles/index.js +526 -386
  99. package/lib/config/eslint/index.js +26 -29
  100. package/lib/config/eslint/lib/order.js +21 -28
  101. package/lib/config/eslint/lib/prettier.js +15 -19
  102. package/lib/config/eslint/lib/typescript.js +87 -113
  103. package/lib/config/eslint/react.js +18 -15
  104. package/lib/constants/baseActivity.js +26 -28
  105. package/lib/constants/baseRole.js +10 -12
  106. package/lib/constants/configuration.js +43 -55
  107. package/lib/constants/externalProviderType.js +6 -8
  108. package/lib/constants/fetchErrorData.js +10 -12
  109. package/lib/constants/index.js +13 -15
  110. package/lib/constants/lockDownBrowser.js +23 -25
  111. package/lib/constants/mockData.js +370 -300
  112. package/lib/constants/modelStatus.js +11 -13
  113. package/lib/constants/notificationType.js +8 -10
  114. package/lib/constants/operatingSystem.js +8 -10
  115. package/lib/constants/shard.js +7 -9
  116. package/lib/constants/table.js +18 -22
  117. package/lib/constants/tier.js +8 -10
  118. package/lib/constants/userRole.js +11 -8
  119. package/lib/endpointMappings.js +191 -182
  120. package/lib/hooks/useCollection.js +79 -65
  121. package/lib/hooks/useCollectionConfiguration.js +220 -80
  122. package/lib/hooks/useCollectionItem.js +151 -57
  123. package/lib/hooks/useGuid.js +16 -9
  124. package/lib/hooks/usePrevious.js +14 -13
  125. package/lib/index.js +11 -26
  126. package/lib/redux/actionCreator.js +44 -35
  127. package/lib/redux/actions/AuthAction.js +45 -32
  128. package/lib/redux/actions/ModalAction.js +6 -8
  129. package/lib/redux/actions/ModelAction.js +95 -43
  130. package/lib/redux/actions/NotificationAction.js +6 -8
  131. package/lib/redux/actions/SearchAction.js +5 -7
  132. package/lib/redux/actions/index.js +6 -8
  133. package/lib/redux/configureReducers.js +48 -46
  134. package/lib/redux/configureStore.js +77 -91
  135. package/lib/redux/helpers.js +2 -5
  136. package/lib/redux/reducers/authReducer.js +44 -43
  137. package/lib/redux/reducers/index.js +7 -14
  138. package/lib/redux/reducers/modalsReducer.js +43 -31
  139. package/lib/redux/reducers/modelsReducer.js +131 -137
  140. package/lib/redux/reducers/notificationsReducer.js +20 -20
  141. package/lib/redux/reducers/searchReducer.js +13 -13
  142. package/lib/redux/sagas/appInsightsSaga.js +19 -21
  143. package/lib/redux/sagas/authSaga.js +248 -234
  144. package/lib/redux/sagas/caliperSaga.js +142 -131
  145. package/lib/redux/sagas/clockOffsetSaga.js +29 -32
  146. package/lib/redux/sagas/configurationSaga.js +8 -10
  147. package/lib/redux/sagas/downtimeApiErrorSaga.js +16 -19
  148. package/lib/redux/sagas/errorSaga.js +23 -24
  149. package/lib/redux/sagas/googleAnalyticsSaga.js +24 -27
  150. package/lib/redux/sagas/identityProviderSaga.js +19 -21
  151. package/lib/redux/sagas/initialDataLoadSaga.js +34 -31
  152. package/lib/redux/sagas/lockDownBrowserErrorSaga.js +25 -22
  153. package/lib/redux/sagas/modelFetchSaga.js +302 -286
  154. package/lib/redux/sagas/noStoreSaga.js +60 -61
  155. package/lib/redux/sagas/postLoginDataSaga.js +37 -32
  156. package/lib/redux/sagas/postLoginRedirectSaga.js +22 -27
  157. package/lib/redux/sagas/rootSaga.js +77 -60
  158. package/lib/redux/sagas/sentrySaga.js +25 -28
  159. package/lib/redux/sagas/userIdSaga.js +13 -15
  160. package/lib/services/codeProviderService.js +21 -21
  161. package/lib/services/dateService.js +6 -8
  162. package/lib/services/documentService.js +10 -11
  163. package/lib/services/fetchService.js +103 -95
  164. package/lib/services/persistenceService.js +27 -30
  165. package/lib/services/ticketProviderService.js +25 -25
  166. package/lib/services/tokenPersistenceService.js +8 -10
  167. package/lib/services/windowService.js +14 -16
  168. package/lib/startup.js +110 -101
  169. package/lib/types/AppConfiguration.js +2 -2
  170. package/lib/types/Artifact.js +7 -9
  171. package/lib/types/BaseReduxState.js +2 -2
  172. package/lib/types/Client.js +2 -2
  173. package/lib/types/Collection.js +2 -2
  174. package/lib/types/Configuration.js +2 -2
  175. package/lib/types/DeepLinkingResponseRequest.js +2 -2
  176. package/lib/types/DeletableModel.js +2 -2
  177. package/lib/types/Event.js +2 -2
  178. package/lib/types/ExternalGroup.js +2 -2
  179. package/lib/types/ExternalProvider.js +2 -2
  180. package/lib/types/ExternalTerm.js +2 -2
  181. package/lib/types/Group.js +2 -2
  182. package/lib/types/IdentityProvider.js +2 -2
  183. package/lib/types/LtiLaunch.js +2 -2
  184. package/lib/types/NameOnlyEntity.js +2 -2
  185. package/lib/types/Notification.js +2 -2
  186. package/lib/types/OptionalRecord.js +2 -2
  187. package/lib/types/OwnerSchedule.js +2 -2
  188. package/lib/types/PropertyOfType.js +2 -2
  189. package/lib/types/Quill.js +2 -2
  190. package/lib/types/RoleDescription.js +2 -2
  191. package/lib/types/Search.js +2 -2
  192. package/lib/types/SimpleLocation.js +2 -2
  193. package/lib/types/UniTime.js +2 -2
  194. package/lib/types/User.js +2 -2
  195. package/lib/types/UserRole.js +2 -2
  196. package/lib/types/auth/AuthState.js +2 -2
  197. package/lib/types/auth/CasV1LoginRequestBody.js +2 -2
  198. package/lib/types/auth/ClientCredentials.js +2 -2
  199. package/lib/types/auth/CodeProviderService.js +2 -2
  200. package/lib/types/auth/LocalLoginRequestBody.js +2 -2
  201. package/lib/types/auth/TicketProviderService.js +2 -2
  202. package/lib/types/auth/TokenPersistenceService.js +2 -2
  203. package/lib/types/auth/index.js +8 -10
  204. package/lib/types/externals.d.js +2 -0
  205. package/lib/types/index.js +29 -31
  206. package/lib/types/net/EndpointConfig.js +2 -2
  207. package/lib/types/net/EndpointMapping.js +2 -2
  208. package/lib/types/net/EndpointMappings.js +2 -2
  209. package/lib/types/net/ErrorHandler.js +2 -2
  210. package/lib/types/net/FetchConfig.js +2 -2
  211. package/lib/types/net/FetchErrorData.js +6 -8
  212. package/lib/types/net/FetchResult.js +2 -2
  213. package/lib/types/net/HTTPMethod.js +2 -2
  214. package/lib/types/net/HTTPStatusCode.js +12 -14
  215. package/lib/types/net/Metadata.js +2 -2
  216. package/lib/types/net/Model.js +2 -2
  217. package/lib/types/net/ModelCollection.js +2 -2
  218. package/lib/types/net/ModelsState.js +2 -2
  219. package/lib/types/net/OAuthToken.js +2 -2
  220. package/lib/types/net/OAuthTokenOrNull.js +2 -2
  221. package/lib/types/net/TokenAccessFunction.js +2 -2
  222. package/lib/types/net/index.js +17 -19
  223. package/lib/utils/baseActivity.js +83 -85
  224. package/lib/utils/baseRole.js +32 -36
  225. package/lib/utils/collection.js +403 -297
  226. package/lib/utils/cookies.js +19 -23
  227. package/lib/utils/date.js +188 -205
  228. package/lib/utils/dom.js +130 -131
  229. package/lib/utils/domainIdentifier.js +4 -8
  230. package/lib/utils/entityUserRole.js +2 -5
  231. package/lib/utils/error.js +14 -19
  232. package/lib/utils/events.js +32 -31
  233. package/lib/utils/externalGroup.js +20 -25
  234. package/lib/utils/externalProviders.js +4 -7
  235. package/lib/utils/externalTerms.js +6 -6
  236. package/lib/utils/fetch.js +168 -176
  237. package/lib/utils/group.js +14 -11
  238. package/lib/utils/groupDates.js +38 -46
  239. package/lib/utils/groupRoles.js +23 -32
  240. package/lib/utils/lockDownBrowser.js +12 -15
  241. package/lib/utils/logger.js +23 -28
  242. package/lib/utils/lti.js +4 -7
  243. package/lib/utils/model.js +28 -43
  244. package/lib/utils/number.js +9 -13
  245. package/lib/utils/promise.js +23 -26
  246. package/lib/utils/quill.js +55 -60
  247. package/lib/utils/route.js +52 -60
  248. package/lib/utils/search.js +72 -87
  249. package/lib/utils/shard.js +33 -42
  250. package/lib/utils/sort.js +47 -50
  251. package/lib/utils/string.js +10 -12
  252. package/lib/utils/table.js +29 -33
  253. package/lib/utils/timezone.js +7 -12
  254. package/lib/utils/url.js +130 -144
  255. package/lib/utils/user.js +54 -64
  256. package/lib/utils/userAgent.js +7 -14
  257. package/lib/utils/userRole.js +36 -39
  258. package/package.json +17 -3
@@ -1,183 +1,194 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = caliperSaga;
4
- const effects_1 = require("redux-saga/effects");
5
- const studiokit_caliper_js_1 = require("studiokit-caliper-js");
6
- const configuration_1 = require("../../constants/configuration");
7
- const persistenceService_1 = require("../../services/persistenceService");
8
- const date_1 = require("../../utils/date");
9
- const actionCreator_1 = require("../actionCreator");
10
- const actions_1 = require("../actions");
1
+ import { call, cancel, delay, fork, race, take } from 'redux-saga/effects';
2
+ import { BrowserCaliperService } from 'studiokit-caliper-js';
3
+ import { getAppConfig, getShardConfig } from '../../constants/configuration';
4
+ import { persistenceService } from '../../services/persistenceService';
5
+ import { getServerNowUtc } from '../../utils/date';
6
+ import { dispatchModelFetchRequest } from '../actionCreator';
7
+ import { AUTH_ACTION_TYPE, isModelFetchResultAction, isTransientModelFetchErrorAction, isTransientModelFetchResultAction } from '../actions';
8
+
11
9
  //#region Local Variables
10
+
12
11
  let service;
13
12
  let caliperToken;
13
+
14
14
  //#endregion Local Variables
15
+
15
16
  //#region CaliperService Helpers
17
+
16
18
  function initializeCaliperService(shardConfig) {
17
- const appConfig = (0, configuration_1.getAppConfig)();
18
- if (!shardConfig.caliperEventStoreHostname) {
19
- return;
20
- }
21
- const sensorOptions = Object.assign({}, appConfig.CALIPER_EVENT_STORE_OPTIONS, {
22
- hostname: shardConfig.caliperEventStoreHostname
23
- });
24
- const options = {
25
- sensorId: appConfig.CALIPER_SENSOR_ID,
26
- sensorOptions,
27
- appId: appConfig.CALIPER_SENSOR_APP_ID,
28
- appName: appConfig.CALIPER_SENSOR_APP_NAME,
29
- getToken: function () {
30
- return new Promise((resolve, reject) => {
31
- if (caliperToken) {
32
- resolve(caliperToken);
33
- }
34
- else {
35
- reject(new Error('`caliperToken` is undefined'));
36
- }
37
- });
38
- },
39
- // disable auto send, the saga will handle this
40
- autoSend: false
41
- };
42
- const service = new studiokit_caliper_js_1.BrowserCaliperService(options);
43
- return service;
19
+ const appConfig = getAppConfig();
20
+ if (!shardConfig.caliperEventStoreHostname) {
21
+ return;
22
+ }
23
+ const sensorOptions = Object.assign({}, appConfig.CALIPER_EVENT_STORE_OPTIONS, {
24
+ hostname: shardConfig.caliperEventStoreHostname
25
+ });
26
+ const options = {
27
+ sensorId: appConfig.CALIPER_SENSOR_ID,
28
+ sensorOptions,
29
+ appId: appConfig.CALIPER_SENSOR_APP_ID,
30
+ appName: appConfig.CALIPER_SENSOR_APP_NAME,
31
+ getToken: function () {
32
+ return new Promise((resolve, reject) => {
33
+ if (caliperToken) {
34
+ resolve(caliperToken);
35
+ } else {
36
+ reject(new Error('`caliperToken` is undefined'));
37
+ }
38
+ });
39
+ },
40
+ // disable auto send, the saga will handle this
41
+ autoSend: false
42
+ };
43
+ const service = new BrowserCaliperService(options);
44
+ return service;
44
45
  }
45
46
  function setCaliperPerson(userData) {
46
- var _a, _b;
47
- const appConfig = (0, configuration_1.getAppConfig)();
48
- const shardConfig = (0, configuration_1.getShardConfig)();
49
- const personNamespace = shardConfig.caliperPersonNamespace;
50
- const id = `${personNamespace}${userData.puid}`;
51
- const extensions = {};
52
- extensions[`${appConfig.CALIPER_EXTENSIONS_NAMESPACE}.userId`] = userData.id;
53
- service.setPerson(id, (_a = userData.firstName) !== null && _a !== void 0 ? _a : undefined, (_b = userData.lastName) !== null && _b !== void 0 ? _b : undefined, extensions);
54
- return Promise.resolve();
47
+ const appConfig = getAppConfig();
48
+ const shardConfig = getShardConfig();
49
+ const personNamespace = shardConfig.caliperPersonNamespace;
50
+ const id = `${personNamespace}${userData.puid}`;
51
+ const extensions = {};
52
+ extensions[`${appConfig.CALIPER_EXTENSIONS_NAMESPACE}.userId`] = userData.id;
53
+ service.setPerson(id, userData.firstName ?? undefined, userData.lastName ?? undefined, extensions);
54
+ return Promise.resolve();
55
55
  }
56
56
  function startCaliperSession() {
57
- const appConfig = (0, configuration_1.getAppConfig)();
58
- const extensions = {};
59
- extensions[`${appConfig.CALIPER_EXTENSIONS_NAMESPACE}.userAgent`] = navigator.userAgent;
60
- service.startSession(extensions);
61
- return Promise.resolve();
57
+ const appConfig = getAppConfig();
58
+ const extensions = {};
59
+ extensions[`${appConfig.CALIPER_EXTENSIONS_NAMESPACE}.userAgent`] = navigator.userAgent;
60
+ service.startSession(extensions);
61
+ return Promise.resolve();
62
62
  }
63
63
  function endCaliperSession() {
64
- service.endSession();
65
- return Promise.resolve();
64
+ service.endSession();
65
+ return Promise.resolve();
66
66
  }
67
67
  function setPersonAndStartCaliperSession(userData) {
68
- void setCaliperPerson(userData);
69
- void startCaliperSession();
68
+ void setCaliperPerson(userData);
69
+ void startCaliperSession();
70
70
  }
71
71
  function isTokenExpired(caliperToken) {
72
- return new Date(caliperToken.expires) <= (0, date_1.getServerNowUtc)();
72
+ return new Date(caliperToken.expires) <= getServerNowUtc();
73
73
  }
74
+
74
75
  //#endregion CaliperService Helpers
76
+
75
77
  /**
76
78
  * Load the persisted `caliperToken`, if any. This token is persisted by the CaliperService,
77
79
  * but we load it in order to check expiry.
78
80
  */
79
81
  function* loadToken() {
80
- const caliperToken = yield (0, effects_1.call)(persistenceService_1.persistenceService.getPersistedCaliperToken);
81
- if (caliperToken)
82
- return caliperToken;
83
- return undefined;
82
+ const caliperToken = yield call(persistenceService.getPersistedCaliperToken);
83
+ if (caliperToken) return caliperToken;
84
+ return undefined;
84
85
  }
86
+
85
87
  /**
86
88
  * Load a new `caliperToken` from the API. Returns `undefined` if the data request fails.
87
89
  */
88
90
  function* getToken() {
89
- (0, actionCreator_1.dispatchModelFetchRequest)({
90
- modelName: 'caliperToken',
91
- noStore: true
92
- });
93
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
94
- const { receivedResult, failedResult } = yield (0, effects_1.race)({
95
- receivedResult: (0, effects_1.take)((action) => (0, actions_1.isTransientModelFetchResultAction)(action) && action.modelPath === 'caliperToken'),
96
- failedResult: (0, effects_1.take)((action) => (0, actions_1.isTransientModelFetchErrorAction)(action) && action.modelPath === 'caliperToken')
97
- });
98
- if (receivedResult && receivedResult.data) {
99
- // convert to CaliperToken from OAuthToken
100
- const caliperToken = {
101
- accessToken: receivedResult.data.access_token,
102
- expires: receivedResult.data['.expires']
103
- };
104
- return caliperToken;
105
- }
106
- return undefined;
91
+ dispatchModelFetchRequest({
92
+ modelName: 'caliperToken',
93
+ noStore: true
94
+ });
95
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
96
+ const {
97
+ receivedResult,
98
+ failedResult
99
+ } = yield race({
100
+ receivedResult: take(action => isTransientModelFetchResultAction(action) && action.modelPath === 'caliperToken'),
101
+ failedResult: take(action => isTransientModelFetchErrorAction(action) && action.modelPath === 'caliperToken')
102
+ });
103
+ if (receivedResult && receivedResult.data) {
104
+ // convert to CaliperToken from OAuthToken
105
+ const caliperToken = {
106
+ accessToken: receivedResult.data.access_token,
107
+ expires: receivedResult.data['.expires']
108
+ };
109
+ return caliperToken;
110
+ }
111
+ return undefined;
107
112
  }
113
+
108
114
  /**
109
115
  * Calls `getToken`, but keeps retrying until a token is successfully loaded, using a back-off delay strategy.
110
116
  */
111
117
  function* getTokenWithRetry() {
112
- // get token
113
- let caliperToken = yield (0, effects_1.call)(getToken);
114
- // handle failing to load token
115
- let tryCount = 1;
116
- while (!caliperToken) {
117
- // back-off delay
118
- yield (0, effects_1.delay)(Math.min(1000 * 60, 2 ^ (tryCount * 100))); // 100, 200, 400...
119
- caliperToken = yield (0, effects_1.call)(getToken);
120
- tryCount++;
121
- }
122
- return caliperToken;
118
+ // get token
119
+ let caliperToken = yield call(getToken);
120
+ // handle failing to load token
121
+ let tryCount = 1;
122
+ while (!caliperToken) {
123
+ // back-off delay
124
+ yield delay(Math.min(1000 * 60, 2 ^ tryCount * 100)); // 100, 200, 400...
125
+ caliperToken = yield call(getToken);
126
+ tryCount++;
127
+ }
128
+ return caliperToken;
123
129
  }
130
+
124
131
  /**
125
132
  * Saga decorator for the `CaliperService.send` method
126
133
  */
127
134
  function* send() {
128
- try {
129
- yield (0, effects_1.call)(service.send);
130
- }
131
- catch (_a) {
132
- // catch error to avoid breaking the saga
133
- // ignore error since `CaliperService` already tracks send errors
134
- }
135
+ try {
136
+ yield call(service.send);
137
+ } catch {
138
+ // catch error to avoid breaking the saga
139
+ // ignore error since `CaliperService` already tracks send errors
140
+ }
135
141
  }
142
+
136
143
  /**
137
144
  * Saga decorator for the `CaliperService.send` method,
138
145
  * which will refresh the `caliperToken` if needed before calling `send`
139
146
  */
140
147
  function* sendWithTokenRefreshIfNeeded() {
141
- // refresh token, if needed
142
- if (!caliperToken || isTokenExpired(caliperToken)) {
143
- caliperToken = yield (0, effects_1.call)(getTokenWithRetry);
144
- }
145
- // send
146
- yield (0, effects_1.call)(send);
148
+ // refresh token, if needed
149
+ if (!caliperToken || isTokenExpired(caliperToken)) {
150
+ caliperToken = yield call(getTokenWithRetry);
151
+ }
152
+ // send
153
+ yield call(send);
147
154
  }
155
+
148
156
  /**
149
157
  * Saga fork implementing the "auto send" functionality from `CaliperService.
150
158
  * Calls `send` every 10 seconds.
151
159
  */
152
160
  function* autoSend() {
153
- while (true) {
154
- // try to send every 10 seconds
155
- yield (0, effects_1.delay)(10 * 1000);
156
- yield (0, effects_1.call)(sendWithTokenRefreshIfNeeded);
157
- }
161
+ while (true) {
162
+ // try to send every 10 seconds
163
+ yield delay(10 * 1000);
164
+ yield call(sendWithTokenRefreshIfNeeded);
165
+ }
158
166
  }
159
- function* caliperSaga() {
160
- // on app start, get the configuration
161
- const configurationResult = yield (0, effects_1.take)((action) => (0, actions_1.isModelFetchResultAction)(action) && action.modelPath === 'configuration');
162
- const configuration = configurationResult.data;
163
- // do not proceed if caliper is not enabled or is missing hostname
164
- if (!configuration.caliperEnabled || !configuration.caliperEventStoreHostname) {
165
- return;
166
- }
167
- // load persisted token, if any
168
- caliperToken = yield (0, effects_1.call)(loadToken);
169
- // initialize caliper service
170
- service = yield (0, effects_1.call)(initializeCaliperService, configuration);
171
- while (true) {
172
- // user is loaded and authenticated => can get token and can start session
173
- const userInfo = yield (0, effects_1.take)((action) => (0, actions_1.isModelFetchResultAction)(action) && action.modelPath === 'user.userInfo');
174
- const autoSendTask = yield (0, effects_1.fork)(autoSend);
175
- setPersonAndStartCaliperSession(userInfo.data);
176
- // user logs out => stop auto-send and end session
177
- yield (0, effects_1.take)(actions_1.AUTH_ACTION_TYPE.LOG_OUT_REQUESTED);
178
- yield (0, effects_1.cancel)(autoSendTask);
179
- void endCaliperSession();
180
- // attempt to send the session end event once, w/ no token refresh since logged out
181
- yield (0, effects_1.call)(send);
182
- }
167
+ export default function* caliperSaga() {
168
+ // on app start, get the configuration
169
+ const configurationResult = yield take(action => isModelFetchResultAction(action) && action.modelPath === 'configuration');
170
+ const configuration = configurationResult.data;
171
+ // do not proceed if caliper is not enabled or is missing hostname
172
+ if (!configuration.caliperEnabled || !configuration.caliperEventStoreHostname) {
173
+ return;
174
+ }
175
+
176
+ // load persisted token, if any
177
+ caliperToken = yield call(loadToken);
178
+ // initialize caliper service
179
+ service = yield call(initializeCaliperService, configuration);
180
+ while (true) {
181
+ // user is loaded and authenticated => can get token and can start session
182
+ const userInfo = yield take(action => isModelFetchResultAction(action) && action.modelPath === 'user.userInfo');
183
+ const autoSendTask = yield fork(autoSend);
184
+ setPersonAndStartCaliperSession(userInfo.data);
185
+
186
+ // user logs out => stop auto-send and end session
187
+ yield take(AUTH_ACTION_TYPE.LOG_OUT_REQUESTED);
188
+ yield cancel(autoSendTask);
189
+ void endCaliperSession();
190
+ // attempt to send the session end event once, w/ no token refresh since logged out
191
+ yield call(send);
192
+ }
183
193
  }
194
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWxsIiwiY2FuY2VsIiwiZGVsYXkiLCJmb3JrIiwicmFjZSIsInRha2UiLCJCcm93c2VyQ2FsaXBlclNlcnZpY2UiLCJnZXRBcHBDb25maWciLCJnZXRTaGFyZENvbmZpZyIsInBlcnNpc3RlbmNlU2VydmljZSIsImdldFNlcnZlck5vd1V0YyIsImRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QiLCJBVVRIX0FDVElPTl9UWVBFIiwiaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoRXJyb3JBY3Rpb24iLCJpc1RyYW5zaWVudE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24iLCJzZXJ2aWNlIiwiY2FsaXBlclRva2VuIiwiaW5pdGlhbGl6ZUNhbGlwZXJTZXJ2aWNlIiwic2hhcmRDb25maWciLCJhcHBDb25maWciLCJjYWxpcGVyRXZlbnRTdG9yZUhvc3RuYW1lIiwic2Vuc29yT3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsIkNBTElQRVJfRVZFTlRfU1RPUkVfT1BUSU9OUyIsImhvc3RuYW1lIiwib3B0aW9ucyIsInNlbnNvcklkIiwiQ0FMSVBFUl9TRU5TT1JfSUQiLCJhcHBJZCIsIkNBTElQRVJfU0VOU09SX0FQUF9JRCIsImFwcE5hbWUiLCJDQUxJUEVSX1NFTlNPUl9BUFBfTkFNRSIsImdldFRva2VuIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJFcnJvciIsImF1dG9TZW5kIiwic2V0Q2FsaXBlclBlcnNvbiIsInVzZXJEYXRhIiwicGVyc29uTmFtZXNwYWNlIiwiY2FsaXBlclBlcnNvbk5hbWVzcGFjZSIsImlkIiwicHVpZCIsImV4dGVuc2lvbnMiLCJDQUxJUEVSX0VYVEVOU0lPTlNfTkFNRVNQQUNFIiwic2V0UGVyc29uIiwiZmlyc3ROYW1lIiwidW5kZWZpbmVkIiwibGFzdE5hbWUiLCJzdGFydENhbGlwZXJTZXNzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50Iiwic3RhcnRTZXNzaW9uIiwiZW5kQ2FsaXBlclNlc3Npb24iLCJlbmRTZXNzaW9uIiwic2V0UGVyc29uQW5kU3RhcnRDYWxpcGVyU2Vzc2lvbiIsImlzVG9rZW5FeHBpcmVkIiwiRGF0ZSIsImV4cGlyZXMiLCJsb2FkVG9rZW4iLCJnZXRQZXJzaXN0ZWRDYWxpcGVyVG9rZW4iLCJtb2RlbE5hbWUiLCJub1N0b3JlIiwicmVjZWl2ZWRSZXN1bHQiLCJmYWlsZWRSZXN1bHQiLCJhY3Rpb24iLCJtb2RlbFBhdGgiLCJkYXRhIiwiYWNjZXNzVG9rZW4iLCJhY2Nlc3NfdG9rZW4iLCJnZXRUb2tlbldpdGhSZXRyeSIsInRyeUNvdW50IiwiTWF0aCIsIm1pbiIsInNlbmQiLCJzZW5kV2l0aFRva2VuUmVmcmVzaElmTmVlZGVkIiwiY2FsaXBlclNhZ2EiLCJjb25maWd1cmF0aW9uUmVzdWx0IiwiY29uZmlndXJhdGlvbiIsImNhbGlwZXJFbmFibGVkIiwidXNlckluZm8iLCJhdXRvU2VuZFRhc2siLCJMT0dfT1VUX1JFUVVFU1RFRCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9jYWxpcGVyU2FnYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYXNrIH0gZnJvbSAnQHJlZHV4LXNhZ2EvY29yZSdcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcbmltcG9ydCB7IFNhZ2FJdGVyYXRvciB9IGZyb20gJ3JlZHV4LXNhZ2EnXG5pbXBvcnQgeyBjYWxsLCBjYW5jZWwsIGRlbGF5LCBmb3JrLCByYWNlLCB0YWtlIH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJ1xuaW1wb3J0IHsgQnJvd3NlckNhbGlwZXJTZXJ2aWNlIH0gZnJvbSAnc3R1ZGlva2l0LWNhbGlwZXItanMnXG5pbXBvcnQge1xuXHRDYWxpcGVyU2Vuc29yT3B0aW9ucyxcblx0Q2FsaXBlclNlcnZpY2UsXG5cdENhbGlwZXJTZXJ2aWNlT3B0aW9ucyxcblx0Q2FsaXBlclRva2VuXG59IGZyb20gJ3N0dWRpb2tpdC1jYWxpcGVyLWpzL2xpYi90eXBlcydcbmltcG9ydCB7IGdldEFwcENvbmZpZywgZ2V0U2hhcmRDb25maWcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY29uZmlndXJhdGlvbidcbmltcG9ydCB7IHBlcnNpc3RlbmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3BlcnNpc3RlbmNlU2VydmljZSdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24sIEZldGNoUmVzdWx0LCBVc2VySW5mbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgZ2V0U2VydmVyTm93VXRjIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSdcbmltcG9ydCB7IGRpc3BhdGNoTW9kZWxGZXRjaFJlcXVlc3QgfSBmcm9tICcuLi9hY3Rpb25DcmVhdG9yJ1xuaW1wb3J0IHtcblx0QVVUSF9BQ1RJT05fVFlQRSxcblx0aXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uLFxuXHRpc1RyYW5zaWVudE1vZGVsRmV0Y2hFcnJvckFjdGlvbixcblx0aXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uXG59IGZyb20gJy4uL2FjdGlvbnMnXG5cbi8vI3JlZ2lvbiBMb2NhbCBWYXJpYWJsZXNcblxubGV0IHNlcnZpY2U6IENhbGlwZXJTZXJ2aWNlXG5sZXQgY2FsaXBlclRva2VuOiBDYWxpcGVyVG9rZW4gfCB1bmRlZmluZWRcblxuLy8jZW5kcmVnaW9uIExvY2FsIFZhcmlhYmxlc1xuXG4vLyNyZWdpb24gQ2FsaXBlclNlcnZpY2UgSGVscGVyc1xuXG5mdW5jdGlvbiBpbml0aWFsaXplQ2FsaXBlclNlcnZpY2Uoc2hhcmRDb25maWc6IENvbmZpZ3VyYXRpb24pIHtcblx0Y29uc3QgYXBwQ29uZmlnID0gZ2V0QXBwQ29uZmlnKClcblx0aWYgKCFzaGFyZENvbmZpZy5jYWxpcGVyRXZlbnRTdG9yZUhvc3RuYW1lKSB7XG5cdFx0cmV0dXJuXG5cdH1cblx0Y29uc3Qgc2Vuc29yT3B0aW9uczogQ2FsaXBlclNlbnNvck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBhcHBDb25maWcuQ0FMSVBFUl9FVkVOVF9TVE9SRV9PUFRJT05TLCB7XG5cdFx0aG9zdG5hbWU6IHNoYXJkQ29uZmlnLmNhbGlwZXJFdmVudFN0b3JlSG9zdG5hbWVcblx0fSlcblx0Y29uc3Qgb3B0aW9uczogUGFydGlhbDxDYWxpcGVyU2VydmljZU9wdGlvbnM+ID0ge1xuXHRcdHNlbnNvcklkOiBhcHBDb25maWcuQ0FMSVBFUl9TRU5TT1JfSUQsXG5cdFx0c2Vuc29yT3B0aW9ucyxcblx0XHRhcHBJZDogYXBwQ29uZmlnLkNBTElQRVJfU0VOU09SX0FQUF9JRCxcblx0XHRhcHBOYW1lOiBhcHBDb25maWcuQ0FMSVBFUl9TRU5TT1JfQVBQX05BTUUsXG5cdFx0Z2V0VG9rZW46IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdGlmIChjYWxpcGVyVG9rZW4pIHtcblx0XHRcdFx0XHRyZXNvbHZlKGNhbGlwZXJUb2tlbilcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZWplY3QobmV3IEVycm9yKCdgY2FsaXBlclRva2VuYCBpcyB1bmRlZmluZWQnKSlcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHR9LFxuXHRcdC8vIGRpc2FibGUgYXV0byBzZW5kLCB0aGUgc2FnYSB3aWxsIGhhbmRsZSB0aGlzXG5cdFx0YXV0b1NlbmQ6IGZhbHNlXG5cdH1cblx0Y29uc3Qgc2VydmljZTogQ2FsaXBlclNlcnZpY2UgPSBuZXcgQnJvd3NlckNhbGlwZXJTZXJ2aWNlKG9wdGlvbnMpXG5cdHJldHVybiBzZXJ2aWNlXG59XG5cbmZ1bmN0aW9uIHNldENhbGlwZXJQZXJzb24odXNlckRhdGE6IFVzZXJJbmZvKSB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGNvbnN0IHNoYXJkQ29uZmlnID0gZ2V0U2hhcmRDb25maWcoKVxuXHRjb25zdCBwZXJzb25OYW1lc3BhY2UgPSBzaGFyZENvbmZpZy5jYWxpcGVyUGVyc29uTmFtZXNwYWNlXG5cdGNvbnN0IGlkID0gYCR7cGVyc29uTmFtZXNwYWNlfSR7dXNlckRhdGEucHVpZH1gXG5cdGNvbnN0IGV4dGVuc2lvbnM6IERpY3Rpb25hcnk8YW55PiA9IHt9XG5cdGV4dGVuc2lvbnNbYCR7YXBwQ29uZmlnLkNBTElQRVJfRVhURU5TSU9OU19OQU1FU1BBQ0V9LnVzZXJJZGBdID0gdXNlckRhdGEuaWRcblx0c2VydmljZS5zZXRQZXJzb24oaWQsIHVzZXJEYXRhLmZpcnN0TmFtZSA/PyB1bmRlZmluZWQsIHVzZXJEYXRhLmxhc3ROYW1lID8/IHVuZGVmaW5lZCwgZXh0ZW5zaW9ucylcblx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG59XG5cbmZ1bmN0aW9uIHN0YXJ0Q2FsaXBlclNlc3Npb24oKSB7XG5cdGNvbnN0IGFwcENvbmZpZyA9IGdldEFwcENvbmZpZygpXG5cdGNvbnN0IGV4dGVuc2lvbnM6IERpY3Rpb25hcnk8YW55PiA9IHt9XG5cdGV4dGVuc2lvbnNbYCR7YXBwQ29uZmlnLkNBTElQRVJfRVhURU5TSU9OU19OQU1FU1BBQ0V9LnVzZXJBZ2VudGBdID0gbmF2aWdhdG9yLnVzZXJBZ2VudFxuXHRzZXJ2aWNlLnN0YXJ0U2Vzc2lvbihleHRlbnNpb25zKVxuXHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbn1cblxuZnVuY3Rpb24gZW5kQ2FsaXBlclNlc3Npb24oKSB7XG5cdHNlcnZpY2UuZW5kU2Vzc2lvbigpXG5cdHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxufVxuXG5mdW5jdGlvbiBzZXRQZXJzb25BbmRTdGFydENhbGlwZXJTZXNzaW9uKHVzZXJEYXRhOiBVc2VySW5mbykge1xuXHR2b2lkIHNldENhbGlwZXJQZXJzb24odXNlckRhdGEpXG5cdHZvaWQgc3RhcnRDYWxpcGVyU2Vzc2lvbigpXG59XG5cbmZ1bmN0aW9uIGlzVG9rZW5FeHBpcmVkKGNhbGlwZXJUb2tlbjogQ2FsaXBlclRva2VuKSB7XG5cdHJldHVybiBuZXcgRGF0ZShjYWxpcGVyVG9rZW4uZXhwaXJlcykgPD0gZ2V0U2VydmVyTm93VXRjKClcbn1cblxuLy8jZW5kcmVnaW9uIENhbGlwZXJTZXJ2aWNlIEhlbHBlcnNcblxuLyoqXG4gKiBMb2FkIHRoZSBwZXJzaXN0ZWQgYGNhbGlwZXJUb2tlbmAsIGlmIGFueS4gVGhpcyB0b2tlbiBpcyBwZXJzaXN0ZWQgYnkgdGhlIENhbGlwZXJTZXJ2aWNlLFxuICogYnV0IHdlIGxvYWQgaXQgaW4gb3JkZXIgdG8gY2hlY2sgZXhwaXJ5LlxuICovXG5mdW5jdGlvbiogbG9hZFRva2VuKCk6IFNhZ2FJdGVyYXRvcjxDYWxpcGVyVG9rZW4gfCB1bmRlZmluZWQ+IHtcblx0Y29uc3QgY2FsaXBlclRva2VuOiBDYWxpcGVyVG9rZW4gfCBudWxsID0geWllbGQgY2FsbChwZXJzaXN0ZW5jZVNlcnZpY2UuZ2V0UGVyc2lzdGVkQ2FsaXBlclRva2VuKVxuXHRpZiAoY2FsaXBlclRva2VuKSByZXR1cm4gY2FsaXBlclRva2VuXG5cdHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBMb2FkIGEgbmV3IGBjYWxpcGVyVG9rZW5gIGZyb20gdGhlIEFQSS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgZGF0YSByZXF1ZXN0IGZhaWxzLlxuICovXG5mdW5jdGlvbiogZ2V0VG9rZW4oKTogU2FnYUl0ZXJhdG9yPENhbGlwZXJUb2tlbiB8IHVuZGVmaW5lZD4ge1xuXHRkaXNwYXRjaE1vZGVsRmV0Y2hSZXF1ZXN0KHtcblx0XHRtb2RlbE5hbWU6ICdjYWxpcGVyVG9rZW4nLFxuXHRcdG5vU3RvcmU6IHRydWVcblx0fSlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRjb25zdCB7IHJlY2VpdmVkUmVzdWx0LCBmYWlsZWRSZXN1bHQgfSA9IHlpZWxkIHJhY2Uoe1xuXHRcdHJlY2VpdmVkUmVzdWx0OiB0YWtlKFxuXHRcdFx0KGFjdGlvbjogQW55QWN0aW9uKSA9PiBpc1RyYW5zaWVudE1vZGVsRmV0Y2hSZXN1bHRBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24ubW9kZWxQYXRoID09PSAnY2FsaXBlclRva2VuJ1xuXHRcdCksXG5cdFx0ZmFpbGVkUmVzdWx0OiB0YWtlKFxuXHRcdFx0KGFjdGlvbjogQW55QWN0aW9uKSA9PiBpc1RyYW5zaWVudE1vZGVsRmV0Y2hFcnJvckFjdGlvbihhY3Rpb24pICYmIGFjdGlvbi5tb2RlbFBhdGggPT09ICdjYWxpcGVyVG9rZW4nXG5cdFx0KVxuXHR9KVxuXHRpZiAocmVjZWl2ZWRSZXN1bHQgJiYgcmVjZWl2ZWRSZXN1bHQuZGF0YSkge1xuXHRcdC8vIGNvbnZlcnQgdG8gQ2FsaXBlclRva2VuIGZyb20gT0F1dGhUb2tlblxuXHRcdGNvbnN0IGNhbGlwZXJUb2tlbjogQ2FsaXBlclRva2VuID0ge1xuXHRcdFx0YWNjZXNzVG9rZW46IHJlY2VpdmVkUmVzdWx0LmRhdGEuYWNjZXNzX3Rva2VuLFxuXHRcdFx0ZXhwaXJlczogcmVjZWl2ZWRSZXN1bHQuZGF0YVsnLmV4cGlyZXMnXVxuXHRcdH1cblx0XHRyZXR1cm4gY2FsaXBlclRva2VuXG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIENhbGxzIGBnZXRUb2tlbmAsIGJ1dCBrZWVwcyByZXRyeWluZyB1bnRpbCBhIHRva2VuIGlzIHN1Y2Nlc3NmdWxseSBsb2FkZWQsIHVzaW5nIGEgYmFjay1vZmYgZGVsYXkgc3RyYXRlZ3kuXG4gKi9cbmZ1bmN0aW9uKiBnZXRUb2tlbldpdGhSZXRyeSgpOiBTYWdhSXRlcmF0b3I8Q2FsaXBlclRva2VuPiB7XG5cdC8vIGdldCB0b2tlblxuXHRsZXQgY2FsaXBlclRva2VuID0geWllbGQgY2FsbChnZXRUb2tlbilcblx0Ly8gaGFuZGxlIGZhaWxpbmcgdG8gbG9hZCB0b2tlblxuXHRsZXQgdHJ5Q291bnQgPSAxXG5cdHdoaWxlICghY2FsaXBlclRva2VuKSB7XG5cdFx0Ly8gYmFjay1vZmYgZGVsYXlcblx0XHR5aWVsZCBkZWxheShNYXRoLm1pbigxMDAwICogNjAsIDIgXiAodHJ5Q291bnQgKiAxMDApKSkgLy8gMTAwLCAyMDAsIDQwMC4uLlxuXHRcdGNhbGlwZXJUb2tlbiA9IHlpZWxkIGNhbGwoZ2V0VG9rZW4pXG5cdFx0dHJ5Q291bnQrK1xuXHR9XG5cdHJldHVybiBjYWxpcGVyVG9rZW5cbn1cblxuLyoqXG4gKiBTYWdhIGRlY29yYXRvciBmb3IgdGhlIGBDYWxpcGVyU2VydmljZS5zZW5kYCBtZXRob2RcbiAqL1xuZnVuY3Rpb24qIHNlbmQoKSB7XG5cdHRyeSB7XG5cdFx0eWllbGQgY2FsbChzZXJ2aWNlLnNlbmQpXG5cdH0gY2F0Y2gge1xuXHRcdC8vIGNhdGNoIGVycm9yIHRvIGF2b2lkIGJyZWFraW5nIHRoZSBzYWdhXG5cdFx0Ly8gaWdub3JlIGVycm9yIHNpbmNlIGBDYWxpcGVyU2VydmljZWAgYWxyZWFkeSB0cmFja3Mgc2VuZCBlcnJvcnNcblx0fVxufVxuXG4vKipcbiAqIFNhZ2EgZGVjb3JhdG9yIGZvciB0aGUgYENhbGlwZXJTZXJ2aWNlLnNlbmRgIG1ldGhvZCxcbiAqIHdoaWNoIHdpbGwgcmVmcmVzaCB0aGUgYGNhbGlwZXJUb2tlbmAgaWYgbmVlZGVkIGJlZm9yZSBjYWxsaW5nIGBzZW5kYFxuICovXG5mdW5jdGlvbiogc2VuZFdpdGhUb2tlblJlZnJlc2hJZk5lZWRlZCgpIHtcblx0Ly8gcmVmcmVzaCB0b2tlbiwgaWYgbmVlZGVkXG5cdGlmICghY2FsaXBlclRva2VuIHx8IGlzVG9rZW5FeHBpcmVkKGNhbGlwZXJUb2tlbikpIHtcblx0XHRjYWxpcGVyVG9rZW4gPSB5aWVsZCBjYWxsKGdldFRva2VuV2l0aFJldHJ5KVxuXHR9XG5cdC8vIHNlbmRcblx0eWllbGQgY2FsbChzZW5kKVxufVxuXG4vKipcbiAqIFNhZ2EgZm9yayBpbXBsZW1lbnRpbmcgdGhlIFwiYXV0byBzZW5kXCIgZnVuY3Rpb25hbGl0eSBmcm9tIGBDYWxpcGVyU2VydmljZS5cbiAqIENhbGxzIGBzZW5kYCBldmVyeSAxMCBzZWNvbmRzLlxuICovXG5mdW5jdGlvbiogYXV0b1NlbmQoKSB7XG5cdHdoaWxlICh0cnVlKSB7XG5cdFx0Ly8gdHJ5IHRvIHNlbmQgZXZlcnkgMTAgc2Vjb25kc1xuXHRcdHlpZWxkIGRlbGF5KDEwICogMTAwMClcblx0XHR5aWVsZCBjYWxsKHNlbmRXaXRoVG9rZW5SZWZyZXNoSWZOZWVkZWQpXG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qIGNhbGlwZXJTYWdhKCk6IFNhZ2FJdGVyYXRvciB7XG5cdC8vIG9uIGFwcCBzdGFydCwgZ2V0IHRoZSBjb25maWd1cmF0aW9uXG5cdGNvbnN0IGNvbmZpZ3VyYXRpb25SZXN1bHQgPSB5aWVsZCB0YWtlKFxuXHRcdChhY3Rpb246IEFueUFjdGlvbikgPT4gaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gJ2NvbmZpZ3VyYXRpb24nXG5cdClcblx0Y29uc3QgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25SZXN1bHQuZGF0YVxuXHQvLyBkbyBub3QgcHJvY2VlZCBpZiBjYWxpcGVyIGlzIG5vdCBlbmFibGVkIG9yIGlzIG1pc3NpbmcgaG9zdG5hbWVcblx0aWYgKCFjb25maWd1cmF0aW9uLmNhbGlwZXJFbmFibGVkIHx8ICFjb25maWd1cmF0aW9uLmNhbGlwZXJFdmVudFN0b3JlSG9zdG5hbWUpIHtcblx0XHRyZXR1cm5cblx0fVxuXG5cdC8vIGxvYWQgcGVyc2lzdGVkIHRva2VuLCBpZiBhbnlcblx0Y2FsaXBlclRva2VuID0geWllbGQgY2FsbChsb2FkVG9rZW4pXG5cdC8vIGluaXRpYWxpemUgY2FsaXBlciBzZXJ2aWNlXG5cdHNlcnZpY2UgPSB5aWVsZCBjYWxsKGluaXRpYWxpemVDYWxpcGVyU2VydmljZSwgY29uZmlndXJhdGlvbilcblxuXHR3aGlsZSAodHJ1ZSkge1xuXHRcdC8vIHVzZXIgaXMgbG9hZGVkIGFuZCBhdXRoZW50aWNhdGVkID0+IGNhbiBnZXQgdG9rZW4gYW5kIGNhbiBzdGFydCBzZXNzaW9uXG5cdFx0Y29uc3QgdXNlckluZm86IEZldGNoUmVzdWx0PFVzZXJJbmZvPiA9IHlpZWxkIHRha2UoXG5cdFx0XHQoYWN0aW9uOiBBbnlBY3Rpb24pID0+IGlzTW9kZWxGZXRjaFJlc3VsdEFjdGlvbihhY3Rpb24pICYmIGFjdGlvbi5tb2RlbFBhdGggPT09ICd1c2VyLnVzZXJJbmZvJ1xuXHRcdClcblx0XHRjb25zdCBhdXRvU2VuZFRhc2s6IFRhc2sgPSB5aWVsZCBmb3JrKGF1dG9TZW5kKVxuXHRcdHNldFBlcnNvbkFuZFN0YXJ0Q2FsaXBlclNlc3Npb24odXNlckluZm8uZGF0YSlcblxuXHRcdC8vIHVzZXIgbG9ncyBvdXQgPT4gc3RvcCBhdXRvLXNlbmQgYW5kIGVuZCBzZXNzaW9uXG5cdFx0eWllbGQgdGFrZShBVVRIX0FDVElPTl9UWVBFLkxPR19PVVRfUkVRVUVTVEVEKVxuXHRcdHlpZWxkIGNhbmNlbChhdXRvU2VuZFRhc2spXG5cdFx0dm9pZCBlbmRDYWxpcGVyU2Vzc2lvbigpXG5cdFx0Ly8gYXR0ZW1wdCB0byBzZW5kIHRoZSBzZXNzaW9uIGVuZCBldmVudCBvbmNlLCB3LyBubyB0b2tlbiByZWZyZXNoIHNpbmNlIGxvZ2dlZCBvdXRcblx0XHR5aWVsZCBjYWxsKHNlbmQpXG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBSUEsU0FBU0EsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLElBQUksUUFBUSxvQkFBb0I7QUFDMUUsU0FBU0MscUJBQXFCLFFBQVEsc0JBQXNCO0FBTzVELFNBQVNDLFlBQVksRUFBRUMsY0FBYyxRQUFRLCtCQUErQjtBQUM1RSxTQUFTQyxrQkFBa0IsUUFBUSxtQ0FBbUM7QUFFdEUsU0FBU0MsZUFBZSxRQUFRLGtCQUFrQjtBQUNsRCxTQUFTQyx5QkFBeUIsUUFBUSxrQkFBa0I7QUFDNUQsU0FDQ0Ms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
@@ -1,37 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = clockOffsetSaga;
4
- const tslib_1 = require("tslib");
5
- const moment_timezone_1 = tslib_1.__importDefault(require("moment-timezone"));
6
- const effects_1 = require("redux-saga/effects");
7
- const date_1 = require("../../utils/date");
8
- const logger_1 = require("../../utils/logger");
9
- const actions_1 = require("../actions");
1
+ import moment from 'moment-timezone';
2
+ import { call, take } from 'redux-saga/effects';
3
+ import { setClockOffset } from '../../utils/date';
4
+ import { getLogger } from '../../utils/logger';
5
+ import { isTransientModelFetchResultAction } from '../actions';
6
+
10
7
  /**
11
- Periodically, we fetch the current UTC server time. To insure against browser clock time being set
12
- incorrectly, we track the difference between server time and browser time by storing that
13
- difference in a module-level variable in the date utilities module. That module provides a method
14
- to get the current UTC time, according to the API server.
8
+ Periodically, we fetch the current UTC server time. To insure against browser clock time being set
9
+ incorrectly, we track the difference between server time and browser time by storing that
10
+ difference in a module-level variable in the date utilities module. That module provides a method
11
+ to get the current UTC time, according to the API server.
15
12
 
16
- If the calculated difference is less than one second, we can assume that's a result of network
17
- latency and will not store that offset.
13
+ If the calculated difference is less than one second, we can assume that's a result of network
14
+ latency and will not store that offset.
18
15
  */
19
- function* clockOffsetSaga() {
20
- const logger = (0, logger_1.getLogger)();
21
- while (true) {
22
- const timeResult = yield (0, effects_1.take)((action) => (0, actions_1.isTransientModelFetchResultAction)(action) && action.modelPath === 'time');
23
- const time = timeResult.data;
24
- const offset = moment_timezone_1.default.utc(time).diff(moment_timezone_1.default.utc());
25
- if (Math.abs(offset) > 1000) {
26
- logger.debug('> 1 second server <-> browser time difference');
27
- logger.debug('server', time);
28
- logger.debug('browser', new Date().toISOString());
29
- logger.debug('calculated', new Date(Date.now() + offset).toISOString());
30
- yield (0, effects_1.call)(date_1.setClockOffset, offset);
31
- }
32
- else {
33
- logger.debug('clear clock offset');
34
- yield (0, effects_1.call)(date_1.setClockOffset, 0);
35
- }
16
+ export default function* clockOffsetSaga() {
17
+ const logger = getLogger();
18
+ while (true) {
19
+ const timeResult = yield take(action => isTransientModelFetchResultAction(action) && action.modelPath === 'time');
20
+ const time = timeResult.data;
21
+ const offset = moment.utc(time).diff(moment.utc());
22
+ if (Math.abs(offset) > 1000) {
23
+ logger.debug('> 1 second server <-> browser time difference');
24
+ logger.debug('server', time);
25
+ logger.debug('browser', new Date().toISOString());
26
+ logger.debug('calculated', new Date(Date.now() + offset).toISOString());
27
+ yield call(setClockOffset, offset);
28
+ } else {
29
+ logger.debug('clear clock offset');
30
+ yield call(setClockOffset, 0);
36
31
  }
32
+ }
37
33
  }
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb21lbnQiLCJjYWxsIiwidGFrZSIsInNldENsb2NrT2Zmc2V0IiwiZ2V0TG9nZ2VyIiwiaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwiY2xvY2tPZmZzZXRTYWdhIiwibG9nZ2VyIiwidGltZVJlc3VsdCIsImFjdGlvbiIsIm1vZGVsUGF0aCIsInRpbWUiLCJkYXRhIiwib2Zmc2V0IiwidXRjIiwiZGlmZiIsIk1hdGgiLCJhYnMiLCJkZWJ1ZyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsIm5vdyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWR1eC9zYWdhcy9jbG9ja09mZnNldFNhZ2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnXG5pbXBvcnQgeyBBbnlBY3Rpb24gfSBmcm9tICdyZWR1eCdcbmltcG9ydCB7IFNhZ2FJdGVyYXRvciB9IGZyb20gJ3JlZHV4LXNhZ2EnXG5pbXBvcnQgeyBjYWxsLCB0YWtlIH0gZnJvbSAncmVkdXgtc2FnYS9lZmZlY3RzJ1xuaW1wb3J0IHsgc2V0Q2xvY2tPZmZzZXQgfSBmcm9tICcuLi8uLi91dGlscy9kYXRlJ1xuaW1wb3J0IHsgZ2V0TG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyJ1xuaW1wb3J0IHsgaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucydcblxuLyoqXG5cdFBlcmlvZGljYWxseSwgd2UgZmV0Y2ggdGhlIGN1cnJlbnQgVVRDIHNlcnZlciB0aW1lLiBUbyBpbnN1cmUgYWdhaW5zdCBicm93c2VyIGNsb2NrIHRpbWUgYmVpbmcgc2V0XG5cdGluY29ycmVjdGx5LCB3ZSB0cmFjayB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNlcnZlciB0aW1lIGFuZCBicm93c2VyIHRpbWUgYnkgc3RvcmluZyB0aGF0XG5cdGRpZmZlcmVuY2UgaW4gYSBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgaW4gdGhlIGRhdGUgdXRpbGl0aWVzIG1vZHVsZS4gVGhhdCBtb2R1bGUgcHJvdmlkZXMgYSBtZXRob2Rcblx0dG8gZ2V0IHRoZSBjdXJyZW50IFVUQyB0aW1lLCBhY2NvcmRpbmcgdG8gdGhlIEFQSSBzZXJ2ZXIuXG5cblx0SWYgdGhlIGNhbGN1bGF0ZWQgZGlmZmVyZW5jZSBpcyBsZXNzIHRoYW4gb25lIHNlY29uZCwgd2UgY2FuIGFzc3VtZSB0aGF0J3MgYSByZXN1bHQgb2YgbmV0d29ya1xuXHRsYXRlbmN5IGFuZCB3aWxsIG5vdCBzdG9yZSB0aGF0IG9mZnNldC5cbiovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiogY2xvY2tPZmZzZXRTYWdhKCk6IFNhZ2FJdGVyYXRvciB7XG5cdGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcigpXG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHRjb25zdCB0aW1lUmVzdWx0ID0geWllbGQgdGFrZShcblx0XHRcdChhY3Rpb246IEFueUFjdGlvbikgPT4gaXNUcmFuc2llbnRNb2RlbEZldGNoUmVzdWx0QWN0aW9uKGFjdGlvbikgJiYgYWN0aW9uLm1vZGVsUGF0aCA9PT0gJ3RpbWUnXG5cdFx0KVxuXHRcdGNvbnN0IHRpbWU6IHN0cmluZyA9IHRpbWVSZXN1bHQuZGF0YVxuXHRcdGNvbnN0IG9mZnNldCA9IG1vbWVudC51dGModGltZSkuZGlmZihtb21lbnQudXRjKCkpXG5cdFx0aWYgKE1hdGguYWJzKG9mZnNldCkgPiAxMDAwKSB7XG5cdFx0XHRsb2dnZXIuZGVidWcoJz4gMSBzZWNvbmQgc2VydmVyIDwtPiBicm93c2VyIHRpbWUgZGlmZmVyZW5jZScpXG5cdFx0XHRsb2dnZXIuZGVidWcoJ3NlcnZlcicsIHRpbWUpXG5cdFx0XHRsb2dnZXIuZGVidWcoJ2Jyb3dzZXInLCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkpXG5cdFx0XHRsb2dnZXIuZGVidWcoJ2NhbGN1bGF0ZWQnLCBuZXcgRGF0ZShEYXRlLm5vdygpICsgb2Zmc2V0KS50b0lTT1N0cmluZygpKVxuXHRcdFx0eWllbGQgY2FsbChzZXRDbG9ja09mZnNldCwgb2Zmc2V0KVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRsb2dnZXIuZGVidWcoJ2NsZWFyIGNsb2NrIG9mZnNldCcpXG5cdFx0XHR5aWVsZCBjYWxsKHNldENsb2NrT2Zmc2V0LCAwKVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxNQUFNLE1BQU0saUJBQWlCO0FBR3BDLFNBQVNDLElBQUksRUFBRUMsSUFBSSxRQUFRLG9CQUFvQjtBQUMvQyxTQUFTQyxjQUFjLFFBQVEsa0JBQWtCO0FBQ2pELFNBQVNDLFNBQVMsUUFBUSxvQkFBb0I7QUFDOUMsU0FBU0MsaUNBQWlDLFFBQVEsWUFBWTs7QUFFOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxVQUFVQyxlQUFlQSxDQUFBLEVBQWlCO0VBQ3hELE1BQU1DLE1BQU0sR0FBR0gsU0FBUyxDQUFDLENBQUM7RUFFMUIsT0FBTyxJQUFJLEVBQUU7SUFDWixNQUFNSSxVQUFVLEdBQUcsTUFBTU4sSUFBSSxDQUMzQk8sTUFBaUIsSUFBS0osaUNBQWlDLENBQUNJLE1BQU0sQ0FBQyxJQUFJQSxNQUFNLENBQUNDLFNBQVMsS0FBSyxNQUMxRixDQUFDO0lBQ0QsTUFBTUMsSUFBWSxHQUFHSCxVQUFVLENBQUNJLElBQUk7SUFDcEMsTUFBTUMsTUFBTSxHQUFHYixNQUFNLENBQUNjLEdBQUcsQ0FBQ0gsSUFBSSxDQUFDLENBQUNJLElBQUksQ0FBQ2YsTUFBTSxDQUFDYyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xELElBQUlFLElBQUksQ0FBQ0MsR0FBRyxDQUFDSixNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUU7TUFDNUJOLE1BQU0sQ0FBQ1csS0FBSyxDQUFDLCtDQUErQyxDQUFDO01BQzdEWCxNQUFNLENBQUNXLEtBQUssQ0FBQyxRQUFRLEVBQUVQLElBQUksQ0FBQztNQUM1QkosTUFBTSxDQUFDVyxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDakRiLE1BQU0sQ0FBQ1csS0FBSyxDQUFDLFlBQVksRUFBRSxJQUFJQyxJQUFJLENBQUNBLElBQUksQ0FBQ0UsR0FBRyxDQUFDLENBQUMsR0FBR1IsTUFBTSxDQUFDLENBQUNPLFdBQVcsQ0FBQyxDQUFDLENBQUM7TUFDdkUsTUFBTW5CLElBQUksQ0FBQ0UsY0FBYyxFQUFFVSxNQUFNLENBQUM7SUFDbkMsQ0FBQyxNQUFNO01BQ05OLE1BQU0sQ0FBQ1csS0FBSyxDQUFDLG9CQUFvQixDQUFDO01BQ2xDLE1BQU1qQixJQUFJLENBQUNFLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDOUI7RUFDRDtBQUNEIiwiaWdub3JlTGlzdCI6W119
@@ -1,11 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = configurationSaga;
4
- const effects_1 = require("redux-saga/effects");
5
- const configuration_1 = require("../../constants/configuration");
6
- const actions_1 = require("../actions");
7
- function* configurationSaga() {
8
- const configurationResult = yield (0, effects_1.take)((action) => (0, actions_1.isModelFetchResultAction)(action) && action.modelPath === 'configuration');
9
- const configuration = configurationResult.data;
10
- yield (0, effects_1.call)(configuration_1.setShardConfig, configuration);
1
+ import { call, take } from 'redux-saga/effects';
2
+ import { setShardConfig } from '../../constants/configuration';
3
+ import { isModelFetchResultAction } from '../actions';
4
+ export default function* configurationSaga() {
5
+ const configurationResult = yield take(action => isModelFetchResultAction(action) && action.modelPath === 'configuration');
6
+ const configuration = configurationResult.data;
7
+ yield call(setShardConfig, configuration);
11
8
  }
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjYWxsIiwidGFrZSIsInNldFNoYXJkQ29uZmlnIiwiaXNNb2RlbEZldGNoUmVzdWx0QWN0aW9uIiwiY29uZmlndXJhdGlvblNhZ2EiLCJjb25maWd1cmF0aW9uUmVzdWx0IiwiYWN0aW9uIiwibW9kZWxQYXRoIiwiY29uZmlndXJhdGlvbiIsImRhdGEiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVkdXgvc2FnYXMvY29uZmlndXJhdGlvblNhZ2EudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXG5pbXBvcnQgeyBTYWdhSXRlcmF0b3IgfSBmcm9tICdyZWR1eC1zYWdhJ1xuaW1wb3J0IHsgY2FsbCwgdGFrZSB9IGZyb20gJ3JlZHV4LXNhZ2EvZWZmZWN0cydcbmltcG9ydCB7IHNldFNoYXJkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NvbmZpZ3VyYXRpb24nXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBpc01vZGVsRmV0Y2hSZXN1bHRBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiogY29uZmlndXJhdGlvblNhZ2EoKTogU2FnYUl0ZXJhdG9yIHtcblx0Y29uc3QgY29uZmlndXJhdGlvblJlc3VsdCA9IHlpZWxkIHRha2UoXG5cdFx0KGFjdGlvbjogQW55QWN0aW9uKSA9PiBpc01vZGVsRmV0Y2hSZXN1bHRBY3Rpb24oYWN0aW9uKSAmJiBhY3Rpb24ubW9kZWxQYXRoID09PSAnY29uZmlndXJhdGlvbidcblx0KVxuXHRjb25zdCBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvblJlc3VsdC5kYXRhXG5cdHlpZWxkIGNhbGwoc2V0U2hhcmRDb25maWcsIGNvbmZpZ3VyYXRpb24pXG59XG4iXSwibWFwcGluZ3MiOiJBQUVBLFNBQVNBLElBQUksRUFBRUMsSUFBSSxRQUFRLG9CQUFvQjtBQUMvQyxTQUFTQyxjQUFjLFFBQVEsK0JBQStCO0FBRTlELFNBQVNDLHdCQUF3QixRQUFRLFlBQVk7QUFFckQsZUFBZSxVQUFVQyxpQkFBaUJBLENBQUEsRUFBaUI7RUFDMUQsTUFBTUMsbUJBQW1CLEdBQUcsTUFBTUosSUFBSSxDQUNwQ0ssTUFBaUIsSUFBS0gsd0JBQXdCLENBQUNHLE1BQU0sQ0FBQyxJQUFJQSxNQUFNLENBQUNDLFNBQVMsS0FBSyxlQUNqRixDQUFDO0VBQ0QsTUFBTUMsYUFBNEIsR0FBR0gsbUJBQW1CLENBQUNJLElBQUk7RUFDN0QsTUFBTVQsSUFBSSxDQUFDRSxjQUFjLEVBQUVNLGFBQWEsQ0FBQztBQUMxQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,22 +1,19 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = downtimeApiErrorSaga;
4
- const connected_react_router_1 = require("connected-react-router");
5
- const effects_1 = require("redux-saga/effects");
6
- const types_1 = require("../../types");
7
- const actions_1 = require("../actions");
8
- function* downtimeApiErrorSaga(runIndefinitely = true) {
1
+ import { push } from 'connected-react-router';
2
+ import { put, take } from 'redux-saga/effects';
3
+ import { HTTP_STATUS_CODE } from '../../types';
4
+ import { isModelTryFetchErrorAction } from '../actions';
5
+ export default function downtimeApiErrorSaga() {
6
+ let runIndefinitely = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
7
+ return function* () {
9
8
  do {
10
- // wait for any downtime error response
11
- yield (0, effects_1.take)((action) => {
12
- var _a;
13
- return (0, actions_1.isModelTryFetchErrorAction)(action) &&
14
- ((_a = action.errorData) === null || _a === void 0 ? void 0 : _a.status) === types_1.HTTP_STATUS_CODE.FORBIDDEN &&
15
- action.errorData.title.includes("We'll be right back!");
16
- });
17
- // redirect to downtime route
18
- yield (0, effects_1.put)((0, connected_react_router_1.push)({
19
- pathname: '/downtime'
20
- }));
9
+ // wait for any downtime error response
10
+ yield take(action => isModelTryFetchErrorAction(action) && action.errorData?.status === HTTP_STATUS_CODE.FORBIDDEN && action.errorData.title.includes("We'll be right back!"));
11
+
12
+ // redirect to downtime route
13
+ yield put(push({
14
+ pathname: '/downtime'
15
+ }));
21
16
  } while (runIndefinitely);
17
+ }();
22
18
  }
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwdXNoIiwicHV0IiwidGFrZSIsIkhUVFBfU1RBVFVTX0NPREUiLCJpc01vZGVsVHJ5RmV0Y2hFcnJvckFjdGlvbiIsImRvd250aW1lQXBpRXJyb3JTYWdhIiwicnVuSW5kZWZpbml0ZWx5IiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiYWN0aW9uIiwiZXJyb3JEYXRhIiwic3RhdHVzIiwiRk9SQklEREVOIiwidGl0bGUiLCJpbmNsdWRlcyIsInBhdGhuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JlZHV4L3NhZ2FzL2Rvd250aW1lQXBpRXJyb3JTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHB1c2ggfSBmcm9tICdjb25uZWN0ZWQtcmVhY3Qtcm91dGVyJ1xuaW1wb3J0IHsgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXG5pbXBvcnQgeyBwdXQsIHRha2UgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXG5pbXBvcnQgeyBIVFRQX1NUQVRVU19DT0RFIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBpc01vZGVsVHJ5RmV0Y2hFcnJvckFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMnXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKiBkb3dudGltZUFwaUVycm9yU2FnYShydW5JbmRlZmluaXRlbHkgPSB0cnVlKSB7XG5cdGRvIHtcblx0XHQvLyB3YWl0IGZvciBhbnkgZG93bnRpbWUgZXJyb3IgcmVzcG9uc2Vcblx0XHR5aWVsZCB0YWtlKFxuXHRcdFx0KGFjdGlvbjogQW55QWN0aW9uKSA9PlxuXHRcdFx0XHRpc01vZGVsVHJ5RmV0Y2hFcnJvckFjdGlvbihhY3Rpb24pICYmXG5cdFx0XHRcdGFjdGlvbi5lcnJvckRhdGE/LnN0YXR1cyA9PT0gSFRUUF9TVEFUVVNfQ09ERS5GT1JCSURERU4gJiZcblx0XHRcdFx0YWN0aW9uLmVycm9yRGF0YS50aXRsZS5pbmNsdWRlcyhcIldlJ2xsIGJlIHJpZ2h0IGJhY2shXCIpXG5cdFx0KVxuXG5cdFx0Ly8gcmVkaXJlY3QgdG8gZG93bnRpbWUgcm91dGVcblx0XHR5aWVsZCBwdXQoXG5cdFx0XHRwdXNoKHtcblx0XHRcdFx0cGF0aG5hbWU6ICcvZG93bnRpbWUnXG5cdFx0XHR9KVxuXHRcdClcblx0fSB3aGlsZSAocnVuSW5kZWZpbml0ZWx5KVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxJQUFJLFFBQVEsd0JBQXdCO0FBRTdDLFNBQVNDLEdBQUcsRUFBRUMsSUFBSSxRQUFRLG9CQUFvQjtBQUM5QyxTQUFTQyxnQkFBZ0IsUUFBUSxhQUFhO0FBQzlDLFNBQVNDLDBCQUEwQixRQUFRLFlBQVk7QUFFdkQsZUFBZSxTQUFVQyxvQkFBb0JBLENBQUE7RUFBQSxJQUFDQyxlQUFlLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLElBQUk7RUFBQSxvQkFBRTtJQUNyRSxHQUFHO01BQ0Y7TUFDQSxNQUFNTCxJQUFJLENBQ1JRLE1BQWlCLElBQ2pCTiwwQkFBMEIsQ0FBQ00sTUFBTSxDQUFDLElBQ2xDQSxNQUFNLENBQUNDLFNBQVMsRUFBRUMsTUFBTSxLQUFLVCxnQkFBZ0IsQ0FBQ1UsU0FBUyxJQUN2REgsTUFBTSxDQUFDQyxTQUFTLENBQUNHLEtBQUssQ0FBQ0MsUUFBUSxDQUFDLHNCQUFzQixDQUN4RCxDQUFDOztNQUVEO01BQ0EsTUFBTWQsR0FBRyxDQUNSRCxJQUFJLENBQUM7UUFDSmdCLFFBQVEsRUFBRTtNQUNYLENBQUMsQ0FDRixDQUFDO0lBQ0YsQ0FBQyxRQUFRVixlQUFlO0VBQ3pCLENBQUM7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,26 +1,25 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = errorSaga;
4
- const tslib_1 = require("tslib");
5
- const connected_react_router_1 = require("connected-react-router");
6
- const lodash_1 = tslib_1.__importDefault(require("lodash"));
7
- const query_string_1 = require("query-string");
8
- const effects_1 = require("redux-saga/effects");
9
- const windowService_1 = require("../../services/windowService");
10
- function* errorSaga() {
11
- while (true) {
12
- // check for error messages immediately at app startup
13
- const location = windowService_1.windowService.getLocation();
14
- const parsedSearch = (0, query_string_1.parse)(location.search);
15
- // check possible error message keys
16
- const message = parsedSearch._ltierrormsg || parsedSearch.error;
17
- if (!lodash_1.default.isNil(message)) {
18
- yield (0, effects_1.put)((0, connected_react_router_1.push)({
19
- pathname: '/error',
20
- search: (0, query_string_1.stringify)({ message })
21
- }));
22
- }
23
- // check for error messages on location changes
24
- yield (0, effects_1.take)((action) => action.type === connected_react_router_1.LOCATION_CHANGE);
1
+ import { LOCATION_CHANGE, push } from 'connected-react-router';
2
+ import _ from 'lodash';
3
+ import { parse, stringify } from 'query-string';
4
+ import { put, take } from 'redux-saga/effects';
5
+ import { windowService } from '../../services/windowService';
6
+ export default function* errorSaga() {
7
+ while (true) {
8
+ // check for error messages immediately at app startup
9
+ const location = windowService.getLocation();
10
+ const parsedSearch = parse(location.search);
11
+ // check possible error message keys
12
+ const message = parsedSearch._ltierrormsg || parsedSearch.error;
13
+ if (!_.isNil(message)) {
14
+ yield put(push({
15
+ pathname: '/error',
16
+ search: stringify({
17
+ message
18
+ })
19
+ }));
25
20
  }
21
+ // check for error messages on location changes
22
+ yield take(action => action.type === LOCATION_CHANGE);
23
+ }
26
24
  }
25
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMT0NBVElPTl9DSEFOR0UiLCJwdXNoIiwiXyIsInBhcnNlIiwic3RyaW5naWZ5IiwicHV0IiwidGFrZSIsIndpbmRvd1NlcnZpY2UiLCJlcnJvclNhZ2EiLCJsb2NhdGlvbiIsImdldExvY2F0aW9uIiwicGFyc2VkU2VhcmNoIiwic2VhcmNoIiwibWVzc2FnZSIsIl9sdGllcnJvcm1zZyIsImVycm9yIiwiaXNOaWwiLCJwYXRobmFtZSIsImFjdGlvbiIsInR5cGUiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcmVkdXgvc2FnYXMvZXJyb3JTYWdhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExPQ0FUSU9OX0NIQU5HRSwgcHVzaCB9IGZyb20gJ2Nvbm5lY3RlZC1yZWFjdC1yb3V0ZXInXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBwYXJzZSwgc3RyaW5naWZ5IH0gZnJvbSAncXVlcnktc3RyaW5nJ1xuaW1wb3J0IHsgQW55QWN0aW9uIH0gZnJvbSAncmVkdXgnXG5pbXBvcnQgeyBwdXQsIHRha2UgfSBmcm9tICdyZWR1eC1zYWdhL2VmZmVjdHMnXG5pbXBvcnQgeyB3aW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2luZG93U2VydmljZSdcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qIGVycm9yU2FnYSgpIHtcblx0d2hpbGUgKHRydWUpIHtcblx0XHQvLyBjaGVjayBmb3IgZXJyb3IgbWVzc2FnZXMgaW1tZWRpYXRlbHkgYXQgYXBwIHN0YXJ0dXBcblx0XHRjb25zdCBsb2NhdGlvbiA9IHdpbmRvd1NlcnZpY2UuZ2V0TG9jYXRpb24oKVxuXHRcdGNvbnN0IHBhcnNlZFNlYXJjaCA9IHBhcnNlKGxvY2F0aW9uLnNlYXJjaClcblx0XHQvLyBjaGVjayBwb3NzaWJsZSBlcnJvciBtZXNzYWdlIGtleXNcblx0XHRjb25zdCBtZXNzYWdlID0gcGFyc2VkU2VhcmNoLl9sdGllcnJvcm1zZyB8fCBwYXJzZWRTZWFyY2guZXJyb3Jcblx0XHRpZiAoIV8uaXNOaWwobWVzc2FnZSkpIHtcblx0XHRcdHlpZWxkIHB1dChcblx0XHRcdFx0cHVzaCh7XG5cdFx0XHRcdFx0cGF0aG5hbWU6ICcvZXJyb3InLFxuXHRcdFx0XHRcdHNlYXJjaDogc3RyaW5naWZ5KHsgbWVzc2FnZSB9KVxuXHRcdFx0XHR9KVxuXHRcdFx0KVxuXHRcdH1cblx0XHQvLyBjaGVjayBmb3IgZXJyb3IgbWVzc2FnZXMgb24gbG9jYXRpb24gY2hhbmdlc1xuXHRcdHlpZWxkIHRha2UoKGFjdGlvbjogQW55QWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gTE9DQVRJT05fQ0hBTkdFKVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsRUFBRUMsSUFBSSxRQUFRLHdCQUF3QjtBQUM5RCxPQUFPQyxDQUFDLE1BQU0sUUFBUTtBQUN0QixTQUFTQyxLQUFLLEVBQUVDLFNBQVMsUUFBUSxjQUFjO0FBRS9DLFNBQVNDLEdBQUcsRUFBRUMsSUFBSSxRQUFRLG9CQUFvQjtBQUM5QyxTQUFTQyxhQUFhLFFBQVEsOEJBQThCO0FBRTVELGVBQWUsVUFBVUMsU0FBU0EsQ0FBQSxFQUFHO0VBQ3BDLE9BQU8sSUFBSSxFQUFFO0lBQ1o7SUFDQSxNQUFNQyxRQUFRLEdBQUdGLGFBQWEsQ0FBQ0csV0FBVyxDQUFDLENBQUM7SUFDNUMsTUFBTUMsWUFBWSxHQUFHUixLQUFLLENBQUNNLFFBQVEsQ0FBQ0csTUFBTSxDQUFDO0lBQzNDO0lBQ0EsTUFBTUMsT0FBTyxHQUFHRixZQUFZLENBQUNHLFlBQVksSUFBSUgsWUFBWSxDQUFDSSxLQUFLO0lBQy9ELElBQUksQ0FBQ2IsQ0FBQyxDQUFDYyxLQUFLLENBQUNILE9BQU8sQ0FBQyxFQUFFO01BQ3RCLE1BQU1SLEdBQUcsQ0FDUkosSUFBSSxDQUFDO1FBQ0pnQixRQUFRLEVBQUUsUUFBUTtRQUNsQkwsTUFBTSxFQUFFUixTQUFTLENBQUM7VUFBRVM7UUFBUSxDQUFDO01BQzlCLENBQUMsQ0FDRixDQUFDO0lBQ0Y7SUFDQTtJQUNBLE1BQU1QLElBQUksQ0FBRVksTUFBaUIsSUFBS0EsTUFBTSxDQUFDQyxJQUFJLEtBQUtuQixlQUFlLENBQUM7RUFDbkU7QUFDRCIsImlnbm9yZUxpc3QiOltdfQ==