@twreporter/redux 8.4.5 → 8.5.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/actions/auth.js
CHANGED
|
@@ -5,9 +5,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports["default"] = void 0;
|
|
7
7
|
exports.getAccessToken = getAccessToken;
|
|
8
|
+
exports.getJaiAbTestGroup = getJaiAbTestGroup;
|
|
8
9
|
var _url = require("../utils/url");
|
|
9
10
|
var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
|
|
10
11
|
var _apiConfig = _interopRequireDefault(require("../constants/api-config"));
|
|
12
|
+
var _apiEndpoints = _interopRequireDefault(require("../constants/api-endpoints"));
|
|
11
13
|
var _axios = _interopRequireDefault(require("axios"));
|
|
12
14
|
var _errorActionCreators = _interopRequireDefault(require("./error-action-creators"));
|
|
13
15
|
var _reduxStateFieldNames = _interopRequireDefault(require("../constants/redux-state-field-names"));
|
|
@@ -87,6 +89,58 @@ function getAccessToken(cookieList) {
|
|
|
87
89
|
});
|
|
88
90
|
};
|
|
89
91
|
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Fetch the JAI A/B test group for authenticated or anonymous visitors.
|
|
95
|
+
* Call on target-page entry after authentication settles, and refetch if auth changes.
|
|
96
|
+
* @param {string} [cookieList] - Forwarded request cookies for server-side use.
|
|
97
|
+
* Browsers send cookies automatically via withCredentials.
|
|
98
|
+
* Responses from a previous auth revision or during authentication are ignored.
|
|
99
|
+
* @return {Function} Redux thunk resolving with success or rejecting with failure.
|
|
100
|
+
*/
|
|
101
|
+
function getJaiAbTestGroup(cookieList) {
|
|
102
|
+
return function (dispatch, getState) {
|
|
103
|
+
var state = getState();
|
|
104
|
+
var apiOrigin = _.get(state, [_reduxStateFieldNames["default"].origins, 'api']);
|
|
105
|
+
var url = (0, _url.formURL)(apiOrigin, "/v3/".concat(_apiEndpoints["default"].jaiAbTestGroup));
|
|
106
|
+
var headers = {};
|
|
107
|
+
var accessToken = _.get(state, [_reduxStateFieldNames["default"].auth, 'accessToken']);
|
|
108
|
+
var authRevision = _.get(state, [_reduxStateFieldNames["default"].auth, 'authRevision'], 0);
|
|
109
|
+
if (_.get(state, [_reduxStateFieldNames["default"].auth, 'isAuthed']) && accessToken) {
|
|
110
|
+
headers.Authorization = "Bearer ".concat(accessToken);
|
|
111
|
+
}
|
|
112
|
+
if (cookieList) {
|
|
113
|
+
headers.Cookie = cookieList;
|
|
114
|
+
}
|
|
115
|
+
dispatch({
|
|
116
|
+
type: _actionTypes["default"].jaiAbTestGroup.read.request,
|
|
117
|
+
url: url
|
|
118
|
+
});
|
|
119
|
+
return _axios["default"].get(url, {
|
|
120
|
+
timeout: timeout,
|
|
121
|
+
headers: headers,
|
|
122
|
+
withCredentials: true
|
|
123
|
+
}).then(function (res) {
|
|
124
|
+
var successAction = {
|
|
125
|
+
type: _actionTypes["default"].jaiAbTestGroup.read.success,
|
|
126
|
+
payload: {
|
|
127
|
+
data: res.data,
|
|
128
|
+
statusCode: res.status
|
|
129
|
+
},
|
|
130
|
+
meta: {
|
|
131
|
+
authRevision: authRevision
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
dispatch(successAction);
|
|
135
|
+
return successAction;
|
|
136
|
+
})["catch"](function (err) {
|
|
137
|
+
var failAction = _errorActionCreators["default"].axios(err, _actionTypes["default"].jaiAbTestGroup.read.failure);
|
|
138
|
+
dispatch(failAction);
|
|
139
|
+
return Promise.reject(failAction);
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
}
|
|
90
143
|
var _default = exports["default"] = {
|
|
91
|
-
getAccessToken: getAccessToken
|
|
144
|
+
getAccessToken: getAccessToken,
|
|
145
|
+
getJaiAbTestGroup: getJaiAbTestGroup
|
|
92
146
|
};
|
package/lib/actions/index.js
CHANGED
|
@@ -36,6 +36,7 @@ var _default = exports["default"] = {
|
|
|
36
36
|
fetchTopics: _topics.fetchTopics,
|
|
37
37
|
fetchLatestTags: _latest.fetchLatestTags,
|
|
38
38
|
getAccessToken: _auth.getAccessToken,
|
|
39
|
+
getJaiAbTestGroup: _auth.getJaiAbTestGroup,
|
|
39
40
|
getMultipleBookmarks: _bookmarks.getMultipleBookmarks,
|
|
40
41
|
getSingleBookmark: _bookmarks.getSingleBookmark,
|
|
41
42
|
searchAuthorsIfNeeded: _authors.searchAuthorsIfNeeded,
|
|
@@ -10,6 +10,14 @@ var _default = exports["default"] = {
|
|
|
10
10
|
AUTH_SUCCESS: 'grant_authorization_success',
|
|
11
11
|
AUTH_FAILURE: 'grant_authorization_failure',
|
|
12
12
|
AUTH_CLEAR: 'clear_authorization',
|
|
13
|
+
// jai ab test
|
|
14
|
+
jaiAbTestGroup: {
|
|
15
|
+
read: {
|
|
16
|
+
request: 'request to fetch jai ab test group',
|
|
17
|
+
success: 'success to fetch jai ab test group',
|
|
18
|
+
failure: 'fail to fetch jai ab test group'
|
|
19
|
+
}
|
|
20
|
+
},
|
|
13
21
|
/**
|
|
14
22
|
* @deprecated
|
|
15
23
|
* keep these three action types here for backward compatibility.
|
package/lib/reducers/auth.js
CHANGED
|
@@ -8,8 +8,12 @@ var _actionTypes = _interopRequireDefault(require("../constants/action-types"));
|
|
|
8
8
|
var _jwt = _interopRequireDefault(require("../utils/jwt"));
|
|
9
9
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
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); }
|
|
12
|
+
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; }
|
|
13
|
+
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; }
|
|
14
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
15
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
|
|
16
|
+
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } // lodash
|
|
13
17
|
var _ = {
|
|
14
18
|
get: _get["default"]
|
|
15
19
|
};
|
|
@@ -19,13 +23,15 @@ var initState = {
|
|
|
19
23
|
lastAction: null,
|
|
20
24
|
isAuthed: false,
|
|
21
25
|
isRequesting: false,
|
|
22
|
-
userInfo: null
|
|
26
|
+
userInfo: null,
|
|
27
|
+
authRevision: 0
|
|
23
28
|
};
|
|
24
29
|
|
|
25
30
|
/**
|
|
26
31
|
* @param {Object} state - redux state
|
|
27
32
|
* @param {boolean} state.isRequesting - requst is in progress
|
|
28
33
|
* @param {boolean} state.isAuthed - indicates if authorization succeeds
|
|
34
|
+
* @param {number} state.authRevision - invalidates group requests across auth changes
|
|
29
35
|
* @param {Object} state.lastAction - last redux action for debugging
|
|
30
36
|
* @param {string} state.lastAction.actionType
|
|
31
37
|
* @param {Object} state.lastAction.actionPayload
|
|
@@ -33,6 +39,7 @@ var initState = {
|
|
|
33
39
|
* @param {number} state.userInfo.user_id - id of user
|
|
34
40
|
* @param {string} state.userInfo.jwt - access_token granted for the user
|
|
35
41
|
* @param {string} state.userInfo.email - email of the user
|
|
42
|
+
* @param {'A'|'B'|'none'} state.userInfo.jai_ab_test_group - JAI experiment group
|
|
36
43
|
* @param {Object} action - redux action
|
|
37
44
|
* @param {string} action.type
|
|
38
45
|
* @param {Object} action.payload - response of API server
|
|
@@ -44,14 +51,28 @@ function auth() {
|
|
|
44
51
|
var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initState;
|
|
45
52
|
var action = arguments.length > 1 ? arguments[1] : undefined;
|
|
46
53
|
switch (action.type) {
|
|
54
|
+
case _actionTypes["default"].jaiAbTestGroup.read.success:
|
|
55
|
+
{
|
|
56
|
+
if (_.get(action, 'meta.authRevision') !== (state.authRevision || 0) || state.isRequesting) {
|
|
57
|
+
return state;
|
|
58
|
+
}
|
|
59
|
+
return _objectSpread(_objectSpread({}, state), {}, {
|
|
60
|
+
userInfo: _objectSpread(_objectSpread({}, state.userInfo), {}, {
|
|
61
|
+
jai_ab_test_group: _.get(action, 'payload.data.jai_ab_test_group')
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
}
|
|
47
65
|
case _actionTypes["default"].AUTH_CLEAR:
|
|
48
66
|
{
|
|
49
67
|
// return empty state
|
|
50
|
-
return initState
|
|
68
|
+
return _objectSpread(_objectSpread({}, initState), {}, {
|
|
69
|
+
authRevision: (state.authRevision || 0) + 1
|
|
70
|
+
});
|
|
51
71
|
}
|
|
52
72
|
case _actionTypes["default"].REQUEST_AUTH:
|
|
53
73
|
{
|
|
54
74
|
return {
|
|
75
|
+
authRevision: (state.authRevision || 0) + 1,
|
|
55
76
|
accessToken: initState.accessToken,
|
|
56
77
|
lastAction: {
|
|
57
78
|
type: action.type,
|
|
@@ -65,6 +86,7 @@ function auth() {
|
|
|
65
86
|
case _actionTypes["default"].AUTH_FAILURE:
|
|
66
87
|
{
|
|
67
88
|
return {
|
|
89
|
+
authRevision: (state.authRevision || 0) + 1,
|
|
68
90
|
accessToken: initState.accessToken,
|
|
69
91
|
lastAction: {
|
|
70
92
|
type: action.type,
|
|
@@ -80,6 +102,7 @@ function auth() {
|
|
|
80
102
|
var jwt = _.get(action, 'payload.data.jwt', '');
|
|
81
103
|
var userInfo = _jwt["default"].decodePayload(jwt);
|
|
82
104
|
return {
|
|
105
|
+
authRevision: (state.authRevision || 0) + 1,
|
|
83
106
|
accessToken: jwt,
|
|
84
107
|
lastAction: {
|
|
85
108
|
type: action.type,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twreporter/redux",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.5.0-rc.1",
|
|
4
4
|
"description": "redux actions and reducers for twreporter website",
|
|
5
5
|
"repository": "https://github.com/twreporter/twreporter-npm-packages.git",
|
|
6
6
|
"author": "twreporter <developer@twreporter.org>",
|
|
@@ -49,5 +49,5 @@
|
|
|
49
49
|
"files": [
|
|
50
50
|
"lib"
|
|
51
51
|
],
|
|
52
|
-
"gitHead": "
|
|
52
|
+
"gitHead": "7f68cb78aa018f86cf7478651b8e1818c2e57b7b"
|
|
53
53
|
}
|