auth0-lock 11.31.1 → 11.32.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Change Log
2
2
 
3
+ ## [v11.32.0](https://github.com/auth0/lock/tree/v11.32.0) (2022-01-07)
4
+ [Full Changelog](https://github.com/auth0/lock/compare/v11.31.1...v11.32.0)
5
+
6
+ **Fixed**
7
+ - [SDK-2970] Remove captcha for enterprise SSO connections [\#2071](https://github.com/auth0/lock/pull/2071) ([stevehobbsdev](https://github.com/stevehobbsdev))
8
+ - Add ID attributes to password field + submit button [\#2072](https://github.com/auth0/lock/pull/2072) ([stevehobbsdev](https://github.com/stevehobbsdev))
9
+
3
10
  ## [v11.31.1](https://github.com/auth0/lock/tree/v11.31.1) (2021-11-02)
4
11
 
5
12
  [Full Changelog](https://github.com/auth0/lock/compare/v11.31.0...v11.31.1)
package/README.md CHANGED
@@ -25,7 +25,7 @@ From CDN
25
25
 
26
26
  ```html
27
27
  <!-- Latest patch release (recommended for production) -->
28
- <script src="https://cdn.auth0.com/js/lock/11.31.1/lock.min.js"></script>
28
+ <script src="https://cdn.auth0.com/js/lock/11.32.0/lock.min.js"></script>
29
29
  ```
30
30
 
31
31
  From [npm](https://npmjs.org)
package/karma.conf.js CHANGED
@@ -1,4 +1,4 @@
1
- module.exports = function(config) {
1
+ module.exports = function (config) {
2
2
  process.env.CHROME_BIN = require('puppeteer').executablePath();
3
3
 
4
4
  config.set({
@@ -52,9 +52,9 @@ module.exports = function(config) {
52
52
 
53
53
  browserNoActivityTimeout: 60000,
54
54
 
55
- browserDisconnectTimeout: 20000,
55
+ browserDisconnectTimeout: 30000,
56
56
 
57
- browserDisconnectTolerance: 3,
57
+ browserDisconnectTolerance: 10,
58
58
 
59
59
  // level of logging
60
60
  logLevel: config.LOG_INFO,
@@ -118,12 +118,6 @@ module.exports = function(config) {
118
118
  }
119
119
  },
120
120
 
121
- browsers: [
122
- 'bs_chrome_windows',
123
- 'bs_firefox_windows',
124
- 'bs_safari',
125
- 'bs_ie11_windows',
126
- 'bs_edge_windows'
127
- ]
121
+ browsers: ['bs_chrome_windows']
128
122
  });
129
123
  };
@@ -0,0 +1,93 @@
1
+ 'use strict';
2
+
3
+ var _react = require('react');
4
+
5
+ var _react2 = _interopRequireDefault(_react);
6
+
7
+ var _immutable = require('immutable');
8
+
9
+ var _immutable2 = _interopRequireDefault(_immutable);
10
+
11
+ var _testUtils = require('testUtils');
12
+
13
+ var _login_pane = require('../../../connection/database/login_pane');
14
+
15
+ var _login_pane2 = _interopRequireDefault(_login_pane);
16
+
17
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
+
19
+ function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
20
+
21
+ var lock = _immutable2.default.fromJS({ id: '__lock-id__' });
22
+
23
+ jest.mock('core/index');
24
+
25
+ jest.mock('engine/classic');
26
+ jest.mock('connection/enterprise');
27
+
28
+ describe('LoginPane', function () {
29
+ var defaultProps = {
30
+ emailInputPlaceholder: '',
31
+ forgotPasswordAction: '',
32
+ i18n: {},
33
+ passwordInputPlaceholder: '',
34
+ showForgotPasswordLink: true,
35
+ showPassword: true,
36
+ usernameInputPlaceholder: '',
37
+ lock: lock
38
+ };
39
+
40
+ beforeEach(function () {
41
+ jest.resetAllMocks();
42
+ });
43
+
44
+ it('renders correctly', _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
45
+ return regeneratorRuntime.wrap(function _callee$(_context) {
46
+ while (1) {
47
+ switch (_context.prev = _context.next) {
48
+ case 0:
49
+ (0, _testUtils.expectShallowComponent)(_react2.default.createElement(_login_pane2.default, defaultProps)).toMatchSnapshot();
50
+
51
+ case 1:
52
+ case 'end':
53
+ return _context.stop();
54
+ }
55
+ }
56
+ }, _callee, undefined);
57
+ })));
58
+
59
+ it('renders a captcha', function () {
60
+ require('core/index').captcha.mockReturnValue({
61
+ get: function get() {
62
+ return true;
63
+ }
64
+ });
65
+
66
+ (0, _testUtils.expectShallowComponent)(_react2.default.createElement(_login_pane2.default, defaultProps)).toMatchSnapshot();
67
+ });
68
+
69
+ it('hides the captcha for SSO connections', function () {
70
+ require('core/index').captcha.mockReturnValue({
71
+ get: function get() {
72
+ return true;
73
+ }
74
+ });
75
+
76
+ require('engine/classic').isSSOEnabled.mockReturnValue(true);
77
+
78
+ (0, _testUtils.expectShallowComponent)(_react2.default.createElement(_login_pane2.default, defaultProps)).toMatchSnapshot();
79
+ });
80
+
81
+ it('shows the captcha for SSO (ADFS) connections', function () {
82
+ require('core/index').captcha.mockReturnValue({
83
+ get: function get() {
84
+ return true;
85
+ }
86
+ });
87
+
88
+ require('engine/classic').isSSOEnabled.mockReturnValue(true);
89
+ require('connection/enterprise').isHRDDomain.mockReturnValue(true);
90
+
91
+ (0, _testUtils.expectShallowComponent)(_react2.default.createElement(_login_pane2.default, defaultProps)).toMatchSnapshot();
92
+ });
93
+ });
@@ -20,7 +20,8 @@ jest.mock('connection/database/index', function () {
20
20
  return {
21
21
  databaseLogInWithEmail: jest.fn(function () {
22
22
  return true;
23
- })
23
+ }),
24
+ databaseUsernameValue: jest.fn()
24
25
  };
25
26
  });
26
27
 
@@ -39,7 +40,8 @@ jest.mock('connection/enterprise', function () {
39
40
  return {
40
41
  matchConnection: jest.fn(),
41
42
  enterpriseActiveFlowConnection: jest.fn(),
42
- isHRDActive: jest.fn()
43
+ isHRDActive: jest.fn(),
44
+ isEnterpriseDomain: jest.fn()
43
45
  };
44
46
  });
45
47
 
@@ -88,10 +90,12 @@ describe('Login with connection scopes', function () {
88
90
  });
89
91
  });
90
92
 
91
- it('should throw an error if the captcha was not completed', function () {
93
+ it('should not throw an error if the captcha was not completed', function () {
92
94
  lock = l.setup('__lock__', 'client', 'domain', {});
93
95
  lock = (0, _index2.setField)(lock, 'email', 'test@test.com');
94
96
 
97
+ // This will be specified in the response from the /challenge endpoint if the
98
+ // dashboard settings have Captcha as 'required', regardless of connection being used.
95
99
  lock = l.setCaptcha(lock, {
96
100
  required: true,
97
101
  provider: 'recaptcha_v2'
@@ -104,7 +108,7 @@ describe('Login with connection scopes', function () {
104
108
  var coreActions = require('core/actions');
105
109
 
106
110
  (0, _actions.logIn)('__lock__');
107
- expect(coreActions.logIn).not.toHaveBeenCalled();
111
+ expect(coreActions.logIn).toHaveBeenCalled();
108
112
  });
109
113
  });
110
114
 
@@ -4,8 +4,6 @@ var _react = require('react');
4
4
 
5
5
  var _react2 = _interopRequireDefault(_react);
6
6
 
7
- var _enzyme = require('enzyme');
8
-
9
7
  var _testUtils = require('testUtils');
10
8
 
11
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -6,10 +6,10 @@ var _react = require('react');
6
6
 
7
7
  var _react2 = _interopRequireDefault(_react);
8
8
 
9
- var _enzyme = require('enzyme');
10
-
11
9
  var _testUtils = require('testUtils');
12
10
 
11
+ var _testUtils2 = require('../../testUtils');
12
+
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
14
 
15
15
  jest.mock('field/email/email_pane', function () {
@@ -25,6 +25,24 @@ jest.mock('field/custom_input', function () {
25
25
  return (0, _testUtils.mockComponent)('custom_input');
26
26
  });
27
27
 
28
+ jest.mock('core/index', function () {
29
+ return {
30
+ captcha: jest.fn()
31
+ };
32
+ });
33
+
34
+ jest.mock('engine/classic', function () {
35
+ return {
36
+ isSSOEnabled: jest.fn()
37
+ };
38
+ });
39
+
40
+ jest.mock('connection/enterprise', function () {
41
+ return {
42
+ isHRDDomain: jest.fn()
43
+ };
44
+ });
45
+
28
46
  var getComponent = function getComponent() {
29
47
  return require('engine/classic/sign_up_pane').default;
30
48
  };
@@ -46,6 +64,9 @@ describe('SignUpPane', function () {
46
64
  },
47
65
  signUpFieldsStrictValidation: function signUpFieldsStrictValidation() {
48
66
  return true;
67
+ },
68
+ databaseUsernameValue: function databaseUsernameValue() {
69
+ return null;
49
70
  }
50
71
  };
51
72
  });
@@ -85,6 +106,50 @@ describe('SignUpPane', function () {
85
106
 
86
107
  (0, _testUtils.expectComponent)(_react2.default.createElement(Component, _extends({}, defaultProps, { instructions: 'instructions' }))).toMatchSnapshot();
87
108
  });
109
+
110
+ it('shows the Captcha pane', function () {
111
+ require('core/index').captcha.mockReturnValue({
112
+ get: function get() {
113
+ return true;
114
+ }
115
+ });
116
+
117
+ require('engine/classic').isSSOEnabled.mockReturnValue(false);
118
+
119
+ var Component = getComponent();
120
+
121
+ (0, _testUtils2.expectShallowComponent)(_react2.default.createElement(Component, defaultProps)).toMatchSnapshot();
122
+ });
123
+
124
+ it('hides the Captcha pane for SSO connections', function () {
125
+ require('core/index').captcha.mockReturnValue({
126
+ get: function get() {
127
+ return true;
128
+ }
129
+ });
130
+
131
+ require('engine/classic').isSSOEnabled.mockReturnValue(true);
132
+
133
+ var Component = getComponent();
134
+
135
+ (0, _testUtils2.expectShallowComponent)(_react2.default.createElement(Component, defaultProps)).toMatchSnapshot();
136
+ });
137
+
138
+ it('shows the Captcha pane for SSO (ADFS) connections', function () {
139
+ require('core/index').captcha.mockReturnValue({
140
+ get: function get() {
141
+ return true;
142
+ }
143
+ });
144
+
145
+ require('engine/classic').isSSOEnabled.mockReturnValue(true);
146
+ require('connection/enterprise').isHRDDomain.mockReturnValue(true);
147
+
148
+ var Component = getComponent();
149
+
150
+ (0, _testUtils2.expectShallowComponent)(_react2.default.createElement(Component, defaultProps)).toMatchSnapshot();
151
+ });
152
+
88
153
  describe('onlyEmail is false', function () {
89
154
  it('shows PasswordPane', function () {
90
155
  var Component = getComponent();
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  exports.__esModule = true;
4
- exports.expectMockToMatch = exports.setURL = exports.extractPropsFromWrapper = exports.mockComponent = exports.expectComponent = undefined;
4
+ exports.expectMockToMatch = exports.setURL = exports.extractPropsFromWrapper = exports.mockComponent = exports.renderShallowComponent = exports.expectShallowComponent = exports.expectComponent = undefined;
5
5
 
6
6
  var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
7
7
 
@@ -13,6 +13,10 @@ var _reactTestRenderer = require('react-test-renderer');
13
13
 
14
14
  var _reactTestRenderer2 = _interopRequireDefault(_reactTestRenderer);
15
15
 
16
+ var _shallow = require('react-test-renderer/shallow');
17
+
18
+ var _shallow2 = _interopRequireDefault(_shallow);
19
+
16
20
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
21
 
18
22
  function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } // eslint-disable-line
@@ -23,6 +27,18 @@ var expectComponent = exports.expectComponent = function expectComponent(childre
23
27
  return expect(component);
24
28
  };
25
29
 
30
+ var expectShallowComponent = exports.expectShallowComponent = function expectShallowComponent(children) {
31
+ var component = renderShallowComponent(children);
32
+ return expect(component);
33
+ };
34
+
35
+ var renderShallowComponent = exports.renderShallowComponent = function renderShallowComponent(children) {
36
+ var renderer = new _shallow2.default();
37
+
38
+ renderer.render(children);
39
+ return renderer.getRenderOutput();
40
+ };
41
+
26
42
  var addDataToProps = function addDataToProps(props) {
27
43
  var returnedProps = {};
28
44
  Object.keys(props).forEach(function (k) {
@@ -45,7 +45,10 @@ jest.mock('core/index', function () {
45
45
  }),
46
46
  ui: {
47
47
  forceAutoHeight: jest.fn().mockReturnValue(false)
48
- }
48
+ },
49
+ id: jest.fn(function () {
50
+ return 'lock';
51
+ })
49
52
  };
50
53
  });
51
54
 
@@ -29,7 +29,10 @@ jest.mock('core/index', function () {
29
29
  allowPasswordAutocomplete: function allowPasswordAutocomplete() {
30
30
  return false;
31
31
  }
32
- }
32
+ },
33
+ id: jest.fn(function () {
34
+ return 'lock';
35
+ })
33
36
  };
34
37
  });
35
38
 
@@ -51,6 +51,7 @@ function logIn(id) {
51
51
  var m = (0, _index.read)(_index.getEntity, 'lock', id);
52
52
  var usernameField = (0, _index4.databaseLogInWithEmail)(m) ? 'email' : 'username';
53
53
  var username = c.getFieldValue(m, usernameField);
54
+
54
55
  var params = {
55
56
  connection: (0, _index4.databaseConnectionName)(m),
56
57
  username: username,
@@ -58,13 +59,14 @@ function logIn(id) {
58
59
  };
59
60
 
60
61
  var fields = [usernameField, 'password'];
61
-
62
62
  var isCaptchaValid = (0, _captcha.setCaptchaParams)(m, params, fields);
63
+
63
64
  if (!isCaptchaValid) {
64
65
  return (0, _captcha.showMissingCaptcha)(m, id);
65
66
  }
66
67
 
67
68
  var mfaCode = c.getFieldValue(m, 'mfa_code');
69
+
68
70
  if (needsMFA) {
69
71
  params['mfa_code'] = mfaCode;
70
72
  fields.push('mfa_code');
@@ -36,6 +36,12 @@ var _captcha_pane = require('../../field/captcha/captcha_pane');
36
36
 
37
37
  var _captcha_pane2 = _interopRequireDefault(_captcha_pane);
38
38
 
39
+ var _classic = require('../../engine/classic');
40
+
41
+ var _enterprise = require('../enterprise');
42
+
43
+ var _database = require('../database');
44
+
39
45
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
40
46
 
41
47
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -85,6 +91,7 @@ var LoginPane = function (_React$Component) {
85
91
  headerText
86
92
  );
87
93
  var resolver = l.connectionResolver(lock);
94
+ var sso = (0, _classic.isSSOEnabled)(lock);
88
95
 
89
96
  // Should never validate format on login because of custom db connection and import mode.
90
97
  // If a custom resolver is in use, always use UsernamePane without validating format,
@@ -104,7 +111,7 @@ var LoginPane = function (_React$Component) {
104
111
  strictValidation: false
105
112
  });
106
113
 
107
- var captchaPane = l.captcha(lock) && l.captcha(lock).get('required') ? _react2.default.createElement(_captcha_pane2.default, { i18n: i18n, lock: lock, onReload: function onReload() {
114
+ var captchaPane = l.captcha(lock) && l.captcha(lock).get('required') && ((0, _enterprise.isHRDDomain)(lock, (0, _database.databaseUsernameValue)(lock)) || !sso) ? _react2.default.createElement(_captcha_pane2.default, { i18n: i18n, lock: lock, onReload: function onReload() {
108
115
  return (0, _captcha.swapCaptcha)(l.id(lock), false);
109
116
  } }) : null;
110
117
 
@@ -66,16 +66,16 @@ function logIn(id) {
66
66
  connection_scope: connectionScopes ? connectionScopes.toJS() : undefined
67
67
  };
68
68
 
69
+ if (ssoConnection && !(0, _enterprise.isHRDActive)(m)) {
70
+ return logInSSO(id, ssoConnection, params);
71
+ }
72
+
69
73
  var isCaptchaValid = (0, _captcha.setCaptchaParams)(m, params, fields);
70
74
 
71
- if (!isCaptchaValid) {
75
+ if (!isCaptchaValid && !ssoConnection) {
72
76
  return (0, _captcha.showMissingCaptcha)(m, id);
73
77
  }
74
78
 
75
- if (ssoConnection && !(0, _enterprise.isHRDActive)(m)) {
76
- return logInSSO(id, ssoConnection, params);
77
- }
78
-
79
79
  logInActiveFlow(id, params);
80
80
  }
81
81
 
@@ -176,5 +176,5 @@ function trimAuthParams() {
176
176
  }
177
177
 
178
178
  function getVersion() {
179
- return '11.31.1';
179
+ return '11.32.0';
180
180
  }
@@ -34,6 +34,10 @@ var l = _interopRequireWildcard(_index2);
34
34
 
35
35
  var _captcha = require('../../connection/captcha');
36
36
 
37
+ var _enterprise = require('../../connection/enterprise');
38
+
39
+ var _classic = require('../classic');
40
+
37
41
  function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
38
42
 
39
43
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -71,6 +75,7 @@ var SignUpPane = function (_React$Component) {
71
75
  null,
72
76
  headerText
73
77
  );
78
+ var sso = (0, _classic.isSSOEnabled)(model);
74
79
 
75
80
  var usernamePane = !onlyEmail && (0, _index.databaseConnectionRequiresUsername)(model) && !(0, _index.signUpHideUsernameField)(model) ? _react2.default.createElement(_username_pane2.default, {
76
81
  i18n: i18n,
@@ -96,7 +101,7 @@ var SignUpPane = function (_React$Component) {
96
101
  });
97
102
  });
98
103
 
99
- var captchaPane = l.captcha(model) && l.captcha(model).get('required') ? _react2.default.createElement(_captcha_pane2.default, { i18n: i18n, lock: model, onReload: function onReload() {
104
+ var captchaPane = l.captcha(model) && l.captcha(model).get('required') && ((0, _enterprise.isHRDDomain)(model, (0, _index.databaseUsernameValue)(model)) || !sso) ? _react2.default.createElement(_captcha_pane2.default, { i18n: i18n, lock: model, onReload: function onReload() {
100
105
  return (0, _captcha.swapCaptcha)(l.id(model), false);
101
106
  } }) : null;
102
107
 
@@ -53,14 +53,10 @@ var CaptchaPane = function (_React$Component) {
53
53
  lock = _props.lock,
54
54
  onReload = _props.onReload;
55
55
 
56
-
57
56
  var lockId = l.id(lock);
58
-
59
57
  var captcha = l.captcha(lock);
60
-
61
58
  var value = (0, _index3.getFieldValue)(lock, 'captcha');
62
59
  var isValid = !(0, _index3.isFieldVisiblyInvalid)(lock, 'captcha');
63
-
64
60
  var provider = captcha.get('provider');
65
61
 
66
62
  if ((0, _recaptcha.isRecaptcha)(provider)) {
package/lib/i18n.js CHANGED
@@ -125,7 +125,7 @@ function assertLanguage(m, language, base) {
125
125
  function syncLang(m, language, _cb) {
126
126
  (0, _cdn_utils.load)({
127
127
  method: 'registerLanguageDictionary',
128
- url: l.languageBaseUrl(m) + '/js/lock/' + '11.31.1' + '/' + language + '.js',
128
+ url: l.languageBaseUrl(m) + '/js/lock/' + '11.32.0' + '/' + language + '.js',
129
129
  check: function check(str) {
130
130
  return str && str === language;
131
131
  },
package/lib/lock.js CHANGED
@@ -42,7 +42,7 @@ var Auth0Lock = function (_Core) {
42
42
 
43
43
 
44
44
  exports.default = Auth0Lock;
45
- Auth0Lock.version = '11.31.1';
45
+ Auth0Lock.version = '11.32.0';
46
46
 
47
47
  // TODO: should we have different telemetry for classic/passwordless?
48
48
  // TODO: should we set telemetry info before each request?
@@ -41,4 +41,4 @@ var Auth0LockPasswordless = function (_Core) {
41
41
  exports.default = Auth0LockPasswordless;
42
42
 
43
43
 
44
- Auth0LockPasswordless.version = '11.31.1';
44
+ Auth0LockPasswordless.version = '11.32.0';
@@ -176,7 +176,10 @@ var SubmitButton = function (_React$Component) {
176
176
  color = _props2.color,
177
177
  disabled = _props2.disabled,
178
178
  label = _props2.label,
179
- display = _props2.display;
179
+ display = _props2.display,
180
+ contentProps = _props2.contentProps;
181
+ var model = contentProps.model;
182
+
180
183
 
181
184
  var content = label ? _react2.default.createElement(
182
185
  'span',
@@ -188,6 +191,7 @@ var SubmitButton = function (_React$Component) {
188
191
  return _react2.default.createElement(
189
192
  'button',
190
193
  {
194
+ id: l.id(model) + '-submit',
191
195
  className: 'auth0-lock-submit',
192
196
  disabled: disabled,
193
197
  style: { backgroundColor: color, display: display },
@@ -116,6 +116,7 @@ var PasswordInput = function (_React$Component) {
116
116
  _react2.default.createElement('input', _extends({
117
117
  ref: 'input',
118
118
  type: showPassword ? 'text' : 'password',
119
+ id: l.id(lock) + '-password',
119
120
  name: 'password',
120
121
  className: 'auth0-lock-input',
121
122
  autoComplete: allowPasswordAutocomplete ? 'on' : 'off',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth0-lock",
3
- "version": "11.31.1",
3
+ "version": "11.32.0",
4
4
  "description": "Auth0 Lock",
5
5
  "author": "Auth0 <support@auth0.com> (http://auth0.com)",
6
6
  "license": "MIT",
@@ -105,17 +105,17 @@
105
105
  "webpack-dev-server": "^2.3.0"
106
106
  },
107
107
  "dependencies": {
108
- "auth0-js": "^9.16.4",
108
+ "auth0-js": "^9.18.0",
109
109
  "auth0-password-policies": "^1.0.2",
110
110
  "blueimp-md5": "^2.19.0",
111
111
  "classnames": "^2.3.1",
112
- "dompurify": "^2.2.8",
112
+ "dompurify": "^2.3.4",
113
113
  "immutable": "^3.7.3",
114
114
  "jsonp": "^0.2.1",
115
- "node-fetch": "^2.6.1",
115
+ "node-fetch": "^2.6.6",
116
116
  "password-sheriff": "^1.1.1",
117
117
  "prop-types": "^15.6.0",
118
- "qs": "^6.7.0",
118
+ "qs": "^6.10.2",
119
119
  "react": "^15.6.2",
120
120
  "react-dom": "^15.6.2",
121
121
  "react-transition-group": "^2.2.1",