@scaleflex/widget-core 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,256 +0,0 @@
1
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
5
- function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
6
- function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
- import { createSlice, isAnyOf } from '@reduxjs/toolkit';
8
- import checkPermissions from '@scaleflex/widget-utils/lib/checkPermissions';
9
- import createThunk from '@scaleflex/widget-utils/lib/createThunk';
10
- import { AUTH_STATE, PERMISSIONS, PLUGINS_IDS } from '@scaleflex/widget-utils/lib/constants';
11
- import { slicePropName as coreCommonSliceName } from './common.slice';
12
-
13
- /**
14
- * The order of the code in slice file is:
15
- * 1. initialState (*No* export needed)
16
- * 2. automated thunks functions -- uses createThunk API-- (export needed)
17
- * 3. createSlice (*No* export needed)
18
- * 4. actions exports
19
- * 5. selectors (export needed)
20
- * 6. default reducer export
21
- *
22
- */
23
- var slicePropName = 'user';
24
- var sliceName = "".concat(PLUGINS_IDS.CORE, "/").concat(slicePropName);
25
- var sassKeyExpireDuration = 1170000; // 19.5 minutes
26
-
27
- var initialState = {
28
- sassKey: '',
29
- authState: AUTH_STATE.ANONYMOUS,
30
- permissions: {},
31
- // userCheckedPermissions
32
- securityData: {},
33
- info: {} // possible to be empty, most probably won't be empty in-case of login mode.
34
- };
35
- export var generateUserKey = createThunk(async function (_, thunkApi) {
36
- var _userAuthInfo$key_val, _userAuthInfo$key_val2, _filerobot$getPlugin$, _filerobot$getPlugin;
37
- var _thunkApi$extra = thunkApi.extra,
38
- filerobot = _thunkApi$extra.filerobot,
39
- apiClient = _thunkApi$extra.apiClient;
40
- var url = "".concat(filerobot.opts.apiEndpointWithContainer, "/key/").concat(filerobot.opts.securityTemplateId);
41
-
42
- // Retrieve sassKey from server through security template id
43
- var userAuthInfo = await apiClient.get(url, {
44
- signal: thunkApi.signal,
45
- noDefaultHeaders: true
46
- });
47
- var userAuthState = await thunkApi.dispatch(fetchUserAuthState({
48
- userSassKey: userAuthInfo.key,
49
- skipDispatch: true
50
- }));
51
-
52
- // Re-generate a new sassKey before the current one expires.
53
- setTimeout(function () {
54
- thunkApi.dispatch(generateUserKey());
55
- }, (_userAuthInfo$key_val = (_userAuthInfo$key_val2 = userAuthInfo.key_validity) === null || _userAuthInfo$key_val2 === void 0 ? void 0 : _userAuthInfo$key_val2.expire_duration) !== null && _userAuthInfo$key_val !== void 0 ? _userAuthInfo$key_val : sassKeyExpireDuration);
56
- filerobot.emit('sass-key-obtained', userAuthInfo.key);
57
- var _ref = (_filerobot$getPlugin$ = (_filerobot$getPlugin = filerobot.getPlugin(PLUGINS_IDS.EXPLORER)) === null || _filerobot$getPlugin === void 0 ? void 0 : _filerobot$getPlugin.opts) !== null && _filerobot$getPlugin$ !== void 0 ? _filerobot$getPlugin$ : {},
58
- useAssetsPicker = _ref.useAssetsPicker;
59
-
60
- // Removed permissions from here, as we will always check the permissions in the userAuthState request.
61
- return _objectSpread(_objectSpread({}, userAuthState), {}, {
62
- useAssetsPicker: useAssetsPicker,
63
- sassKey: userAuthInfo.key,
64
- securityData: userAuthInfo
65
- });
66
- }, {
67
- actionType: "".concat(sliceName, "/generateUserKey")
68
- });
69
- export var saveUserSassKey = createThunk(function (userSassKey, thunkApi) {
70
- thunkApi.extra.filerobot.emit('sass-key-obtained', userSassKey);
71
- var userSecurityData = selectUserSecurityData(thunkApi.getState());
72
- return thunkApi.dispatch(userUpdated({
73
- sassKey: userSassKey,
74
- securityData: _objectSpread(_objectSpread({}, userSecurityData), {}, {
75
- key: userSassKey
76
- })
77
- }));
78
- });
79
- export var fetchUserAuthState = createThunk(async function () {
80
- var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
81
- userSassKey = _ref2.userSassKey,
82
- skipDispatch = _ref2.skipDispatch;
83
- var thunkApi = arguments.length > 1 ? arguments[1] : undefined;
84
- // We will have skipDispatch: true, when we call the fetchUserAuthState from the generateUserKey thunk,
85
- // as we'll wait for the generateUserKey thunk & fetchUserAuthState thunk to finish then update the user state once,
86
- // otherwise the user state should have skipDispatch: false, to update the user state after finishing its request.
87
- if (skipDispatch) {
88
- thunkApi.skipDispatch();
89
- }
90
- if (!userSassKey) {
91
- thunkApi.skipDispatch();
92
- return thunkApi.rejectWithValue('No sass key provided.');
93
- }
94
- var _thunkApi$extra2 = thunkApi.extra,
95
- filerobot = _thunkApi$extra2.filerobot,
96
- apiClient = _thunkApi$extra2.apiClient;
97
- var _await$apiClient$get = await apiClient.get("".concat(filerobot.opts.apiEndpointWithContainer, "/v4/key/info?key=").concat(userSassKey), {
98
- abortSignal: thunkApi.signal,
99
- noDefaultHeaders: true
100
- }),
101
- isValidate = _await$apiClient$get.is_validate,
102
- isUserInfoIncluded = _await$apiClient$get.is_user_info_included,
103
- permissions = _await$apiClient$get.permissions;
104
- var userAuthState = AUTH_STATE.ANONYMOUS;
105
- if (isValidate) {
106
- userAuthState = isUserInfoIncluded ? AUTH_STATE.AUTH : AUTH_STATE.UNAUTH;
107
- }
108
- // If no skipDispatch then emit the event, as this means no request is triggered for generating the sass key and sass key is provided from opts.
109
- if (!skipDispatch) {
110
- filerobot.emit('sass-key-obtained', userSassKey);
111
- }
112
- return {
113
- sassKey: userSassKey,
114
- authState: userAuthState,
115
- permissions: checkPermissions(Array.isArray(permissions) && permissions.length > 0 ? permissions : filerobot.opts.userPermissions || permissions || [], Object.values(PERMISSIONS), true)
116
- };
117
- }, {
118
- actionType: "".concat(sliceName, "/fetchUserAuthState"),
119
- dismissGlobalAbort: true
120
- });
121
- export var userLogout = createThunk(function (_, thunkApi) {
122
- var filerobot = thunkApi.extra.filerobot;
123
- filerobot.emit('sass-key-obtained', undefined);
124
- thunkApi.dispatch(userReset());
125
- });
126
- export var loginUserByCredentials = createThunk(async function (_ref3, thunkApi) {
127
- var email = _ref3.email,
128
- password = _ref3.password;
129
- thunkApi.skipPendingDispatch();
130
- var _thunkApi$extra3 = thunkApi.extra,
131
- filerobot = _thunkApi$extra3.filerobot,
132
- apiClient = _thunkApi$extra3.apiClient;
133
- var token = filerobot.opts.container;
134
- var response = await apiClient.postAdmin("login?token=".concat(token), {
135
- data: {
136
- login: {
137
- email: email,
138
- password: password
139
- }
140
- },
141
- abortSignal: thunkApi.signal
142
- });
143
- var _ref4 = response || {},
144
- userUuid = _ref4.user_uuid,
145
- userEmail = _ref4.user_email,
146
- sessionUuid = _ref4.session_uuid,
147
- userPhotoUri = _ref4.user_photo_uri,
148
- keychain = _ref4.keychain,
149
- userName = _ref4.user_name;
150
- // TODO: keyDuration is not supported from BE but added to be considered from their side once they add.
151
- var _ref5 = (keychain === null || keychain === void 0 ? void 0 : keychain.tokens) || {},
152
- userSassKey = _ref5.airstore_key,
153
- permissions = _ref5.permissions;
154
- if (userSassKey) {
155
- filerobot.emit('sass-key-obtained', userSassKey);
156
- if (filerobot.opts.sassKeyRenewerEnabled) {
157
- // Send renew sass key request each hour
158
- filerobot.sassKeyRenewer.subscribe();
159
- }
160
-
161
- // Expire the sass key if the duration is not 0, then the login page will show again.
162
- // if (keyDuration !== 0) { // DEPRECATED! Not necessary according to new SassKeyRenewer logic
163
- // setTimeout(() => {
164
- // thunkApi.dispatch(userLogout())
165
- // }, keyDuration)
166
- // }
167
- } else {
168
- return thunkApi.rejectWithValue(new Error('No sass key generated, please try again later.'));
169
- }
170
- return {
171
- sassKey: userSassKey,
172
- authState: AUTH_STATE.AUTH,
173
- permissions: checkPermissions(Array.isArray(permissions) && permissions.length > 0 ? permissions : filerobot.opts.userPermissions || permissions || [], Object.values(PERMISSIONS), true),
174
- info: {
175
- uuid: userUuid,
176
- email: userEmail,
177
- name: userName,
178
- photo_uri: userPhotoUri,
179
- sessionUuid: sessionUuid
180
- }
181
- };
182
- }, {
183
- actionType: "".concat(sliceName, "/loginUserByCredentials")
184
- });
185
- var userSlice = createSlice({
186
- name: sliceName,
187
- initialState: initialState,
188
- reducers: {
189
- userUpdated: function userUpdated(state, action) {
190
- var newUserData = action.payload;
191
- return _objectSpread(_objectSpread({}, state), newUserData);
192
- },
193
- userReset: function userReset(state) {
194
- return _objectSpread(_objectSpread({}, state), initialState);
195
- },
196
- userInfoUpdated: function userInfoUpdated(state, action) {
197
- return _objectSpread(_objectSpread({}, state), {}, {
198
- info: _objectSpread(_objectSpread({}, state.info || {}), action.payload || {})
199
- });
200
- }
201
- },
202
- extraReducers: function extraReducers(builder) {
203
- builder.addCase(generateUserKey.fulfilled, function (state, action) {
204
- return _objectSpread(_objectSpread({}, state), action.payload);
205
- }).addMatcher(isAnyOf(fetchUserAuthState.fulfilled, loginUserByCredentials.fulfilled), function (state, action) {
206
- return _objectSpread(_objectSpread({}, state), action.payload);
207
- });
208
- }
209
- });
210
- var _userSlice$actions = userSlice.actions,
211
- userUpdated = _userSlice$actions.userUpdated,
212
- userInfoUpdated = _userSlice$actions.userInfoUpdated,
213
- userReset = _userSlice$actions.userReset;
214
- export { userUpdated, userInfoUpdated, userReset };
215
- export var selectUser = function selectUser(state) {
216
- return state[PLUGINS_IDS.CORE][slicePropName];
217
- };
218
- export var selectUserPermissions = function selectUserPermissions(state) {
219
- return selectUser(state).permissions;
220
- };
221
-
222
- // `isDev` is used for enabling any feature requires user auth on dev. environment (in-case it is needed for some checking/improvements) and anyways it won't work from BE side as it requires the user auth.
223
- export var selectIsUserAuth = function selectIsUserAuth(state) {
224
- var _state$PLUGINS_IDS$CO, _state$PLUGINS_IDS$CO2;
225
- return ((_state$PLUGINS_IDS$CO = state[PLUGINS_IDS.CORE]) === null || _state$PLUGINS_IDS$CO === void 0 ? void 0 : (_state$PLUGINS_IDS$CO2 = _state$PLUGINS_IDS$CO[coreCommonSliceName]) === null || _state$PLUGINS_IDS$CO2 === void 0 ? void 0 : _state$PLUGINS_IDS$CO2.isDevEnv) || selectUser(state).authState === AUTH_STATE.AUTH;
226
- };
227
- export var selectUserSecurityData = function selectUserSecurityData(state) {
228
- return selectUser(state).securityData;
229
- };
230
- export var selectUserSassKey = function selectUserSassKey(state) {
231
- return selectUser(state).sassKey;
232
- };
233
- export var selectUserInfo = function selectUserInfo(state) {
234
- return selectUser(state).info;
235
- };
236
- export var selectUserSessionUuid = function selectUserSessionUuid(state) {
237
- return selectUserInfo(state).sessionUuid;
238
- };
239
- export var selectIsUserPermittedTo = function selectIsUserPermittedTo(state, permissionToCheck) {
240
- var userMustAuth = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
241
- var userPermissions = selectUserPermissions(state);
242
- if (userMustAuth) {
243
- var isUserAuth = selectIsUserAuth(state);
244
- if (!isUserAuth) {
245
- return false;
246
- }
247
- }
248
- return Boolean(userPermissions[permissionToCheck]);
249
- };
250
- export var selectIsUserPermittedToShare = function selectIsUserPermittedToShare(state) {
251
- return selectIsUserPermittedTo(state, PERMISSIONS.OBJECTS_SHARE_MANAGE, true);
252
- };
253
- export var selectIsUserPermittedToDisplayFile = function selectIsUserPermittedToDisplayFile(state) {
254
- return selectIsUserPermittedTo(state, PERMISSIONS.DISPLAY);
255
- };
256
- export default userSlice.reducer;
@@ -1,42 +0,0 @@
1
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
7
- // Edge 15.x does not fire 'progress' events on uploads.
8
- // See https://github.com/transloadit/filerobot/issues/945
9
- // And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/
10
- export default function supportsUploadProgress(userAgent) {
11
- // Allow passing in userAgent for tests
12
- if (userAgent == null) {
13
- userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : null;
14
- }
15
- // Assume it works because basically everything supports progress events.
16
- if (!userAgent) return true;
17
- var m = /Edge\/(\d+\.\d+)/.exec(userAgent);
18
- if (!m) return true;
19
- var edgeVersion = m[1];
20
- var _edgeVersion$split = edgeVersion.split('.'),
21
- _edgeVersion$split2 = _slicedToArray(_edgeVersion$split, 2),
22
- major = _edgeVersion$split2[0],
23
- minor = _edgeVersion$split2[1];
24
- major = parseInt(major, 10);
25
- minor = parseInt(minor, 10);
26
-
27
- // Worked before:
28
- // Edge 40.15063.0.0
29
- // Microsoft EdgeHTML 15.15063
30
- if (major < 15 || major === 15 && minor < 15063) {
31
- return true;
32
- }
33
-
34
- // Fixed in:
35
- // Microsoft EdgeHTML 18.18218
36
- if (major > 18 || major === 18 && minor >= 18218) {
37
- return true;
38
- }
39
-
40
- // other versions don't work.
41
- return false;
42
- }
@@ -1,21 +0,0 @@
1
- import getBytesRemaining from '@scaleflex/widget-utils/lib/getBytesRemaining';
2
- import getSpeed from '@scaleflex/widget-utils/lib/getSpeed';
3
- var getTotalSpeed = function getTotalSpeed(files) {
4
- return files.reduce(function (total, file) {
5
- return total + getSpeed(file.progress);
6
- }, 0);
7
- };
8
-
9
- // Eta (ETA) = Estimated Time of Arrival to finish operations in seconds
10
- var calculateTotalEta = function calculateTotalEta(files) {
11
- var totalSpeed = getTotalSpeed(files);
12
- if (totalSpeed === 0) {
13
- return 0;
14
- }
15
- var totalBytesRemaining = getBytesRemaining(files);
16
- if (totalBytesRemaining && totalSpeed) {
17
- // ETA = remainingDistance/Speed
18
- return Math.round(totalBytesRemaining / totalSpeed * 10) / 10;
19
- }
20
- };
21
- export default calculateTotalEta;