studiokit-scaffolding-js 4.3.20 → 4.3.21
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/LICENSE +21 -21
- package/README.md +127 -127
- package/lib/components/ActionList.d.ts +20 -20
- package/lib/components/ActionList.js +94 -94
- package/lib/components/AlertDialog.d.ts +18 -18
- package/lib/components/AlertDialog.js +21 -21
- package/lib/components/AlertWithIcon.d.ts +7 -7
- package/lib/components/AlertWithIcon.js +57 -57
- package/lib/components/Blots/CustomImageSpec.d.ts +14 -14
- package/lib/components/Blots/CustomImageSpec.js +45 -45
- package/lib/components/Blots/CustomVideoSpec.d.ts +16 -16
- package/lib/components/Blots/CustomVideoSpec.js +47 -47
- package/lib/components/ConnectedModal.d.ts +6 -6
- package/lib/components/ConnectedModal.js +11 -11
- package/lib/components/Dropdowns/GroupsDropdown.d.ts +18 -18
- package/lib/components/Dropdowns/GroupsDropdown.js +90 -90
- package/lib/components/Dropdowns/ManagedNavDropdown.d.ts +32 -32
- package/lib/components/Dropdowns/ManagedNavDropdown.js +118 -118
- package/lib/components/Dropdowns/UserDropdown.d.ts +6 -6
- package/lib/components/Dropdowns/UserDropdown.js +76 -76
- package/lib/components/Dropdowns/index.d.ts +3 -3
- package/lib/components/Dropdowns/index.js +12 -12
- package/lib/components/EntityOwnerList.d.ts +11 -11
- package/lib/components/EntityOwnerList.js +63 -63
- package/lib/components/ErrorBoundary.d.ts +11 -11
- package/lib/components/ErrorBoundary.js +74 -74
- package/lib/components/Forms/DateField.d.ts +13 -13
- package/lib/components/Forms/DateField.js +99 -99
- package/lib/components/Forms/TimeField.d.ts +11 -11
- package/lib/components/Forms/TimeField.js +112 -112
- package/lib/components/Forms/index.d.ts +2 -2
- package/lib/components/Forms/index.js +14 -14
- package/lib/components/Groups/CreateEditCopySaveButtons.d.ts +10 -10
- package/lib/components/Groups/CreateEditCopySaveButtons.js +18 -18
- package/lib/components/Groups/GroupCreateOrEditCommonProps.d.ts +6 -6
- package/lib/components/Groups/GroupCreateOrEditCommonProps.js +2 -2
- package/lib/components/Groups/RosterSyncInfo.d.ts +5 -5
- package/lib/components/Groups/RosterSyncInfo.js +54 -54
- package/lib/components/HOC/AccessibleAppComponent.d.ts +15 -15
- package/lib/components/HOC/AccessibleAppComponent.js +135 -135
- package/lib/components/HOC/ActivityRequiredComponent.d.ts +105 -105
- package/lib/components/HOC/ActivityRequiredComponent.js +101 -101
- package/lib/components/HOC/AsyncComponent.d.ts +37 -37
- package/lib/components/HOC/AsyncComponent.js +136 -136
- package/lib/components/HOC/AuthenticatedComponent.d.ts +10 -10
- package/lib/components/HOC/AuthenticatedComponent.js +104 -104
- package/lib/components/HOC/CollectionComponent.d.ts +61 -61
- package/lib/components/HOC/CollectionComponent.js +175 -175
- package/lib/components/HOC/CollectionFirstItemComponent.d.ts +67 -67
- package/lib/components/HOC/CollectionFirstItemComponent.js +94 -94
- package/lib/components/HOC/CollectionItemComponent.d.ts +61 -61
- package/lib/components/HOC/CollectionItemComponent.js +172 -172
- package/lib/components/HOC/ConnectedModalComponent.d.ts +26 -26
- package/lib/components/HOC/ConnectedModalComponent.js +110 -110
- package/lib/components/HOC/DataDependentComponent.d.ts +61 -61
- package/lib/components/HOC/DataDependentComponent.js +90 -90
- package/lib/components/HOC/EntityComponent.d.ts +83 -83
- package/lib/components/HOC/EntityComponent.js +120 -120
- package/lib/components/HOC/FullscreenModalComponent.d.ts +74 -74
- package/lib/components/HOC/FullscreenModalComponent.js +173 -173
- package/lib/components/HOC/GroupActivityRequiredComponent.d.ts +29 -29
- package/lib/components/HOC/GroupActivityRequiredComponent.js +49 -49
- package/lib/components/HOC/GuidComponent.d.ts +14 -14
- package/lib/components/HOC/GuidComponent.js +72 -72
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.d.ts +172 -172
- package/lib/components/HOC/ModelContextDependencyVerifyComponent.js +72 -72
- package/lib/components/HOC/ModelErrorRedirectComponent.d.ts +69 -69
- package/lib/components/HOC/ModelErrorRedirectComponent.js +101 -101
- package/lib/components/HOC/SearchPersistorComponent.d.ts +85 -85
- package/lib/components/HOC/SearchPersistorComponent.js +198 -198
- package/lib/components/HOC/UnauthenticatedComponent.d.ts +62 -62
- package/lib/components/HOC/UnauthenticatedComponent.js +90 -90
- package/lib/components/HOC/UserComponent.d.ts +3 -3
- package/lib/components/HOC/UserComponent.js +12 -12
- package/lib/components/Icons/IconExternalUser.d.ts +3 -3
- package/lib/components/Icons/IconExternalUser.js +24 -24
- package/lib/components/Icons/IconImpersonation.d.ts +3 -3
- package/lib/components/Icons/IconImpersonation.js +24 -24
- package/lib/components/Icons/IconStopImpersonating.d.ts +3 -3
- package/lib/components/Icons/IconStopImpersonating.js +24 -24
- package/lib/components/Impersonation/Button.d.ts +7 -7
- package/lib/components/Impersonation/Button.js +61 -61
- package/lib/components/Impersonation/Link.d.ts +7 -7
- package/lib/components/Impersonation/Link.js +58 -58
- package/lib/components/Impersonation/UserDetail.css +22 -22
- package/lib/components/Impersonation/UserDetail.d.ts +22 -22
- package/lib/components/Impersonation/UserDetail.js +23 -23
- package/lib/components/Loading.d.ts +4 -4
- package/lib/components/Loading.js +24 -24
- package/lib/components/Lti/Confirm.d.ts +8 -8
- package/lib/components/Lti/Confirm.js +37 -37
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.d.ts +15 -15
- package/lib/components/Lti/CreateNonLtiGroupAlertDialog.js +83 -83
- package/lib/components/Lti/Launch.d.ts +21 -21
- package/lib/components/Lti/Launch.js +52 -52
- package/lib/components/Lti/LaunchGroup.d.ts +9 -9
- package/lib/components/Lti/LaunchGroup.js +45 -45
- package/lib/components/NewVersionAlert.d.ts +18 -18
- package/lib/components/NewVersionAlert.js +97 -97
- package/lib/components/NotFound.d.ts +3 -3
- package/lib/components/NotFound.js +28 -28
- package/lib/components/Notifications.d.ts +39 -39
- package/lib/components/Notifications.js +175 -175
- package/lib/components/RefreshIndicator/Bordered.d.ts +7 -7
- package/lib/components/RefreshIndicator/Bordered.js +35 -35
- package/lib/components/RefreshIndicator/Inline.d.ts +4 -4
- package/lib/components/RefreshIndicator/Inline.js +36 -36
- package/lib/components/RefreshIndicator/index.d.ts +21 -21
- package/lib/components/RefreshIndicator/index.js +116 -116
- package/lib/components/SearchControls.d.ts +14 -14
- package/lib/components/SearchControls.js +34 -34
- package/lib/components/SentryRoute.d.ts +3 -3
- package/lib/components/SentryRoute.js +25 -25
- package/lib/components/Tables/RoleFilter.d.ts +14 -14
- package/lib/components/Tables/RoleFilter.js +53 -53
- package/lib/components/Tables/TextFilter.d.ts +7 -7
- package/lib/components/Tables/TextFilter.js +26 -26
- package/lib/components/UserRoles/Add.d.ts +31 -31
- package/lib/components/UserRoles/Add.js +165 -165
- package/lib/components/UserRoles/RoleCell.d.ts +21 -21
- package/lib/components/UserRoles/RoleCell.js +53 -53
- package/lib/components/UserRoles/Select.d.ts +27 -27
- package/lib/components/UserRoles/Select.js +44 -44
- package/lib/components/UserRoles/Table.d.ts +16 -16
- package/lib/components/UserRoles/Table.js +99 -99
- package/lib/components/UserRoles/index.d.ts +76 -76
- package/lib/components/UserRoles/index.js +361 -361
- package/lib/constants/baseActivity.d.ts +25 -25
- package/lib/constants/baseActivity.js +29 -29
- package/lib/constants/baseRole.d.ts +9 -9
- package/lib/constants/baseRole.js +13 -13
- package/lib/constants/configuration.d.ts +8 -8
- package/lib/constants/configuration.js +39 -39
- package/lib/constants/externalProviderType.d.ts +5 -5
- package/lib/constants/externalProviderType.js +9 -9
- package/lib/constants/index.d.ts +8 -8
- package/lib/constants/index.js +20 -20
- package/lib/constants/mockData.d.ts +82 -84
- package/lib/constants/mockData.js +379 -379
- package/lib/constants/modelStatus.d.ts +10 -10
- package/lib/constants/modelStatus.js +14 -14
- package/lib/constants/notificationType.d.ts +7 -7
- package/lib/constants/notificationType.js +11 -11
- package/lib/constants/shard.d.ts +6 -6
- package/lib/constants/shard.js +10 -10
- package/lib/constants/tier.d.ts +6 -6
- package/lib/constants/tier.js +10 -10
- package/lib/constants/userRole.d.ts +2 -2
- package/lib/constants/userRole.js +21 -21
- package/lib/css/base/_base.css +98 -98
- package/lib/css/base/_typography.css +130 -130
- package/lib/css/components/_alert.css +85 -85
- package/lib/css/components/_bootstrap-grid.css +28 -28
- package/lib/css/components/_buttons.css +325 -325
- package/lib/css/components/_forms.css +91 -91
- package/lib/css/components/_menu.css +56 -56
- package/lib/css/components/_modals.css +41 -41
- package/lib/css/components/_tables.css +426 -426
- package/lib/css/components/_tags.css +12 -12
- package/lib/css/index-with-variables.css +14 -14
- package/lib/css/index.css +13 -13
- package/lib/css/utils/_border.css +463 -463
- package/lib/css/utils/_color.css +271 -271
- package/lib/css/utils/_display.css +312 -312
- package/lib/css/utils/_general.css +48 -48
- package/lib/css/utils/_icon.css +16 -16
- package/lib/css/utils/_text.css +24 -24
- package/lib/css/utils/_width.css +60 -60
- package/lib/css/variables.css +70 -70
- package/lib/endpointMappings.d.ts +4 -4
- package/lib/endpointMappings.js +173 -173
- package/lib/hooks/useCollection.d.ts +6 -6
- package/lib/hooks/useCollection.js +61 -61
- package/lib/hooks/useCollectionConfiguration.d.ts +27 -27
- package/lib/hooks/useCollectionConfiguration.js +67 -67
- package/lib/hooks/useCollectionItem.d.ts +6 -6
- package/lib/hooks/useCollectionItem.js +54 -54
- package/lib/hooks/useGuid.d.ts +4 -4
- package/lib/hooks/useGuid.js +14 -14
- package/lib/hooks/usePrevious.d.ts +5 -5
- package/lib/hooks/usePrevious.js +18 -18
- package/lib/index.d.ts +8 -8
- package/lib/index.js +30 -30
- package/lib/redux/actionCreator.d.ts +5 -5
- package/lib/redux/actionCreator.js +16 -16
- package/lib/redux/actions.d.ts +12 -12
- package/lib/redux/actions.js +30 -30
- package/lib/redux/configureReducers.d.ts +22 -22
- package/lib/redux/configureReducers.js +94 -94
- package/lib/redux/configureStore.d.ts +14 -14
- package/lib/redux/configureStore.js +118 -118
- package/lib/redux/helpers.d.ts +2 -2
- package/lib/redux/helpers.js +7 -7
- package/lib/redux/reducers/index.d.ts +4 -4
- package/lib/redux/reducers/index.js +12 -12
- package/lib/redux/reducers/modalsReducer.d.ts +8 -8
- package/lib/redux/reducers/modalsReducer.js +54 -54
- package/lib/redux/reducers/notificationsReducer.d.ts +9 -9
- package/lib/redux/reducers/notificationsReducer.js +27 -27
- package/lib/redux/reducers/searchReducer.d.ts +17 -17
- package/lib/redux/reducers/searchReducer.js +26 -26
- package/lib/redux/sagas/caliperSaga.d.ts +2 -2
- package/lib/redux/sagas/caliperSaga.js +296 -296
- package/lib/redux/sagas/clockOffsetSaga.d.ts +10 -10
- package/lib/redux/sagas/clockOffsetSaga.js +81 -81
- package/lib/redux/sagas/configurationSaga.d.ts +1 -1
- package/lib/redux/sagas/configurationSaga.js +48 -48
- package/lib/redux/sagas/errorSaga.d.ts +2 -2
- package/lib/redux/sagas/errorSaga.js +66 -66
- package/lib/redux/sagas/identityProviderSaga.d.ts +2 -2
- package/lib/redux/sagas/identityProviderSaga.js +91 -91
- package/lib/redux/sagas/initialDataLoadSaga.d.ts +1 -1
- package/lib/redux/sagas/initialDataLoadSaga.js +33 -33
- package/lib/redux/sagas/postLoginDataSaga.d.ts +9 -9
- package/lib/redux/sagas/postLoginDataSaga.js +87 -87
- package/lib/redux/sagas/postLoginRedirectSaga.d.ts +6 -6
- package/lib/redux/sagas/postLoginRedirectSaga.js +96 -96
- package/lib/redux/sagas/rootSaga.d.ts +5 -5
- package/lib/redux/sagas/rootSaga.js +144 -144
- package/lib/redux/sagas/sentrySaga.d.ts +1 -1
- package/lib/redux/sagas/sentrySaga.js +103 -103
- package/lib/services/codeProviderService.d.ts +3 -3
- package/lib/services/codeProviderService.js +36 -36
- package/lib/services/documentService.d.ts +10 -10
- package/lib/services/documentService.js +17 -17
- package/lib/services/persistenceService.d.ts +13 -13
- package/lib/services/persistenceService.js +45 -45
- package/lib/services/ticketProviderService.d.ts +3 -3
- package/lib/services/ticketProviderService.js +40 -40
- package/lib/services/windowService.d.ts +9 -9
- package/lib/services/windowService.js +15 -15
- package/lib/setupTests.d.ts +1 -1
- package/lib/setupTests.js +25 -25
- package/lib/startup.d.ts +29 -29
- package/lib/startup.js +128 -128
- package/lib/types/AppConfiguration.d.ts +32 -32
- package/lib/types/AppConfiguration.js +2 -2
- package/lib/types/Artifact.d.ts +14 -14
- package/lib/types/Artifact.js +9 -9
- package/lib/types/BaseReduxState.d.ts +57 -57
- package/lib/types/BaseReduxState.js +2 -2
- package/lib/types/Client.d.ts +6 -6
- package/lib/types/Client.js +2 -2
- package/lib/types/Collection.d.ts +175 -175
- package/lib/types/Collection.js +2 -2
- package/lib/types/Configuration.d.ts +12 -12
- package/lib/types/Configuration.js +2 -2
- package/lib/types/DeepLinkingResponseRequest.d.ts +4 -4
- package/lib/types/DeepLinkingResponseRequest.js +2 -2
- package/lib/types/DeletableModel.d.ts +4 -4
- package/lib/types/DeletableModel.js +2 -2
- package/lib/types/External.d.ts +31 -31
- package/lib/types/External.js +2 -2
- package/lib/types/Group.d.ts +19 -19
- package/lib/types/Group.js +2 -2
- package/lib/types/IdentityProvider.d.ts +11 -11
- package/lib/types/IdentityProvider.js +2 -2
- package/lib/types/LtiLaunch.d.ts +20 -20
- package/lib/types/LtiLaunch.js +2 -2
- package/lib/types/NameOnlyEntity.d.ts +3 -3
- package/lib/types/NameOnlyEntity.js +2 -2
- package/lib/types/Notification.d.ts +15 -15
- package/lib/types/Notification.js +2 -2
- package/lib/types/OptionalRecord.d.ts +4 -4
- package/lib/types/OptionalRecord.js +2 -2
- package/lib/types/OwnerSchedule.d.ts +9 -9
- package/lib/types/OwnerSchedule.js +2 -2
- package/lib/types/PropertyOfType.d.ts +12 -12
- package/lib/types/PropertyOfType.js +2 -2
- package/lib/types/RoleDescription.d.ts +4 -4
- package/lib/types/RoleDescription.js +2 -2
- package/lib/types/Search.d.ts +11 -11
- package/lib/types/Search.js +2 -2
- package/lib/types/SimpleLocation.d.ts +46 -46
- package/lib/types/SimpleLocation.js +2 -2
- package/lib/types/UniTime.d.ts +17 -17
- package/lib/types/UniTime.js +2 -2
- package/lib/types/User.d.ts +68 -68
- package/lib/types/User.js +2 -2
- package/lib/types/UserRole.d.ts +19 -19
- package/lib/types/UserRole.js +2 -2
- package/lib/types/index.d.ts +21 -21
- package/lib/types/index.js +33 -33
- package/lib/utils/baseActivity.d.ts +63 -63
- package/lib/utils/baseActivity.js +155 -155
- package/lib/utils/baseRole.d.ts +2 -2
- package/lib/utils/baseRole.js +38 -38
- package/lib/utils/collection.d.ts +43 -43
- package/lib/utils/collection.js +337 -337
- package/lib/utils/date.d.ts +162 -162
- package/lib/utils/date.js +401 -401
- package/lib/utils/domainIdentifier.d.ts +2 -2
- package/lib/utils/domainIdentifier.js +12 -12
- package/lib/utils/entityUserRole.d.ts +3 -3
- package/lib/utils/entityUserRole.js +7 -7
- package/lib/utils/externalGroup.d.ts +4 -4
- package/lib/utils/externalGroup.js +32 -32
- package/lib/utils/externalProviders.d.ts +2 -2
- package/lib/utils/externalProviders.js +11 -11
- package/lib/utils/externalTerms.d.ts +2 -2
- package/lib/utils/externalTerms.js +10 -10
- package/lib/utils/group.d.ts +15 -15
- package/lib/utils/group.js +15 -15
- package/lib/utils/groupDates.d.ts +9 -9
- package/lib/utils/groupDates.js +52 -52
- package/lib/utils/groupRoles.d.ts +8 -8
- package/lib/utils/groupRoles.js +42 -42
- package/lib/utils/logger.d.ts +10 -10
- package/lib/utils/logger.js +34 -34
- package/lib/utils/lti.d.ts +3 -3
- package/lib/utils/lti.js +9 -9
- package/lib/utils/model.d.ts +15 -15
- package/lib/utils/model.js +58 -58
- package/lib/utils/number.d.ts +13 -13
- package/lib/utils/number.js +32 -32
- package/lib/utils/promise.d.ts +5 -5
- package/lib/utils/promise.js +17 -17
- package/lib/utils/route.d.ts +5 -5
- package/lib/utils/route.js +69 -69
- package/lib/utils/shard.d.ts +3 -3
- package/lib/utils/shard.js +45 -45
- package/lib/utils/sort.d.ts +11 -11
- package/lib/utils/sort.js +69 -69
- package/lib/utils/string.d.ts +2 -2
- package/lib/utils/string.js +16 -16
- package/lib/utils/timezone.d.ts +2 -2
- package/lib/utils/timezone.js +32 -32
- package/lib/utils/url.d.ts +23 -23
- package/lib/utils/url.js +163 -163
- package/lib/utils/user.d.ts +8 -8
- package/lib/utils/user.js +73 -73
- package/lib/utils/userRole.d.ts +21 -21
- package/lib/utils/userRole.js +48 -48
- package/package.json +192 -192
|
@@ -1,296 +1,296 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
3
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
4
|
-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
5
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
6
|
-
function step(op) {
|
|
7
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
8
|
-
while (_) try {
|
|
9
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
10
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
11
|
-
switch (op[0]) {
|
|
12
|
-
case 0: case 1: t = op; break;
|
|
13
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
14
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
15
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
16
|
-
default:
|
|
17
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
18
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
19
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
20
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
21
|
-
if (t[2]) _.ops.pop();
|
|
22
|
-
_.trys.pop(); continue;
|
|
23
|
-
}
|
|
24
|
-
op = body.call(thisArg, _);
|
|
25
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
26
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
30
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
31
|
-
};
|
|
32
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
-
var effects_1 = require("redux-saga/effects");
|
|
34
|
-
var studiokit_auth_js_1 = require("studiokit-auth-js");
|
|
35
|
-
var studiokit_caliper_js_1 = require("studiokit-caliper-js");
|
|
36
|
-
var studiokit_net_js_1 = require("studiokit-net-js");
|
|
37
|
-
var configuration_1 = require("../../constants/configuration");
|
|
38
|
-
var persistenceService_1 = __importDefault(require("../../services/persistenceService"));
|
|
39
|
-
var date_1 = require("../../utils/date");
|
|
40
|
-
var actionCreator_1 = require("../actionCreator");
|
|
41
|
-
//#region Local Variables
|
|
42
|
-
var service;
|
|
43
|
-
var caliperToken;
|
|
44
|
-
//#endregion Local Variables
|
|
45
|
-
//#region CaliperService Helpers
|
|
46
|
-
function initializeCaliperService(shardConfig) {
|
|
47
|
-
var appConfig = configuration_1.getAppConfig();
|
|
48
|
-
if (!shardConfig.caliperEventStoreHostname) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
var sensorOptions = Object.assign({}, appConfig.CALIPER_EVENT_STORE_OPTIONS, {
|
|
52
|
-
hostname: shardConfig.caliperEventStoreHostname
|
|
53
|
-
});
|
|
54
|
-
var options = {
|
|
55
|
-
sensorId: appConfig.CALIPER_SENSOR_ID,
|
|
56
|
-
sensorOptions: sensorOptions,
|
|
57
|
-
appId: appConfig.CALIPER_SENSOR_APP_ID,
|
|
58
|
-
appName: appConfig.CALIPER_SENSOR_APP_NAME,
|
|
59
|
-
getToken: function () {
|
|
60
|
-
return new Promise(function (resolve, reject) {
|
|
61
|
-
if (caliperToken) {
|
|
62
|
-
resolve(caliperToken);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
reject(new Error('`caliperToken` is undefined'));
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
},
|
|
69
|
-
// disable auto send, the saga will handle this
|
|
70
|
-
autoSend: false
|
|
71
|
-
};
|
|
72
|
-
var service = new studiokit_caliper_js_1.BrowserCaliperService(options);
|
|
73
|
-
return service;
|
|
74
|
-
}
|
|
75
|
-
function setCaliperPerson(userData) {
|
|
76
|
-
var _a, _b;
|
|
77
|
-
var appConfig = configuration_1.getAppConfig();
|
|
78
|
-
var shardConfig = configuration_1.getShardConfig();
|
|
79
|
-
var personNamespace = shardConfig.caliperPersonNamespace;
|
|
80
|
-
var id = "" + personNamespace + userData.puid;
|
|
81
|
-
var extensions = {};
|
|
82
|
-
extensions[appConfig.CALIPER_EXTENSIONS_NAMESPACE + ".userId"] = userData.id;
|
|
83
|
-
service.setPerson(id, (_a = userData.firstName) !== null && _a !== void 0 ? _a : undefined, (_b = userData.lastName) !== null && _b !== void 0 ? _b : undefined, extensions);
|
|
84
|
-
return Promise.resolve();
|
|
85
|
-
}
|
|
86
|
-
function startCaliperSession() {
|
|
87
|
-
var appConfig = configuration_1.getAppConfig();
|
|
88
|
-
var extensions = {};
|
|
89
|
-
extensions[appConfig.CALIPER_EXTENSIONS_NAMESPACE + ".userAgent"] = navigator.userAgent;
|
|
90
|
-
service.startSession(extensions);
|
|
91
|
-
return Promise.resolve();
|
|
92
|
-
}
|
|
93
|
-
function endCaliperSession() {
|
|
94
|
-
service.endSession();
|
|
95
|
-
return Promise.resolve();
|
|
96
|
-
}
|
|
97
|
-
function setPersonAndStartCaliperSession(userData) {
|
|
98
|
-
void setCaliperPerson(userData);
|
|
99
|
-
void startCaliperSession();
|
|
100
|
-
}
|
|
101
|
-
function isTokenExpired(caliperToken) {
|
|
102
|
-
return new Date(caliperToken.expires) <= date_1.getServerNowUtc();
|
|
103
|
-
}
|
|
104
|
-
//#endregion CaliperService Helpers
|
|
105
|
-
/**
|
|
106
|
-
* Load the persisted `caliperToken`, if any. This token is persisted by the CaliperService,
|
|
107
|
-
* but we load it in order to check expiry.
|
|
108
|
-
*/
|
|
109
|
-
function loadToken() {
|
|
110
|
-
var caliperToken;
|
|
111
|
-
return __generator(this, function (_a) {
|
|
112
|
-
switch (_a.label) {
|
|
113
|
-
case 0: return [4 /*yield*/, effects_1.call(persistenceService_1.default.getPersistedCaliperToken)];
|
|
114
|
-
case 1:
|
|
115
|
-
caliperToken = _a.sent();
|
|
116
|
-
if (caliperToken)
|
|
117
|
-
return [2 /*return*/, caliperToken];
|
|
118
|
-
return [2 /*return*/, undefined];
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Load a new `caliperToken` from the API. Returns `undefined` if the data request fails.
|
|
124
|
-
*/
|
|
125
|
-
function getToken() {
|
|
126
|
-
var _a, receivedResult, failedResult, caliperToken_1;
|
|
127
|
-
return __generator(this, function (_b) {
|
|
128
|
-
switch (_b.label) {
|
|
129
|
-
case 0:
|
|
130
|
-
actionCreator_1.dispatchAction(studiokit_net_js_1.NET_ACTION.DATA_REQUESTED, { modelName: 'caliperToken', noStore: true });
|
|
131
|
-
return [4 /*yield*/, effects_1.race({
|
|
132
|
-
receivedResult: effects_1.take(function (action) {
|
|
133
|
-
return action.type === studiokit_net_js_1.NET_ACTION.TRANSIENT_FETCH_RESULT_RECEIVED && action.modelName === 'caliperToken';
|
|
134
|
-
}),
|
|
135
|
-
failedResult: effects_1.take(function (action) { return action.type === studiokit_net_js_1.NET_ACTION.TRANSIENT_FETCH_FAILED && action.modelName === 'caliperToken'; })
|
|
136
|
-
})];
|
|
137
|
-
case 1:
|
|
138
|
-
_a = _b.sent(), receivedResult = _a.receivedResult, failedResult = _a.failedResult;
|
|
139
|
-
if (receivedResult && receivedResult.data) {
|
|
140
|
-
caliperToken_1 = {
|
|
141
|
-
accessToken: receivedResult.data.access_token,
|
|
142
|
-
expires: receivedResult.data['.expires']
|
|
143
|
-
};
|
|
144
|
-
return [2 /*return*/, caliperToken_1];
|
|
145
|
-
}
|
|
146
|
-
return [2 /*return*/, undefined];
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Calls `getToken`, but keeps retrying until a token is successfully loaded, using a back-off delay strategy.
|
|
152
|
-
*/
|
|
153
|
-
function getTokenWithRetry() {
|
|
154
|
-
var caliperToken, tryCount;
|
|
155
|
-
return __generator(this, function (_a) {
|
|
156
|
-
switch (_a.label) {
|
|
157
|
-
case 0: return [4 /*yield*/, effects_1.call(getToken)
|
|
158
|
-
// handle failing to load token
|
|
159
|
-
];
|
|
160
|
-
case 1:
|
|
161
|
-
caliperToken = _a.sent();
|
|
162
|
-
tryCount = 1;
|
|
163
|
-
_a.label = 2;
|
|
164
|
-
case 2:
|
|
165
|
-
if (!!caliperToken) return [3 /*break*/, 5];
|
|
166
|
-
// back-off delay
|
|
167
|
-
return [4 /*yield*/, effects_1.delay(Math.min(1000 * 60, 2 ^ (tryCount * 100)))]; // 100, 200, 400...
|
|
168
|
-
case 3:
|
|
169
|
-
// back-off delay
|
|
170
|
-
_a.sent(); // 100, 200, 400...
|
|
171
|
-
return [4 /*yield*/, effects_1.call(getToken)];
|
|
172
|
-
case 4:
|
|
173
|
-
caliperToken = _a.sent();
|
|
174
|
-
tryCount++;
|
|
175
|
-
return [3 /*break*/, 2];
|
|
176
|
-
case 5: return [2 /*return*/, caliperToken];
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Saga decorator for the `CaliperService.send` method
|
|
182
|
-
*/
|
|
183
|
-
function send() {
|
|
184
|
-
var _a;
|
|
185
|
-
return __generator(this, function (_b) {
|
|
186
|
-
switch (_b.label) {
|
|
187
|
-
case 0:
|
|
188
|
-
_b.trys.push([0, 2, , 3]);
|
|
189
|
-
return [4 /*yield*/, effects_1.call(service.send)];
|
|
190
|
-
case 1:
|
|
191
|
-
_b.sent();
|
|
192
|
-
return [3 /*break*/, 3];
|
|
193
|
-
case 2:
|
|
194
|
-
_a = _b.sent();
|
|
195
|
-
return [3 /*break*/, 3];
|
|
196
|
-
case 3: return [2 /*return*/];
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Saga decorator for the `CaliperService.send` method,
|
|
202
|
-
* which will refresh the `caliperToken` if needed before calling `send`
|
|
203
|
-
*/
|
|
204
|
-
function sendWithTokenRefreshIfNeeded() {
|
|
205
|
-
return __generator(this, function (_a) {
|
|
206
|
-
switch (_a.label) {
|
|
207
|
-
case 0:
|
|
208
|
-
if (!(!caliperToken || isTokenExpired(caliperToken))) return [3 /*break*/, 2];
|
|
209
|
-
return [4 /*yield*/, effects_1.call(getTokenWithRetry)];
|
|
210
|
-
case 1:
|
|
211
|
-
caliperToken = _a.sent();
|
|
212
|
-
_a.label = 2;
|
|
213
|
-
case 2:
|
|
214
|
-
// send
|
|
215
|
-
return [4 /*yield*/, effects_1.call(send)];
|
|
216
|
-
case 3:
|
|
217
|
-
// send
|
|
218
|
-
_a.sent();
|
|
219
|
-
return [2 /*return*/];
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Saga fork implementing the "auto send" functionality from `CaliperService.
|
|
225
|
-
* Calls `send` every 10 seconds.
|
|
226
|
-
*/
|
|
227
|
-
function autoSend() {
|
|
228
|
-
return __generator(this, function (_a) {
|
|
229
|
-
switch (_a.label) {
|
|
230
|
-
case 0:
|
|
231
|
-
if (!true) return [3 /*break*/, 3];
|
|
232
|
-
// try to send every 10 seconds
|
|
233
|
-
return [4 /*yield*/, effects_1.delay(10 * 1000)];
|
|
234
|
-
case 1:
|
|
235
|
-
// try to send every 10 seconds
|
|
236
|
-
_a.sent();
|
|
237
|
-
return [4 /*yield*/, effects_1.call(sendWithTokenRefreshIfNeeded)];
|
|
238
|
-
case 2:
|
|
239
|
-
_a.sent();
|
|
240
|
-
return [3 /*break*/, 0];
|
|
241
|
-
case 3: return [2 /*return*/];
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
function caliperSaga() {
|
|
246
|
-
var configurationResult, configuration, userInfo, autoSendTask;
|
|
247
|
-
return __generator(this, function (_a) {
|
|
248
|
-
switch (_a.label) {
|
|
249
|
-
case 0: return [4 /*yield*/, effects_1.take(function (action) { return action.type === studiokit_net_js_1.NET_ACTION.FETCH_RESULT_RECEIVED && action.modelName === 'configuration'; })];
|
|
250
|
-
case 1:
|
|
251
|
-
configurationResult = _a.sent();
|
|
252
|
-
configuration = configurationResult.data;
|
|
253
|
-
// do not proceed if caliper is not enabled or is missing hostname
|
|
254
|
-
if (!configuration.caliperEnabled || !configuration.caliperEventStoreHostname) {
|
|
255
|
-
return [2 /*return*/];
|
|
256
|
-
}
|
|
257
|
-
return [4 /*yield*/, effects_1.call(loadToken)
|
|
258
|
-
// initialize caliper service
|
|
259
|
-
];
|
|
260
|
-
case 2:
|
|
261
|
-
// load persisted token, if any
|
|
262
|
-
caliperToken = _a.sent();
|
|
263
|
-
return [4 /*yield*/, effects_1.call(initializeCaliperService, configuration)];
|
|
264
|
-
case 3:
|
|
265
|
-
// initialize caliper service
|
|
266
|
-
service = _a.sent();
|
|
267
|
-
_a.label = 4;
|
|
268
|
-
case 4:
|
|
269
|
-
if (!true) return [3 /*break*/, 10];
|
|
270
|
-
return [4 /*yield*/, effects_1.take(function (action) { return action.type === studiokit_net_js_1.NET_ACTION.FETCH_RESULT_RECEIVED && action.modelName === 'user.userInfo'; })];
|
|
271
|
-
case 5:
|
|
272
|
-
userInfo = _a.sent();
|
|
273
|
-
return [4 /*yield*/, effects_1.fork(autoSend)];
|
|
274
|
-
case 6:
|
|
275
|
-
autoSendTask = _a.sent();
|
|
276
|
-
setPersonAndStartCaliperSession(userInfo.data);
|
|
277
|
-
// user logs out => stop auto-send and end session
|
|
278
|
-
return [4 /*yield*/, effects_1.take(studiokit_auth_js_1.AUTH_ACTION.LOG_OUT_REQUESTED)];
|
|
279
|
-
case 7:
|
|
280
|
-
// user logs out => stop auto-send and end session
|
|
281
|
-
_a.sent();
|
|
282
|
-
return [4 /*yield*/, effects_1.cancel(autoSendTask)];
|
|
283
|
-
case 8:
|
|
284
|
-
_a.sent();
|
|
285
|
-
void endCaliperSession();
|
|
286
|
-
// attempt to send the session end event once, w/ no token refresh since logged out
|
|
287
|
-
return [4 /*yield*/, effects_1.call(send)];
|
|
288
|
-
case 9:
|
|
289
|
-
// attempt to send the session end event once, w/ no token refresh since logged out
|
|
290
|
-
_a.sent();
|
|
291
|
-
return [3 /*break*/, 4];
|
|
292
|
-
case 10: return [2 /*return*/];
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
exports.default = caliperSaga;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
3
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
4
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
5
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
6
|
+
function step(op) {
|
|
7
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
8
|
+
while (_) try {
|
|
9
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
10
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
11
|
+
switch (op[0]) {
|
|
12
|
+
case 0: case 1: t = op; break;
|
|
13
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
14
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
15
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
16
|
+
default:
|
|
17
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
18
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
19
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
20
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
21
|
+
if (t[2]) _.ops.pop();
|
|
22
|
+
_.trys.pop(); continue;
|
|
23
|
+
}
|
|
24
|
+
op = body.call(thisArg, _);
|
|
25
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
26
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
30
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
31
|
+
};
|
|
32
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
33
|
+
var effects_1 = require("redux-saga/effects");
|
|
34
|
+
var studiokit_auth_js_1 = require("studiokit-auth-js");
|
|
35
|
+
var studiokit_caliper_js_1 = require("studiokit-caliper-js");
|
|
36
|
+
var studiokit_net_js_1 = require("studiokit-net-js");
|
|
37
|
+
var configuration_1 = require("../../constants/configuration");
|
|
38
|
+
var persistenceService_1 = __importDefault(require("../../services/persistenceService"));
|
|
39
|
+
var date_1 = require("../../utils/date");
|
|
40
|
+
var actionCreator_1 = require("../actionCreator");
|
|
41
|
+
//#region Local Variables
|
|
42
|
+
var service;
|
|
43
|
+
var caliperToken;
|
|
44
|
+
//#endregion Local Variables
|
|
45
|
+
//#region CaliperService Helpers
|
|
46
|
+
function initializeCaliperService(shardConfig) {
|
|
47
|
+
var appConfig = configuration_1.getAppConfig();
|
|
48
|
+
if (!shardConfig.caliperEventStoreHostname) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
var sensorOptions = Object.assign({}, appConfig.CALIPER_EVENT_STORE_OPTIONS, {
|
|
52
|
+
hostname: shardConfig.caliperEventStoreHostname
|
|
53
|
+
});
|
|
54
|
+
var options = {
|
|
55
|
+
sensorId: appConfig.CALIPER_SENSOR_ID,
|
|
56
|
+
sensorOptions: sensorOptions,
|
|
57
|
+
appId: appConfig.CALIPER_SENSOR_APP_ID,
|
|
58
|
+
appName: appConfig.CALIPER_SENSOR_APP_NAME,
|
|
59
|
+
getToken: function () {
|
|
60
|
+
return new Promise(function (resolve, reject) {
|
|
61
|
+
if (caliperToken) {
|
|
62
|
+
resolve(caliperToken);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
reject(new Error('`caliperToken` is undefined'));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
},
|
|
69
|
+
// disable auto send, the saga will handle this
|
|
70
|
+
autoSend: false
|
|
71
|
+
};
|
|
72
|
+
var service = new studiokit_caliper_js_1.BrowserCaliperService(options);
|
|
73
|
+
return service;
|
|
74
|
+
}
|
|
75
|
+
function setCaliperPerson(userData) {
|
|
76
|
+
var _a, _b;
|
|
77
|
+
var appConfig = configuration_1.getAppConfig();
|
|
78
|
+
var shardConfig = configuration_1.getShardConfig();
|
|
79
|
+
var personNamespace = shardConfig.caliperPersonNamespace;
|
|
80
|
+
var id = "" + personNamespace + userData.puid;
|
|
81
|
+
var extensions = {};
|
|
82
|
+
extensions[appConfig.CALIPER_EXTENSIONS_NAMESPACE + ".userId"] = userData.id;
|
|
83
|
+
service.setPerson(id, (_a = userData.firstName) !== null && _a !== void 0 ? _a : undefined, (_b = userData.lastName) !== null && _b !== void 0 ? _b : undefined, extensions);
|
|
84
|
+
return Promise.resolve();
|
|
85
|
+
}
|
|
86
|
+
function startCaliperSession() {
|
|
87
|
+
var appConfig = configuration_1.getAppConfig();
|
|
88
|
+
var extensions = {};
|
|
89
|
+
extensions[appConfig.CALIPER_EXTENSIONS_NAMESPACE + ".userAgent"] = navigator.userAgent;
|
|
90
|
+
service.startSession(extensions);
|
|
91
|
+
return Promise.resolve();
|
|
92
|
+
}
|
|
93
|
+
function endCaliperSession() {
|
|
94
|
+
service.endSession();
|
|
95
|
+
return Promise.resolve();
|
|
96
|
+
}
|
|
97
|
+
function setPersonAndStartCaliperSession(userData) {
|
|
98
|
+
void setCaliperPerson(userData);
|
|
99
|
+
void startCaliperSession();
|
|
100
|
+
}
|
|
101
|
+
function isTokenExpired(caliperToken) {
|
|
102
|
+
return new Date(caliperToken.expires) <= date_1.getServerNowUtc();
|
|
103
|
+
}
|
|
104
|
+
//#endregion CaliperService Helpers
|
|
105
|
+
/**
|
|
106
|
+
* Load the persisted `caliperToken`, if any. This token is persisted by the CaliperService,
|
|
107
|
+
* but we load it in order to check expiry.
|
|
108
|
+
*/
|
|
109
|
+
function loadToken() {
|
|
110
|
+
var caliperToken;
|
|
111
|
+
return __generator(this, function (_a) {
|
|
112
|
+
switch (_a.label) {
|
|
113
|
+
case 0: return [4 /*yield*/, effects_1.call(persistenceService_1.default.getPersistedCaliperToken)];
|
|
114
|
+
case 1:
|
|
115
|
+
caliperToken = _a.sent();
|
|
116
|
+
if (caliperToken)
|
|
117
|
+
return [2 /*return*/, caliperToken];
|
|
118
|
+
return [2 /*return*/, undefined];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Load a new `caliperToken` from the API. Returns `undefined` if the data request fails.
|
|
124
|
+
*/
|
|
125
|
+
function getToken() {
|
|
126
|
+
var _a, receivedResult, failedResult, caliperToken_1;
|
|
127
|
+
return __generator(this, function (_b) {
|
|
128
|
+
switch (_b.label) {
|
|
129
|
+
case 0:
|
|
130
|
+
actionCreator_1.dispatchAction(studiokit_net_js_1.NET_ACTION.DATA_REQUESTED, { modelName: 'caliperToken', noStore: true });
|
|
131
|
+
return [4 /*yield*/, effects_1.race({
|
|
132
|
+
receivedResult: effects_1.take(function (action) {
|
|
133
|
+
return action.type === studiokit_net_js_1.NET_ACTION.TRANSIENT_FETCH_RESULT_RECEIVED && action.modelName === 'caliperToken';
|
|
134
|
+
}),
|
|
135
|
+
failedResult: effects_1.take(function (action) { return action.type === studiokit_net_js_1.NET_ACTION.TRANSIENT_FETCH_FAILED && action.modelName === 'caliperToken'; })
|
|
136
|
+
})];
|
|
137
|
+
case 1:
|
|
138
|
+
_a = _b.sent(), receivedResult = _a.receivedResult, failedResult = _a.failedResult;
|
|
139
|
+
if (receivedResult && receivedResult.data) {
|
|
140
|
+
caliperToken_1 = {
|
|
141
|
+
accessToken: receivedResult.data.access_token,
|
|
142
|
+
expires: receivedResult.data['.expires']
|
|
143
|
+
};
|
|
144
|
+
return [2 /*return*/, caliperToken_1];
|
|
145
|
+
}
|
|
146
|
+
return [2 /*return*/, undefined];
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Calls `getToken`, but keeps retrying until a token is successfully loaded, using a back-off delay strategy.
|
|
152
|
+
*/
|
|
153
|
+
function getTokenWithRetry() {
|
|
154
|
+
var caliperToken, tryCount;
|
|
155
|
+
return __generator(this, function (_a) {
|
|
156
|
+
switch (_a.label) {
|
|
157
|
+
case 0: return [4 /*yield*/, effects_1.call(getToken)
|
|
158
|
+
// handle failing to load token
|
|
159
|
+
];
|
|
160
|
+
case 1:
|
|
161
|
+
caliperToken = _a.sent();
|
|
162
|
+
tryCount = 1;
|
|
163
|
+
_a.label = 2;
|
|
164
|
+
case 2:
|
|
165
|
+
if (!!caliperToken) return [3 /*break*/, 5];
|
|
166
|
+
// back-off delay
|
|
167
|
+
return [4 /*yield*/, effects_1.delay(Math.min(1000 * 60, 2 ^ (tryCount * 100)))]; // 100, 200, 400...
|
|
168
|
+
case 3:
|
|
169
|
+
// back-off delay
|
|
170
|
+
_a.sent(); // 100, 200, 400...
|
|
171
|
+
return [4 /*yield*/, effects_1.call(getToken)];
|
|
172
|
+
case 4:
|
|
173
|
+
caliperToken = _a.sent();
|
|
174
|
+
tryCount++;
|
|
175
|
+
return [3 /*break*/, 2];
|
|
176
|
+
case 5: return [2 /*return*/, caliperToken];
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Saga decorator for the `CaliperService.send` method
|
|
182
|
+
*/
|
|
183
|
+
function send() {
|
|
184
|
+
var _a;
|
|
185
|
+
return __generator(this, function (_b) {
|
|
186
|
+
switch (_b.label) {
|
|
187
|
+
case 0:
|
|
188
|
+
_b.trys.push([0, 2, , 3]);
|
|
189
|
+
return [4 /*yield*/, effects_1.call(service.send)];
|
|
190
|
+
case 1:
|
|
191
|
+
_b.sent();
|
|
192
|
+
return [3 /*break*/, 3];
|
|
193
|
+
case 2:
|
|
194
|
+
_a = _b.sent();
|
|
195
|
+
return [3 /*break*/, 3];
|
|
196
|
+
case 3: return [2 /*return*/];
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Saga decorator for the `CaliperService.send` method,
|
|
202
|
+
* which will refresh the `caliperToken` if needed before calling `send`
|
|
203
|
+
*/
|
|
204
|
+
function sendWithTokenRefreshIfNeeded() {
|
|
205
|
+
return __generator(this, function (_a) {
|
|
206
|
+
switch (_a.label) {
|
|
207
|
+
case 0:
|
|
208
|
+
if (!(!caliperToken || isTokenExpired(caliperToken))) return [3 /*break*/, 2];
|
|
209
|
+
return [4 /*yield*/, effects_1.call(getTokenWithRetry)];
|
|
210
|
+
case 1:
|
|
211
|
+
caliperToken = _a.sent();
|
|
212
|
+
_a.label = 2;
|
|
213
|
+
case 2:
|
|
214
|
+
// send
|
|
215
|
+
return [4 /*yield*/, effects_1.call(send)];
|
|
216
|
+
case 3:
|
|
217
|
+
// send
|
|
218
|
+
_a.sent();
|
|
219
|
+
return [2 /*return*/];
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Saga fork implementing the "auto send" functionality from `CaliperService.
|
|
225
|
+
* Calls `send` every 10 seconds.
|
|
226
|
+
*/
|
|
227
|
+
function autoSend() {
|
|
228
|
+
return __generator(this, function (_a) {
|
|
229
|
+
switch (_a.label) {
|
|
230
|
+
case 0:
|
|
231
|
+
if (!true) return [3 /*break*/, 3];
|
|
232
|
+
// try to send every 10 seconds
|
|
233
|
+
return [4 /*yield*/, effects_1.delay(10 * 1000)];
|
|
234
|
+
case 1:
|
|
235
|
+
// try to send every 10 seconds
|
|
236
|
+
_a.sent();
|
|
237
|
+
return [4 /*yield*/, effects_1.call(sendWithTokenRefreshIfNeeded)];
|
|
238
|
+
case 2:
|
|
239
|
+
_a.sent();
|
|
240
|
+
return [3 /*break*/, 0];
|
|
241
|
+
case 3: return [2 /*return*/];
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
function caliperSaga() {
|
|
246
|
+
var configurationResult, configuration, userInfo, autoSendTask;
|
|
247
|
+
return __generator(this, function (_a) {
|
|
248
|
+
switch (_a.label) {
|
|
249
|
+
case 0: return [4 /*yield*/, effects_1.take(function (action) { return action.type === studiokit_net_js_1.NET_ACTION.FETCH_RESULT_RECEIVED && action.modelName === 'configuration'; })];
|
|
250
|
+
case 1:
|
|
251
|
+
configurationResult = _a.sent();
|
|
252
|
+
configuration = configurationResult.data;
|
|
253
|
+
// do not proceed if caliper is not enabled or is missing hostname
|
|
254
|
+
if (!configuration.caliperEnabled || !configuration.caliperEventStoreHostname) {
|
|
255
|
+
return [2 /*return*/];
|
|
256
|
+
}
|
|
257
|
+
return [4 /*yield*/, effects_1.call(loadToken)
|
|
258
|
+
// initialize caliper service
|
|
259
|
+
];
|
|
260
|
+
case 2:
|
|
261
|
+
// load persisted token, if any
|
|
262
|
+
caliperToken = _a.sent();
|
|
263
|
+
return [4 /*yield*/, effects_1.call(initializeCaliperService, configuration)];
|
|
264
|
+
case 3:
|
|
265
|
+
// initialize caliper service
|
|
266
|
+
service = _a.sent();
|
|
267
|
+
_a.label = 4;
|
|
268
|
+
case 4:
|
|
269
|
+
if (!true) return [3 /*break*/, 10];
|
|
270
|
+
return [4 /*yield*/, effects_1.take(function (action) { return action.type === studiokit_net_js_1.NET_ACTION.FETCH_RESULT_RECEIVED && action.modelName === 'user.userInfo'; })];
|
|
271
|
+
case 5:
|
|
272
|
+
userInfo = _a.sent();
|
|
273
|
+
return [4 /*yield*/, effects_1.fork(autoSend)];
|
|
274
|
+
case 6:
|
|
275
|
+
autoSendTask = _a.sent();
|
|
276
|
+
setPersonAndStartCaliperSession(userInfo.data);
|
|
277
|
+
// user logs out => stop auto-send and end session
|
|
278
|
+
return [4 /*yield*/, effects_1.take(studiokit_auth_js_1.AUTH_ACTION.LOG_OUT_REQUESTED)];
|
|
279
|
+
case 7:
|
|
280
|
+
// user logs out => stop auto-send and end session
|
|
281
|
+
_a.sent();
|
|
282
|
+
return [4 /*yield*/, effects_1.cancel(autoSendTask)];
|
|
283
|
+
case 8:
|
|
284
|
+
_a.sent();
|
|
285
|
+
void endCaliperSession();
|
|
286
|
+
// attempt to send the session end event once, w/ no token refresh since logged out
|
|
287
|
+
return [4 /*yield*/, effects_1.call(send)];
|
|
288
|
+
case 9:
|
|
289
|
+
// attempt to send the session end event once, w/ no token refresh since logged out
|
|
290
|
+
_a.sent();
|
|
291
|
+
return [3 /*break*/, 4];
|
|
292
|
+
case 10: return [2 /*return*/];
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
exports.default = caliperSaga;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
/**
|
|
2
|
-
Periodically, we fetch the current UTC server time. To insure against browser clock time being set
|
|
3
|
-
incorrectly, we track the difference between server time and browser time by storing that
|
|
4
|
-
difference in a module-level variable in the date utilities module. That module provides a method
|
|
5
|
-
to get the current UTC time, according to the API server.
|
|
6
|
-
|
|
7
|
-
If the calculated difference is less than one second, we can assume that's a result of network
|
|
8
|
-
latency and will not store that offset.
|
|
9
|
-
*/
|
|
10
|
-
export default function clockOffsetSaga(): Generator<import("redux-saga/effects").TakeEffect | import("redux-saga/effects").CallEffect<void>, void, unknown>;
|
|
1
|
+
/**
|
|
2
|
+
Periodically, we fetch the current UTC server time. To insure against browser clock time being set
|
|
3
|
+
incorrectly, we track the difference between server time and browser time by storing that
|
|
4
|
+
difference in a module-level variable in the date utilities module. That module provides a method
|
|
5
|
+
to get the current UTC time, according to the API server.
|
|
6
|
+
|
|
7
|
+
If the calculated difference is less than one second, we can assume that's a result of network
|
|
8
|
+
latency and will not store that offset.
|
|
9
|
+
*/
|
|
10
|
+
export default function clockOffsetSaga(): Generator<import("redux-saga/effects").TakeEffect | import("redux-saga/effects").CallEffect<void>, void, unknown>;
|