auth0-lock 15.0.0 → 15.0.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.
Files changed (46) hide show
  1. package/.github/workflows/codeql.yml +1 -1
  2. package/.github/workflows/npm-release.yml +1 -1
  3. package/.github/workflows/snyk.yml +1 -1
  4. package/.github/workflows/test.yml +2 -2
  5. package/.version +1 -1
  6. package/CHANGELOG.md +6 -0
  7. package/README.md +1 -1
  8. package/lib/__tests__/auth_button.js +21 -6
  9. package/lib/__tests__/connection/database/login_pane.js +12 -5
  10. package/lib/__tests__/connection/database/reset_password.js +15 -12
  11. package/lib/__tests__/connection/enterprise/hrd_pane.js +16 -6
  12. package/lib/__tests__/connection/enterprise/hrd_screen.js +27 -18
  13. package/lib/__tests__/connection/passwordless/ask_vcode.js +15 -7
  14. package/lib/__tests__/core/sso/last_login_screen.js +91 -40
  15. package/lib/__tests__/engine/classic/mfa_login_screen.js +9 -3
  16. package/lib/__tests__/engine/classic/sign_up_pane.js +16 -6
  17. package/lib/__tests__/engine/classic/sign_up_screen.js +0 -1
  18. package/lib/__tests__/field/captcha/arkose.js +7 -0
  19. package/lib/__tests__/field/captcha/auth0_v2.js +6 -0
  20. package/lib/__tests__/field/captcha/friendlyCaptcha.js +6 -0
  21. package/lib/__tests__/field/captcha/hcaptcha.js +6 -0
  22. package/lib/__tests__/field/captcha/recaptcha_enterprise.js +6 -0
  23. package/lib/__tests__/field/captcha/recaptchav2.js +6 -0
  24. package/lib/__tests__/field/captcha/third_party_captcha.js +97 -64
  25. package/lib/__tests__/field/captcha.js +76 -143
  26. package/lib/__tests__/field/custom_input.js +7 -5
  27. package/lib/__tests__/field/email_pane.js +27 -11
  28. package/lib/__tests__/field/login_pane.js +6 -3
  29. package/lib/__tests__/field/mfa_code_pane.js +13 -6
  30. package/lib/__tests__/field/option_selection_pane.js +17 -7
  31. package/lib/__tests__/field/password_pane.js +8 -10
  32. package/lib/__tests__/field/phone_number_pane.js +7 -5
  33. package/lib/__tests__/field/social_buttons_pane.js +12 -9
  34. package/lib/__tests__/field/username_pane.js +33 -14
  35. package/lib/__tests__/field/vcode_pane.js +9 -5
  36. package/lib/__tests__/setup-tests.js +1 -7
  37. package/lib/__tests__/testUtils.js +27 -42
  38. package/lib/__tests__/ui/box/global_message.js +75 -42
  39. package/lib/__tests__/ui/input/email_input.js +4 -4
  40. package/lib/__tests__/ui/input/password/password_strength.js +8 -7
  41. package/lib/__tests__/ui/input/password_input.js +18 -14
  42. package/lib/core/web_api/helper.js +1 -1
  43. package/lib/i18n.js +1 -1
  44. package/lib/lock.js +1 -1
  45. package/lib/passwordless.js +1 -1
  46. package/package.json +7 -7
@@ -1,10 +1,29 @@
1
1
  "use strict";
2
2
 
3
3
  var _react = _interopRequireDefault(require("react"));
4
- var _enzyme = require("enzyme");
4
+ var _react2 = require("@testing-library/react");
5
5
  var _testUtils = require("../../testUtils");
6
6
  var _global_message = _interopRequireDefault(require("ui/box/global_message"));
7
7
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
+ 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); }
9
+ 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; }
10
+ 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; }
11
+ 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; }
12
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
13
+ 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); }
14
+ // Helper: render and get the instance via a callback ref (class component)
15
+ var renderWithInstance = function renderWithInstance(element) {
16
+ var instance = null;
17
+ var elementWithRef = /*#__PURE__*/_react.default.cloneElement(element, {
18
+ ref: function ref(r) {
19
+ instance = r;
20
+ }
21
+ });
22
+ var result = (0, _react2.render)(elementWithRef);
23
+ return _objectSpread(_objectSpread({}, result), {}, {
24
+ instance: instance
25
+ });
26
+ };
8
27
  describe('GlobalMessage', function () {
9
28
  it('renders correctly given a success type', function () {
10
29
  (0, _testUtils.expectComponent)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
@@ -25,65 +44,77 @@ describe('GlobalMessage', function () {
25
44
  })).toMatchSnapshot();
26
45
  });
27
46
  it('should call scrollIntoView if parameter is set and top < 0', function () {
28
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
29
- type: "success",
30
- message: "foo",
31
- scrollIntoView: true
32
- }));
47
+ var _renderWithInstance = renderWithInstance(/*#__PURE__*/_react.default.createElement(_global_message.default, {
48
+ type: "success",
49
+ message: "foo",
50
+ scrollIntoView: true
51
+ })),
52
+ container = _renderWithInstance.container,
53
+ instance = _renderWithInstance.instance;
54
+ var el = container.firstChild;
33
55
  var getBoundingClientRectSpy = jest.fn().mockReturnValue({
34
56
  top: -1
35
57
  });
36
58
  var scrollIntoViewSpy = jest.fn();
37
- wrapper.getDOMNode().getBoundingClientRect = getBoundingClientRectSpy;
38
- wrapper.getDOMNode().scrollIntoView = scrollIntoViewSpy;
39
- wrapper.instance().componentDidMount();
59
+ el.getBoundingClientRect = getBoundingClientRectSpy;
60
+ el.scrollIntoView = scrollIntoViewSpy;
61
+ instance.componentDidMount();
40
62
  expect(getBoundingClientRectSpy).toHaveBeenCalled();
41
63
  expect(scrollIntoViewSpy).toHaveBeenCalledWith(true);
42
64
  });
43
65
  it('should not call scrollIntoView if parameter is set and top >= 0', function () {
44
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
45
- type: "success",
46
- message: "foo",
47
- scrollIntoView: true
48
- }));
66
+ var _renderWithInstance2 = renderWithInstance(/*#__PURE__*/_react.default.createElement(_global_message.default, {
67
+ type: "success",
68
+ message: "foo",
69
+ scrollIntoView: true
70
+ })),
71
+ container = _renderWithInstance2.container,
72
+ instance = _renderWithInstance2.instance;
73
+ var el = container.firstChild;
49
74
  var getBoundingClientRectSpy = jest.fn().mockReturnValue({
50
75
  top: 0
51
76
  });
52
77
  var scrollIntoViewSpy = jest.fn();
53
- wrapper.getDOMNode().getBoundingClientRect = getBoundingClientRectSpy;
54
- wrapper.getDOMNode().scrollIntoView = scrollIntoViewSpy;
55
- wrapper.instance().componentDidMount();
78
+ el.getBoundingClientRect = getBoundingClientRectSpy;
79
+ el.scrollIntoView = scrollIntoViewSpy;
80
+ instance.componentDidMount();
56
81
  expect(getBoundingClientRectSpy).toHaveBeenCalled();
57
82
  expect(scrollIntoViewSpy).not.toHaveBeenCalled();
58
83
  });
59
84
  it('should call scrollIntoView if parameter is not set (default is true)', function () {
60
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
61
- type: "success",
62
- message: "foo"
63
- }));
85
+ var _renderWithInstance3 = renderWithInstance(/*#__PURE__*/_react.default.createElement(_global_message.default, {
86
+ type: "success",
87
+ message: "foo"
88
+ })),
89
+ container = _renderWithInstance3.container,
90
+ instance = _renderWithInstance3.instance;
91
+ var el = container.firstChild;
64
92
  var getBoundingClientRectSpy = jest.fn().mockReturnValue({
65
93
  top: -1
66
94
  });
67
95
  var scrollIntoViewSpy = jest.fn();
68
- wrapper.getDOMNode().getBoundingClientRect = getBoundingClientRectSpy;
69
- wrapper.getDOMNode().scrollIntoView = scrollIntoViewSpy;
70
- wrapper.instance().componentDidMount();
96
+ el.getBoundingClientRect = getBoundingClientRectSpy;
97
+ el.scrollIntoView = scrollIntoViewSpy;
98
+ instance.componentDidMount();
71
99
  expect(getBoundingClientRectSpy).toHaveBeenCalled();
72
100
  expect(scrollIntoViewSpy).toHaveBeenCalledWith(true);
73
101
  });
74
102
  it('should not call scrollIntoView if parameter is set to false', function () {
75
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
76
- type: "success",
77
- message: "foo",
78
- scrollIntoView: false
79
- }));
103
+ var _renderWithInstance4 = renderWithInstance(/*#__PURE__*/_react.default.createElement(_global_message.default, {
104
+ type: "success",
105
+ message: "foo",
106
+ scrollIntoView: false
107
+ })),
108
+ container = _renderWithInstance4.container,
109
+ instance = _renderWithInstance4.instance;
110
+ var el = container.firstChild;
80
111
  var getBoundingClientRectSpy = jest.fn().mockReturnValue({
81
112
  top: -1
82
113
  });
83
114
  var scrollIntoViewSpy = jest.fn();
84
- wrapper.getDOMNode().getBoundingClientRect = getBoundingClientRectSpy;
85
- wrapper.getDOMNode().scrollIntoView = scrollIntoViewSpy;
86
- wrapper.instance().componentDidMount();
115
+ el.getBoundingClientRect = getBoundingClientRectSpy;
116
+ el.scrollIntoView = scrollIntoViewSpy;
117
+ instance.componentDidMount();
87
118
  expect(scrollIntoViewSpy).not.toHaveBeenCalled();
88
119
  });
89
120
  it('should NOT strip out HTML tags if given a React node', function () {
@@ -92,17 +123,19 @@ describe('GlobalMessage', function () {
92
123
  __html: '<b>Success!</b>'
93
124
  }
94
125
  });
95
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
96
- type: "success",
97
- message: message
98
- }));
99
- expect(wrapper.html()).toBe('<div class="auth0-global-message auth0-global-message-success"><span class="animated fadeInUp">' + '<span><b>Success!</b></span></span></div>');
126
+ var _render = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
127
+ type: "success",
128
+ message: message
129
+ })),
130
+ container = _render.container;
131
+ expect(container.innerHTML).toBe('<div class="auth0-global-message auth0-global-message-success"><span class="animated fadeInUp">' + '<span><b>Success!</b></span></span></div>');
100
132
  });
101
133
  it('should strip out HTML tags if given a string', function () {
102
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
103
- type: "success",
104
- message: "<b>Success!</b>"
105
- }));
106
- expect(wrapper.html()).toBe('<div class="auth0-global-message auth0-global-message-success"><span class="animated fadeInUp">' + '&lt;b&gt;Success!&lt;/b&gt;</span></div>');
134
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_global_message.default, {
135
+ type: "success",
136
+ message: "<b>Success!</b>"
137
+ })),
138
+ container = _render2.container;
139
+ expect(container.innerHTML).toBe('<div class="auth0-global-message auth0-global-message-success"><span class="animated fadeInUp">' + '&lt;b&gt;Success!&lt;/b&gt;</span></div>');
107
140
  });
108
141
  });
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  var _react = _interopRequireDefault(require("react"));
4
- var _enzyme = require("enzyme");
4
+ var _react2 = require("@testing-library/react");
5
5
  var _testUtils = require("testUtils");
6
- var _testUtils2 = require("../../testUtils");
7
6
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
7
  jest.mock('ui/input/input_wrap', function () {
9
8
  return (0, _testUtils.mockComponent)('input_wrap');
@@ -22,7 +21,8 @@ describe('EmailInput', function () {
22
21
  };
23
22
  test('renders without issue', function () {
24
23
  var Input = getComponent();
25
- var component = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(Input, defaultProps));
26
- expect(component.html()).toMatchSnapshot();
24
+ var _render = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(Input, defaultProps)),
25
+ container = _render.container;
26
+ expect(container.innerHTML).toMatchSnapshot();
27
27
  });
28
28
  });
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  var _react = _interopRequireDefault(require("react"));
4
- var _enzyme = require("enzyme");
4
+ var _react2 = require("@testing-library/react");
5
5
  var _password_strength = _interopRequireDefault(require("../../../../ui/input/password/password_strength"));
6
6
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  describe('PasswordStrength', function () {
@@ -22,12 +22,13 @@ describe('PasswordStrength', function () {
22
22
  var messages = {
23
23
  foo: 'the-message'
24
24
  };
25
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(_password_strength.default, {
26
- policy: policy,
27
- password: "the-password",
28
- messages: messages
29
- }));
30
- expect(wrapper.html()).toMatchSnapshot();
25
+ var _render = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(_password_strength.default, {
26
+ policy: policy,
27
+ password: "the-password",
28
+ messages: messages
29
+ })),
30
+ container = _render.container;
31
+ expect(container.innerHTML).toMatchSnapshot();
31
32
  });
32
33
  });
33
34
  });
@@ -1,10 +1,8 @@
1
1
  "use strict";
2
2
 
3
3
  var _react = _interopRequireDefault(require("react"));
4
- var _enzyme = require("enzyme");
4
+ var _react2 = require("@testing-library/react");
5
5
  var _testUtils = require("testUtils");
6
- var _testUtils2 = require("../../testUtils");
7
- var _input_wrap = _interopRequireDefault(require("../../../ui/input/input_wrap"));
8
6
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
7
  jest.mock('ui/input/input_wrap', function () {
10
8
  return (0, _testUtils.mockComponent)('input_wrap');
@@ -43,15 +41,17 @@ describe('PasswordInput', function () {
43
41
  };
44
42
  test('sends PasswordStrength as the `after` param', function () {
45
43
  var Input = getComponent();
46
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(Input, defaultProps));
47
- wrapper.find('input').simulate('focus');
48
- wrapper.find('input').simulate('change', {
44
+ var _render = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(Input, defaultProps)),
45
+ container = _render.container;
46
+ var inputEl = container.querySelector('input');
47
+ _react2.fireEvent.focus(inputEl);
48
+ _react2.fireEvent.change(inputEl, {
49
49
  target: {
50
50
  value: 'pass'
51
51
  }
52
52
  });
53
- var props = (0, _testUtils2.extractPropsFromWrapper)(wrapper);
54
- expect(props.after.props).toEqual({
53
+ var props = (0, _testUtils.extractPropsFromWrapper)(container, 'input_wrap');
54
+ expect(props.after && props.after.props).toEqual({
55
55
  messages: {
56
56
  strengthMessages: 'strengthMessages'
57
57
  },
@@ -64,20 +64,24 @@ describe('PasswordInput', function () {
64
64
  return true;
65
65
  };
66
66
  var Input = getComponent();
67
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(Input, defaultProps));
68
- expect(wrapper.find('input').props().autoComplete).toBe('on');
67
+ var _render2 = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(Input, defaultProps)),
68
+ container = _render2.container;
69
+ expect(container.querySelector('input').getAttribute('autocomplete')).toBe('on');
69
70
  });
70
71
  test('`allowPasswordAutocomplete=false` sets `autoComplete` as off', function () {
71
72
  require('core/index').ui.allowPasswordAutocomplete = function () {
72
73
  return false;
73
74
  };
74
75
  var Input = getComponent();
75
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(Input, defaultProps));
76
- expect(wrapper.find('input').props().autoComplete).toBe('off');
76
+ var _render3 = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(Input, defaultProps)),
77
+ container = _render3.container;
78
+ expect(container.querySelector('input').getAttribute('autocomplete')).toBe('off');
77
79
  });
78
80
  test('shows invalid Hint', function () {
79
81
  var Input = getComponent();
80
- var wrapper = (0, _enzyme.mount)(/*#__PURE__*/_react.default.createElement(Input, defaultProps));
81
- expect(wrapper.find(_input_wrap.default).props().invalidHint).toBe('invalidHint');
82
+ var _render4 = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(Input, defaultProps)),
83
+ container = _render4.container;
84
+ var inputWrap = container.querySelector('[data-__type="input_wrap"]');
85
+ expect((0, _testUtils.getMockProps)(inputWrap).invalidHint).toBe('invalidHint');
82
86
  });
83
87
  });
@@ -169,5 +169,5 @@ function trimAuthParams() {
169
169
  return p;
170
170
  }
171
171
  function getVersion() {
172
- return "15.0.0";
172
+ return "15.0.1";
173
173
  }
package/lib/i18n.js CHANGED
@@ -90,7 +90,7 @@ function assertLanguage(m, language, base) {
90
90
  function syncLang(m, language, _cb) {
91
91
  (0, _cdn_utils.load)({
92
92
  method: 'registerLanguageDictionary',
93
- url: "".concat(l.languageBaseUrl(m), "/js/lock/").concat("15.0.0", "/").concat(language, ".js"),
93
+ url: "".concat(l.languageBaseUrl(m), "/js/lock/").concat("15.0.1", "/").concat(language, ".js"),
94
94
  check: function check(str) {
95
95
  return str && str === language;
96
96
  },
package/lib/lock.js CHANGED
@@ -36,7 +36,7 @@ var Auth0Lock = exports.default = /*#__PURE__*/function (_Core) {
36
36
  _inherits(Auth0Lock, _Core);
37
37
  return _createClass(Auth0Lock);
38
38
  }(_core.default); // telemetry
39
- Auth0Lock.version = "15.0.0";
39
+ Auth0Lock.version = "15.0.1";
40
40
 
41
41
  // TODO: should we have different telemetry for classic/passwordless?
42
42
  // TODO: should we set telemetry info before each request?
@@ -36,4 +36,4 @@ var Auth0LockPasswordless = exports.default = /*#__PURE__*/function (_Core) {
36
36
  _inherits(Auth0LockPasswordless, _Core);
37
37
  return _createClass(Auth0LockPasswordless);
38
38
  }(_core.default);
39
- Auth0LockPasswordless.version = "15.0.0";
39
+ Auth0LockPasswordless.version = "15.0.1";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth0-lock",
3
- "version": "15.0.0",
3
+ "version": "15.0.1",
4
4
  "description": "Auth0 Lock",
5
5
  "author": "Auth0 <support@auth0.com> (http://auth0.com)",
6
6
  "license": "MIT",
@@ -63,8 +63,10 @@
63
63
  "@babel/plugin-syntax-import-meta": "^7.0.0",
64
64
  "@babel/preset-env": "^7.0.0",
65
65
  "@babel/preset-react": "^7.0.0",
66
- "@cfaester/enzyme-adapter-react-18": "^0.8.0",
67
66
  "@google-cloud/translate": "^9.1.0",
67
+ "@testing-library/jest-dom": "^6.9.1",
68
+ "@testing-library/react": "^16.3.2",
69
+ "@testing-library/user-event": "^14.6.1",
68
70
  "@types/auth0-js": "^9.21.6",
69
71
  "babel-jest": "^29.3.1",
70
72
  "babel-loader": "8.4.1",
@@ -78,7 +80,6 @@
78
80
  "cross-env": "^7.0.3",
79
81
  "css-loader": "^7.1.2",
80
82
  "emojic": "^1.1.17",
81
- "enzyme": "^3.1.1",
82
83
  "es-check": "^6.0.0",
83
84
  "eslint": "^8.45.0",
84
85
  "eslint-config-prettier": "^8.8.0",
@@ -109,7 +110,6 @@
109
110
  "mocha": "^11.5.0",
110
111
  "prettier": "^2.4.1",
111
112
  "puppeteer": "^24.9.0",
112
- "react-test-renderer": "^18.2.0",
113
113
  "sinon": "^1.15.4",
114
114
  "stylus": "^0.64.0",
115
115
  "stylus-loader": "^3.0.2",
@@ -132,8 +132,8 @@
132
132
  "password-sheriff": "^2.0.0",
133
133
  "prop-types": "^15.8.0",
134
134
  "qs": "^6.14.1",
135
- "react": "^18.2.0",
136
- "react-dom": "^18.2.0",
135
+ "react": "^18.2.0 || ^19.0.0",
136
+ "react-dom": "^18.2.0 || ^19.0.0",
137
137
  "react-transition-group": "^4.4.5",
138
138
  "url-join": "^1.1.0",
139
139
  "validator": "^13.15.22"
@@ -158,7 +158,7 @@
158
158
  "<rootDir>/src/",
159
159
  "<rootDir>/src/__tests__"
160
160
  ],
161
- "setupFiles": [
161
+ "setupFilesAfterEnv": [
162
162
  "<rootDir>/src/__tests__/setup-tests.js"
163
163
  ],
164
164
  "coveragePathIgnorePatterns": [