@twreporter/redux 8.4.5 → 8.5.0-rc.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.
@@ -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
  };
@@ -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.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports["default"] = void 0;
7
7
  var _default = exports["default"] = {
8
+ jaiAbTestGroup: 'jai-ab-test-group',
8
9
  topics: 'topics',
9
10
  indexPage: 'index_page',
10
11
  indexPageCategories: 'index_page_categories',
@@ -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
- // lodash
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.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.4.5",
3
+ "version": "8.5.0-rc.0",
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": "a193e076974c1ff1b549921d44664634b31dc5da"
52
+ "gitHead": "348ee1bdd2fbd7299ba53c0c9b9cf0c7cd36ccb4"
53
53
  }