powr-sdk-web 6.15.1 → 6.17.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.
@@ -10,6 +10,7 @@ var _firebase = require("../utils/firebase");
10
10
  var _AddPhonePanel = _interopRequireDefault(require("../onboarding/AddPhonePanel"));
11
11
  var _PhoneInput = _interopRequireDefault(require("../components/PhoneInput"));
12
12
  var _utils = require("../onboarding/utils");
13
+ var _profileNameStep = require("../onboarding/steps/profileNameStep");
13
14
  var _phone = require("../utils/phone");
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
15
16
  var cache;
@@ -17,13 +18,13 @@ function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e;
17
18
  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); }
18
19
  function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
19
20
  function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
21
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
22
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
20
23
  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; }
21
24
  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; }
22
25
  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; }
23
26
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
24
27
  function _toPrimitive(t, e) { if ("object" != _typeof(t) || !t) return t; var r; if ("undefined" != typeof Symbol && void 0 !== (r = t[Symbol.toPrimitive])) { var i = r.call(t, e || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === e ? String : Number)(t); }
25
- function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
26
- function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
27
28
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
28
29
  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."); }
29
30
  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; } }
@@ -48,6 +49,14 @@ var PowrLogin = function PowrLogin(_ref) {
48
49
  passwordResetHelpUrl = _ref$passwordResetHel === void 0 ? null : _ref$passwordResetHel,
49
50
  _ref$passwordResetHel2 = _ref.passwordResetHelpLabel,
50
51
  passwordResetHelpLabel = _ref$passwordResetHel2 === void 0 ? 'Forgot password? WhatsApp us' : _ref$passwordResetHel2,
52
+ _ref$forgotPasswordCh = _ref.forgotPasswordChannel,
53
+ forgotPasswordChannel = _ref$forgotPasswordCh === void 0 ? null : _ref$forgotPasswordCh,
54
+ _ref$otpApp = _ref.otpApp,
55
+ otpApp = _ref$otpApp === void 0 ? null : _ref$otpApp,
56
+ _ref$powrAccountUrl = _ref.powrAccountUrl,
57
+ powrAccountUrl = _ref$powrAccountUrl === void 0 ? 'https://lawazia.tech/#identity' : _ref$powrAccountUrl,
58
+ _ref$otpReset = _ref.otpReset,
59
+ otpReset = _ref$otpReset === void 0 ? false : _ref$otpReset,
51
60
  _ref$completeProfileO = _ref.completeProfileOnLogin,
52
61
  completeProfileOnLogin = _ref$completeProfileO === void 0 ? false : _ref$completeProfileO,
53
62
  _ref$requireTerms = _ref.requireTerms,
@@ -63,6 +72,7 @@ var PowrLogin = function PowrLogin(_ref) {
63
72
  onSessionExpired = _ref.onSessionExpired;
64
73
  var projectId = projectIdProp || config.projectId;
65
74
  var resolvedDefaultCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
75
+ var resetChannel = forgotPasswordChannel || (otpReset ? 'otp' : 'whatsapp');
66
76
  var _useState = (0, _react.useState)(function () {
67
77
  switch (mode) {
68
78
  case 'login':
@@ -122,55 +132,116 @@ var PowrLogin = function PowrLogin(_ref) {
122
132
  _useState20 = _slicedToArray(_useState19, 2),
123
133
  otpSent = _useState20[0],
124
134
  setOtpSent = _useState20[1];
125
- var _useState21 = (0, _react.useState)(false),
135
+ var _useState21 = (0, _react.useState)(null),
126
136
  _useState22 = _slicedToArray(_useState21, 2),
127
- otpLoading = _useState22[0],
128
- setOtpLoading = _useState22[1];
137
+ smsResetStep = _useState22[0],
138
+ setSmsResetStep = _useState22[1];
129
139
  var _useState23 = (0, _react.useState)(''),
130
140
  _useState24 = _slicedToArray(_useState23, 2),
131
- otp = _useState24[0],
132
- setOtp = _useState24[1];
133
- var _useState25 = (0, _react.useState)(false),
141
+ smsOtp = _useState24[0],
142
+ setSmsOtp = _useState24[1];
143
+ var _useState25 = (0, _react.useState)(''),
134
144
  _useState26 = _slicedToArray(_useState25, 2),
135
- firebaseOtpSent = _useState26[0],
136
- setFirebaseOtpSent = _useState26[1];
137
- var _useState27 = (0, _react.useState)(null),
145
+ smsNewPassword = _useState26[0],
146
+ setSmsNewPassword = _useState26[1];
147
+ var _useState27 = (0, _react.useState)(''),
138
148
  _useState28 = _slicedToArray(_useState27, 2),
139
- firebaseConfirm = _useState28[0],
140
- setFirebaseConfirm = _useState28[1];
141
- var _useState29 = (0, _react.useState)(false),
149
+ smsConfirmPassword = _useState28[0],
150
+ setSmsConfirmPassword = _useState28[1];
151
+ var _useState29 = (0, _react.useState)(null),
142
152
  _useState30 = _slicedToArray(_useState29, 2),
143
- showOtpModal = _useState30[0],
144
- setShowOtpModal = _useState30[1];
145
- var _useState31 = (0, _react.useState)(false),
153
+ smsVerifyAuth = _useState30[0],
154
+ setSmsVerifyAuth = _useState30[1];
155
+ var _useState31 = (0, _react.useState)('phone'),
146
156
  _useState32 = _slicedToArray(_useState31, 2),
147
- isPhoneVerified = _useState32[0],
148
- setIsPhoneVerified = _useState32[1];
149
- var _useState33 = (0, _react.useState)('form'),
157
+ loginGate = _useState32[0],
158
+ setLoginGate = _useState32[1];
159
+ var _useState33 = (0, _react.useState)(false),
150
160
  _useState34 = _slicedToArray(_useState33, 2),
151
- authView = _useState34[0],
152
- setAuthView = _useState34[1];
153
- var _useState35 = (0, _react.useState)(null),
161
+ otpLoading = _useState34[0],
162
+ setOtpLoading = _useState34[1];
163
+ var _useState35 = (0, _react.useState)(''),
154
164
  _useState36 = _slicedToArray(_useState35, 2),
155
- pendingAuth = _useState36[0],
156
- setPendingAuth = _useState36[1];
165
+ otp = _useState36[0],
166
+ setOtp = _useState36[1];
157
167
  var _useState37 = (0, _react.useState)(false),
158
168
  _useState38 = _slicedToArray(_useState37, 2),
159
- termsAccepted = _useState38[0],
160
- setTermsAccepted = _useState38[1];
161
- var _useState39 = (0, _react.useState)(resolvedDefaultCountry),
169
+ firebaseOtpSent = _useState38[0],
170
+ setFirebaseOtpSent = _useState38[1];
171
+ var _useState39 = (0, _react.useState)(null),
162
172
  _useState40 = _slicedToArray(_useState39, 2),
163
- phoneCountry = _useState40[0],
164
- setPhoneCountry = _useState40[1];
173
+ firebaseConfirm = _useState40[0],
174
+ setFirebaseConfirm = _useState40[1];
165
175
  var _useState41 = (0, _react.useState)(false),
166
176
  _useState42 = _slicedToArray(_useState41, 2),
167
- registerPhoneValid = _useState42[0],
168
- setRegisterPhoneValid = _useState42[1];
169
- var _useState43 = (0, _react.useState)(''),
177
+ showOtpModal = _useState42[0],
178
+ setShowOtpModal = _useState42[1];
179
+ var _useState43 = (0, _react.useState)(false),
170
180
  _useState44 = _slicedToArray(_useState43, 2),
171
- registerPhoneE164 = _useState44[0],
172
- setRegisterPhoneE164 = _useState44[1];
173
- var shouldShowToggle = mode === 'toggle';
181
+ isPhoneVerified = _useState44[0],
182
+ setIsPhoneVerified = _useState44[1];
183
+ var _useState45 = (0, _react.useState)('form'),
184
+ _useState46 = _slicedToArray(_useState45, 2),
185
+ authView = _useState46[0],
186
+ setAuthView = _useState46[1];
187
+ var _useState47 = (0, _react.useState)(null),
188
+ _useState48 = _slicedToArray(_useState47, 2),
189
+ pendingAuth = _useState48[0],
190
+ setPendingAuth = _useState48[1];
191
+ var _useState49 = (0, _react.useState)(false),
192
+ _useState50 = _slicedToArray(_useState49, 2),
193
+ termsAccepted = _useState50[0],
194
+ setTermsAccepted = _useState50[1];
195
+ var _useState51 = (0, _react.useState)(resolvedDefaultCountry),
196
+ _useState52 = _slicedToArray(_useState51, 2),
197
+ phoneCountry = _useState52[0],
198
+ setPhoneCountry = _useState52[1];
199
+ var _useState53 = (0, _react.useState)(false),
200
+ _useState54 = _slicedToArray(_useState53, 2),
201
+ registerPhoneValid = _useState54[0],
202
+ setRegisterPhoneValid = _useState54[1];
203
+ var _useState55 = (0, _react.useState)(''),
204
+ _useState56 = _slicedToArray(_useState55, 2),
205
+ registerPhoneE164 = _useState56[0],
206
+ setRegisterPhoneE164 = _useState56[1];
207
+ var shouldShowToggle = false;
208
+ var askForProfile = true;
209
+ var finishWithSession = function finishWithSession(data) {
210
+ if (!(data !== null && data !== void 0 && data.token)) return;
211
+ if (askForProfile && data.user && (0, _utils.needsPhone)(data.user)) {
212
+ setPendingAuth({
213
+ user: data.user,
214
+ token: data.token,
215
+ refreshToken: data.refreshToken,
216
+ onTokenRefreshed: function onTokenRefreshed(newToken) {
217
+ setPendingAuth(function (prev) {
218
+ return prev ? _objectSpread(_objectSpread({}, prev), {}, {
219
+ token: newToken
220
+ }) : prev;
221
+ });
222
+ }
223
+ });
224
+ setAuthView('add-phone');
225
+ return;
226
+ }
227
+ if (askForProfile && data.user && (0, _utils.needsProfileName)(data.user)) {
228
+ setPendingAuth({
229
+ user: data.user,
230
+ token: data.token,
231
+ refreshToken: data.refreshToken,
232
+ onTokenRefreshed: function onTokenRefreshed(newToken) {
233
+ setPendingAuth(function (prev) {
234
+ return prev ? _objectSpread(_objectSpread({}, prev), {}, {
235
+ token: newToken
236
+ }) : prev;
237
+ });
238
+ }
239
+ });
240
+ setAuthView('add-name');
241
+ return;
242
+ }
243
+ if (onLogin) onLogin(data);
244
+ };
174
245
  var handleInputChange = /*#__PURE__*/function () {
175
246
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
176
247
  var _e$target, name, value;
@@ -401,48 +472,144 @@ var PowrLogin = function PowrLogin(_ref) {
401
472
  var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
402
473
  return emailRegex.test(email);
403
474
  };
475
+ var storedPhone = function storedPhone() {
476
+ return registerPhoneE164 || (0, _phone.coercePhoneForStorage)(formData.phoneOrEmail.trim(), phoneCountry) || (0, _phone.coercePhoneForStorage)(formData.phoneOrEmail.trim(), resolvedDefaultCountry) || (0, _phone.normalizePhone)(formData.phoneOrEmail.trim(), phoneCountry);
477
+ };
478
+ var isIndiaNumber = function isIndiaNumber() {
479
+ var e164 = storedPhone() || '';
480
+ return e164.startsWith('+91') || phoneCountry === 'IN';
481
+ };
482
+ var continuePhone = /*#__PURE__*/function () {
483
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
484
+ var phoneOrEmail, _yield$apiCall, data, ok, _t5;
485
+ return _regenerator().w(function (_context4) {
486
+ while (1) switch (_context4.p = _context4.n) {
487
+ case 0:
488
+ phoneOrEmail = storedPhone();
489
+ if (registerPhoneValid) {
490
+ _context4.n = 1;
491
+ break;
492
+ }
493
+ setFieldErrors({
494
+ phoneOrEmail: 'Enter a valid mobile number'
495
+ });
496
+ return _context4.a(2);
497
+ case 1:
498
+ setLoading(true);
499
+ setError('');
500
+ setSuccess('');
501
+ _context4.p = 2;
502
+ _context4.n = 3;
503
+ return (0, _auth.apiCall)(apiUrl, '/auth/login-options', projectId, {
504
+ method: 'POST',
505
+ body: {
506
+ phoneOrEmail: phoneOrEmail,
507
+ mobile: smsMobile()
508
+ }
509
+ });
510
+ case 3:
511
+ _yield$apiCall = _context4.v;
512
+ data = _yield$apiCall.data;
513
+ ok = _yield$apiCall.ok;
514
+ if (!(ok && data.exists && data.hasPassword)) {
515
+ _context4.n = 4;
516
+ break;
517
+ }
518
+ setLoginGate('password');
519
+ setSuccess('');
520
+ return _context4.a(2);
521
+ case 4:
522
+ if (!(resetChannel === 'otp')) {
523
+ _context4.n = 8;
524
+ break;
525
+ }
526
+ if (isIndiaNumber()) {
527
+ _context4.n = 5;
528
+ break;
529
+ }
530
+ setLoginGate('password');
531
+ setError('SMS is for Indian numbers. Sign in with your password.');
532
+ return _context4.a(2);
533
+ case 5:
534
+ if (!ok) {
535
+ _context4.n = 7;
536
+ break;
537
+ }
538
+ setLoading(false);
539
+ _context4.n = 6;
540
+ return handleSmsForgotStart();
541
+ case 6:
542
+ return _context4.a(2);
543
+ case 7:
544
+ setLoginGate('password');
545
+ return _context4.a(2);
546
+ case 8:
547
+ if (!(ok && (!data.exists || !data.hasPassword))) {
548
+ _context4.n = 9;
549
+ break;
550
+ }
551
+ setLoginGate('help');
552
+ return _context4.a(2);
553
+ case 9:
554
+ setLoginGate('password');
555
+ _context4.n = 11;
556
+ break;
557
+ case 10:
558
+ _context4.p = 10;
559
+ _t5 = _context4.v;
560
+ setLoginGate('password');
561
+ case 11:
562
+ _context4.p = 11;
563
+ setLoading(false);
564
+ return _context4.f(11);
565
+ case 12:
566
+ return _context4.a(2);
567
+ }
568
+ }, _callee4, null, [[2, 10, 11, 12]]);
569
+ }));
570
+ return function continuePhone() {
571
+ return _ref6.apply(this, arguments);
572
+ };
573
+ }();
404
574
  var handleSubmit = /*#__PURE__*/function () {
405
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
575
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(e) {
406
576
  var skipPhoneValidation,
407
577
  errors,
408
578
  value,
409
- isEmail,
410
579
  endpoint,
411
580
  normalizedPhone,
412
581
  payload,
413
- _yield$apiCall,
582
+ _yield$apiCall2,
414
583
  data,
415
584
  ok,
416
- _args4 = arguments,
417
- _t5;
418
- return _regenerator().w(function (_context4) {
419
- while (1) switch (_context4.p = _context4.n) {
585
+ _login$data,
586
+ login,
587
+ _args5 = arguments,
588
+ _t6;
589
+ return _regenerator().w(function (_context5) {
590
+ while (1) switch (_context5.p = _context5.n) {
420
591
  case 0:
421
- skipPhoneValidation = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : false;
592
+ skipPhoneValidation = _args5.length > 1 && _args5[1] !== undefined ? _args5[1] : false;
422
593
  if (e) e.preventDefault();
423
- setLoading(true);
424
594
  setError('');
425
595
  setSuccess('');
426
596
  setFieldErrors({});
427
597
  errors = {};
428
598
  value = formData.phoneOrEmail.trim();
429
- isEmail = value.includes('@');
599
+ if (!(isLogin && loginGate === 'phone' && !smsResetStep)) {
600
+ _context5.n = 2;
601
+ break;
602
+ }
603
+ _context5.n = 1;
604
+ return continuePhone();
605
+ case 1:
606
+ return _context5.a(2);
607
+ case 2:
430
608
  if (!formData.phoneOrEmail.trim()) {
431
- errors.phoneOrEmail = isLogin ? 'Phone or email is required' : 'Phone number is required';
609
+ errors.phoneOrEmail = 'Phone number is required';
432
610
  }
433
-
434
- // Registration: Only allow phone numbers
435
- if (!isLogin && !registerPhoneValid) {
436
- errors.phoneOrEmail = international ? 'Please enter a valid phone number' : 'Please enter a valid mobile number';
437
- }
438
-
439
- // Login: Allow both phone and email
440
- if (isLogin) {
441
- if (isEmail && !isValidEmail(value)) {
442
- errors.phoneOrEmail = 'Please enter a valid email address';
443
- } else if (!isEmail && !(0, _phone.coercePhoneForStorage)(value, resolvedDefaultCountry)) {
444
- errors.phoneOrEmail = 'Please enter a valid phone number (include country code, e.g. +1…) or email';
445
- }
611
+ if (!registerPhoneValid && !storedPhone()) {
612
+ errors.phoneOrEmail = 'Please enter a valid mobile number';
446
613
  }
447
614
  if (!formData.password.trim()) {
448
615
  errors.password = 'Password is required';
@@ -462,72 +629,62 @@ var PowrLogin = function PowrLogin(_ref) {
462
629
  errors.terms = 'Please accept the terms to continue';
463
630
  }
464
631
  if (!(Object.keys(errors).length > 0)) {
465
- _context4.n = 1;
632
+ _context5.n = 3;
466
633
  break;
467
634
  }
468
635
  setFieldErrors(errors);
469
- setLoading(false);
470
- return _context4.a(2);
471
- case 1:
472
- _context4.p = 1;
636
+ return _context5.a(2);
637
+ case 3:
638
+ setLoading(true);
639
+ _context5.p = 4;
473
640
  endpoint = isLogin ? "/auth/login" : "/auth/register";
474
- normalizedPhone = isLogin ? isEmail ? value : (0, _phone.coercePhoneForStorage)(value, resolvedDefaultCountry) || (0, _phone.normalizePhone)(value, resolvedDefaultCountry) : registerPhoneE164 || (0, _phone.coercePhoneForStorage)(value, phoneCountry) || (0, _phone.normalizePhone)(value, phoneCountry);
641
+ normalizedPhone = storedPhone() || value;
475
642
  payload = isLogin ? {
476
- phoneOrEmail: isEmail ? value : normalizedPhone,
643
+ phoneOrEmail: normalizedPhone,
477
644
  password: formData.password
478
645
  } : {
479
646
  fullName: formData.fullName,
480
647
  phoneOrEmail: normalizedPhone,
481
648
  password: formData.password
482
649
  };
483
- _context4.n = 2;
650
+ _context5.n = 5;
484
651
  return (0, _auth.apiCall)(apiUrl, endpoint, projectId, {
485
652
  method: 'POST',
486
653
  body: payload
487
654
  });
488
- case 2:
489
- _yield$apiCall = _context4.v;
490
- data = _yield$apiCall.data;
491
- ok = _yield$apiCall.ok;
655
+ case 5:
656
+ _yield$apiCall2 = _context5.v;
657
+ data = _yield$apiCall2.data;
658
+ ok = _yield$apiCall2.ok;
492
659
  if (!ok) {
493
- _context4.n = 6;
660
+ _context5.n = 9;
494
661
  break;
495
662
  }
496
663
  setSuccess(isLogin ? 'Login successful!' : 'Registration successful!');
497
664
  if (!isLogin) {
498
- _context4.n = 4;
499
- break;
500
- }
501
- if (!(completeProfileOnLogin && (0, _utils.needsPhone)(data.user))) {
502
- _context4.n = 3;
665
+ _context5.n = 6;
503
666
  break;
504
667
  }
505
- setPendingAuth({
506
- user: data.user,
507
- token: data.token,
508
- refreshToken: data.refreshToken,
509
- onTokenRefreshed: function onTokenRefreshed(newToken) {
510
- setPendingAuth(function (prev) {
511
- return prev ? _objectSpread(_objectSpread({}, prev), {}, {
512
- token: newToken
513
- }) : prev;
514
- });
668
+ finishWithSession(data);
669
+ _context5.n = 8;
670
+ break;
671
+ case 6:
672
+ _context5.n = 7;
673
+ return (0, _auth.apiCall)(apiUrl, '/auth/login', projectId, {
674
+ method: 'POST',
675
+ body: {
676
+ phoneOrEmail: normalizedPhone,
677
+ password: formData.password
515
678
  }
516
679
  });
517
- setAuthView('add-phone');
518
- setLoading(false);
519
- return _context4.a(2);
520
- case 3:
521
- if (onLogin) {
522
- onLogin(data);
523
- }
524
- _context4.n = 5;
525
- break;
526
- case 4:
527
- if (!isLogin && onRegister) {
680
+ case 7:
681
+ login = _context5.v;
682
+ if (login.ok && (_login$data = login.data) !== null && _login$data !== void 0 && _login$data.token) {
683
+ if (onLogin) finishWithSession(login.data);else if (onRegister) onRegister(login.data);
684
+ } else if (onRegister) {
528
685
  onRegister(data);
529
686
  }
530
- case 5:
687
+ case 8:
531
688
  setFormData({
532
689
  phoneOrEmail: '',
533
690
  password: '',
@@ -538,9 +695,9 @@ var PowrLogin = function PowrLogin(_ref) {
538
695
  setOtp('');
539
696
  setFirebaseOtpSent(false);
540
697
  setFirebaseConfirm(null);
541
- _context4.n = 7;
698
+ _context5.n = 10;
542
699
  break;
543
- case 6:
700
+ case 9:
544
701
  if (data.message) {
545
702
  setError(data.message);
546
703
  } else if (data.error) {
@@ -554,24 +711,24 @@ var PowrLogin = function PowrLogin(_ref) {
554
711
  } else {
555
712
  setError("".concat(isLogin ? 'Login' : 'Registration', " failed. Please try again."));
556
713
  }
557
- case 7:
558
- _context4.n = 9;
714
+ case 10:
715
+ _context5.n = 12;
559
716
  break;
560
- case 8:
561
- _context4.p = 8;
562
- _t5 = _context4.v;
717
+ case 11:
718
+ _context5.p = 11;
719
+ _t6 = _context5.v;
563
720
  setError('Network error. Please try again.');
564
- case 9:
565
- _context4.p = 9;
721
+ case 12:
722
+ _context5.p = 12;
566
723
  setLoading(false);
567
- return _context4.f(9);
568
- case 10:
569
- return _context4.a(2);
724
+ return _context5.f(12);
725
+ case 13:
726
+ return _context5.a(2);
570
727
  }
571
- }, _callee4, null, [[1, 8, 9, 10]]);
728
+ }, _callee5, null, [[4, 11, 12, 13]]);
572
729
  }));
573
730
  return function handleSubmit(_x3) {
574
- return _ref6.apply(this, arguments);
731
+ return _ref7.apply(this, arguments);
575
732
  };
576
733
  }();
577
734
  var toggleMode = function toggleMode() {
@@ -631,26 +788,313 @@ var PowrLogin = function PowrLogin(_ref) {
631
788
  }
632
789
  setError('Your session timed out. Sign in again to add your phone number.');
633
790
  };
791
+ var smsMobile = function smsMobile() {
792
+ var digits = formData.phoneOrEmail.replace(/\D/g, '');
793
+ if (digits.length === 10) return digits;
794
+ if (digits.length === 12 && digits.startsWith('91')) return digits.slice(2);
795
+ if (digits.length === 11 && digits.startsWith('0')) return digits.slice(1);
796
+ return digits;
797
+ };
798
+ var hostOtp = /*#__PURE__*/function () {
799
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(path, extra) {
800
+ var body, app, _yield$apiCall3, data, ok;
801
+ return _regenerator().w(function (_context6) {
802
+ while (1) switch (_context6.n) {
803
+ case 0:
804
+ body = _objectSpread({
805
+ mobile: smsMobile()
806
+ }, extra);
807
+ app = otpApp && String(otpApp).trim();
808
+ if (app) body.app = app;
809
+ _context6.n = 1;
810
+ return (0, _auth.apiCall)(apiUrl, path, projectId, {
811
+ method: 'POST',
812
+ body: body
813
+ });
814
+ case 1:
815
+ _yield$apiCall3 = _context6.v;
816
+ data = _yield$apiCall3.data;
817
+ ok = _yield$apiCall3.ok;
818
+ if (!(!ok || data.success === false)) {
819
+ _context6.n = 2;
820
+ break;
821
+ }
822
+ throw new Error(data.message || 'Could not complete the phone check');
823
+ case 2:
824
+ return _context6.a(2, data);
825
+ }
826
+ }, _callee6);
827
+ }));
828
+ return function hostOtp(_x4, _x5) {
829
+ return _ref8.apply(this, arguments);
830
+ };
831
+ }();
832
+ var handleSmsForgotStart = /*#__PURE__*/function () {
833
+ var _ref9 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee7() {
834
+ var _t7;
835
+ return _regenerator().w(function (_context7) {
836
+ while (1) switch (_context7.p = _context7.n) {
837
+ case 0:
838
+ if (!(resetChannel !== 'otp')) {
839
+ _context7.n = 1;
840
+ break;
841
+ }
842
+ return _context7.a(2);
843
+ case 1:
844
+ if (!(!isIndiaNumber() || smsMobile().length !== 10)) {
845
+ _context7.n = 2;
846
+ break;
847
+ }
848
+ setFieldErrors({
849
+ phoneOrEmail: 'SMS is for a 10-digit Indian mobile'
850
+ });
851
+ return _context7.a(2);
852
+ case 2:
853
+ setSmsOtp('');
854
+ setSmsResetStep('otp');
855
+ setOtpLoading(true);
856
+ setError('');
857
+ setSuccess('Sending a code…');
858
+ _context7.p = 3;
859
+ _context7.n = 4;
860
+ return hostOtp('/auth/send-otp');
861
+ case 4:
862
+ setSuccess('Code sent. Enter the 5-digit SMS.');
863
+ _context7.n = 6;
864
+ break;
865
+ case 5:
866
+ _context7.p = 5;
867
+ _t7 = _context7.v;
868
+ setSmsResetStep(null);
869
+ setSuccess('');
870
+ setError(_t7.message || 'Could not send the code.');
871
+ case 6:
872
+ _context7.p = 6;
873
+ setOtpLoading(false);
874
+ return _context7.f(6);
875
+ case 7:
876
+ return _context7.a(2);
877
+ }
878
+ }, _callee7, null, [[3, 5, 6, 7]]);
879
+ }));
880
+ return function handleSmsForgotStart() {
881
+ return _ref9.apply(this, arguments);
882
+ };
883
+ }();
884
+ var handleSmsVerify = /*#__PURE__*/function () {
885
+ var _ref0 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee8() {
886
+ var code, data, _t8;
887
+ return _regenerator().w(function (_context8) {
888
+ while (1) switch (_context8.p = _context8.n) {
889
+ case 0:
890
+ code = smsOtp.replace(/\D/g, '').slice(0, 5);
891
+ if (!(code.length !== 5)) {
892
+ _context8.n = 1;
893
+ break;
894
+ }
895
+ setError('Enter the 5-digit code.');
896
+ return _context8.a(2);
897
+ case 1:
898
+ setOtpLoading(true);
899
+ setError('');
900
+ _context8.p = 2;
901
+ _context8.n = 3;
902
+ return hostOtp('/auth/verify-otp', {
903
+ otp: code
904
+ });
905
+ case 3:
906
+ data = _context8.v;
907
+ setSmsVerifyAuth(data);
908
+ setSmsNewPassword('');
909
+ setSmsConfirmPassword('');
910
+ setSmsResetStep('password');
911
+ setSuccess(data.user ? 'Phone confirmed. Set a new password.' : 'Create a password. Next time you sign in with this number and password.');
912
+ _context8.n = 5;
913
+ break;
914
+ case 4:
915
+ _context8.p = 4;
916
+ _t8 = _context8.v;
917
+ setError(_t8.message || 'Could not verify the code.');
918
+ case 5:
919
+ _context8.p = 5;
920
+ setOtpLoading(false);
921
+ return _context8.f(5);
922
+ case 6:
923
+ return _context8.a(2);
924
+ }
925
+ }, _callee8, null, [[2, 4, 5, 6]]);
926
+ }));
927
+ return function handleSmsVerify() {
928
+ return _ref0.apply(this, arguments);
929
+ };
930
+ }();
931
+ var handleSmsSavePassword = /*#__PURE__*/function () {
932
+ var _ref1 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee0() {
933
+ var phoneOrEmail, resetExisting, registered, _registered$data, msg, login, _login$data2, _t9;
934
+ return _regenerator().w(function (_context0) {
935
+ while (1) switch (_context0.p = _context0.n) {
936
+ case 0:
937
+ if (!(smsNewPassword.length < 6)) {
938
+ _context0.n = 1;
939
+ break;
940
+ }
941
+ setError('Password must be at least 6 characters');
942
+ return _context0.a(2);
943
+ case 1:
944
+ if (!(smsNewPassword !== smsConfirmPassword)) {
945
+ _context0.n = 2;
946
+ break;
947
+ }
948
+ setError('Passwords do not match');
949
+ return _context0.a(2);
950
+ case 2:
951
+ phoneOrEmail = storedPhone() || formData.phoneOrEmail.trim();
952
+ setOtpLoading(true);
953
+ setError('');
954
+ _context0.p = 3;
955
+ resetExisting = /*#__PURE__*/function () {
956
+ var _ref10 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee9() {
957
+ var _forgot$data;
958
+ var forgot, _forgot$data2, reset, _reset$data;
959
+ return _regenerator().w(function (_context9) {
960
+ while (1) switch (_context9.n) {
961
+ case 0:
962
+ _context9.n = 1;
963
+ return (0, _auth.apiCall)(apiUrl, '/auth/forgot-password', projectId, {
964
+ method: 'POST',
965
+ body: {
966
+ phoneOrEmail: phoneOrEmail
967
+ }
968
+ });
969
+ case 1:
970
+ forgot = _context9.v;
971
+ if (!(!forgot.ok || !((_forgot$data = forgot.data) !== null && _forgot$data !== void 0 && _forgot$data.resetToken))) {
972
+ _context9.n = 2;
973
+ break;
974
+ }
975
+ throw new Error(((_forgot$data2 = forgot.data) === null || _forgot$data2 === void 0 ? void 0 : _forgot$data2.message) || 'Could not reset password.');
976
+ case 2:
977
+ _context9.n = 3;
978
+ return (0, _auth.apiCall)(apiUrl, '/auth/reset-password', projectId, {
979
+ method: 'POST',
980
+ body: {
981
+ resetToken: forgot.data.resetToken,
982
+ newPassword: smsNewPassword
983
+ }
984
+ });
985
+ case 3:
986
+ reset = _context9.v;
987
+ if (reset.ok) {
988
+ _context9.n = 4;
989
+ break;
990
+ }
991
+ throw new Error(((_reset$data = reset.data) === null || _reset$data === void 0 ? void 0 : _reset$data.message) || 'Could not save the new password.');
992
+ case 4:
993
+ return _context9.a(2);
994
+ }
995
+ }, _callee9);
996
+ }));
997
+ return function resetExisting() {
998
+ return _ref10.apply(this, arguments);
999
+ };
1000
+ }();
1001
+ if (!(smsVerifyAuth !== null && smsVerifyAuth !== void 0 && smsVerifyAuth.user)) {
1002
+ _context0.n = 5;
1003
+ break;
1004
+ }
1005
+ _context0.n = 4;
1006
+ return resetExisting();
1007
+ case 4:
1008
+ _context0.n = 9;
1009
+ break;
1010
+ case 5:
1011
+ _context0.n = 6;
1012
+ return (0, _auth.apiCall)(apiUrl, '/auth/register', projectId, {
1013
+ method: 'POST',
1014
+ body: {
1015
+ fullName: (formData.fullName || '').trim() || 'User',
1016
+ phoneOrEmail: phoneOrEmail,
1017
+ password: smsNewPassword
1018
+ }
1019
+ });
1020
+ case 6:
1021
+ registered = _context0.v;
1022
+ if (registered.ok) {
1023
+ _context0.n = 9;
1024
+ break;
1025
+ }
1026
+ msg = ((_registered$data = registered.data) === null || _registered$data === void 0 ? void 0 : _registered$data.message) || '';
1027
+ if (!/exist|already|registered/i.test(msg)) {
1028
+ _context0.n = 8;
1029
+ break;
1030
+ }
1031
+ _context0.n = 7;
1032
+ return resetExisting();
1033
+ case 7:
1034
+ _context0.n = 9;
1035
+ break;
1036
+ case 8:
1037
+ throw new Error(msg || 'Could not create the account.');
1038
+ case 9:
1039
+ _context0.n = 10;
1040
+ return (0, _auth.apiCall)(apiUrl, '/auth/login', projectId, {
1041
+ method: 'POST',
1042
+ body: {
1043
+ phoneOrEmail: phoneOrEmail,
1044
+ password: smsNewPassword
1045
+ }
1046
+ });
1047
+ case 10:
1048
+ login = _context0.v;
1049
+ if (login.ok) {
1050
+ _context0.n = 11;
1051
+ break;
1052
+ }
1053
+ throw new Error(((_login$data2 = login.data) === null || _login$data2 === void 0 ? void 0 : _login$data2.message) || 'Password saved. Sign in with it.');
1054
+ case 11:
1055
+ setSmsResetStep(null);
1056
+ setSmsVerifyAuth(null);
1057
+ setSuccess('Password saved.');
1058
+ finishWithSession(login.data);
1059
+ _context0.n = 13;
1060
+ break;
1061
+ case 12:
1062
+ _context0.p = 12;
1063
+ _t9 = _context0.v;
1064
+ setError(_t9.message || 'Could not reset password.');
1065
+ case 13:
1066
+ _context0.p = 13;
1067
+ setOtpLoading(false);
1068
+ return _context0.f(13);
1069
+ case 14:
1070
+ return _context0.a(2);
1071
+ }
1072
+ }, _callee0, null, [[3, 12, 13, 14]]);
1073
+ }));
1074
+ return function handleSmsSavePassword() {
1075
+ return _ref1.apply(this, arguments);
1076
+ };
1077
+ }();
634
1078
  var handleGetOtp = /*#__PURE__*/function () {
635
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
636
- var _yield$apiCall2, data, ok, _t6;
637
- return _regenerator().w(function (_context5) {
638
- while (1) switch (_context5.p = _context5.n) {
1079
+ var _ref11 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee1() {
1080
+ var _yield$apiCall4, data, ok, _t0;
1081
+ return _regenerator().w(function (_context1) {
1082
+ while (1) switch (_context1.p = _context1.n) {
639
1083
  case 0:
640
1084
  if (formData.phoneOrEmail.trim()) {
641
- _context5.n = 1;
1085
+ _context1.n = 1;
642
1086
  break;
643
1087
  }
644
1088
  setFieldErrors({
645
1089
  phoneOrEmail: 'Phone or email is required for OTP'
646
1090
  });
647
- return _context5.a(2);
1091
+ return _context1.a(2);
648
1092
  case 1:
649
1093
  setOtpLoading(true);
650
1094
  setError('');
651
1095
  setFieldErrors({});
652
- _context5.p = 2;
653
- _context5.n = 3;
1096
+ _context1.p = 2;
1097
+ _context1.n = 3;
654
1098
  return (0, _auth.apiCall)(apiUrl, "/auth/send-otp", projectId, {
655
1099
  method: 'POST',
656
1100
  body: {
@@ -658,9 +1102,9 @@ var PowrLogin = function PowrLogin(_ref) {
658
1102
  }
659
1103
  });
660
1104
  case 3:
661
- _yield$apiCall2 = _context5.v;
662
- data = _yield$apiCall2.data;
663
- ok = _yield$apiCall2.ok;
1105
+ _yield$apiCall4 = _context1.v;
1106
+ data = _yield$apiCall4.data;
1107
+ ok = _yield$apiCall4.ok;
664
1108
  if (ok) {
665
1109
  setOtpSent(true);
666
1110
  setSuccess('OTP sent successfully! Check your phone/email.');
@@ -668,23 +1112,23 @@ var PowrLogin = function PowrLogin(_ref) {
668
1112
  } else {
669
1113
  setError(data.message || 'Failed to send OTP. Please try again.');
670
1114
  }
671
- _context5.n = 5;
1115
+ _context1.n = 5;
672
1116
  break;
673
1117
  case 4:
674
- _context5.p = 4;
675
- _t6 = _context5.v;
1118
+ _context1.p = 4;
1119
+ _t0 = _context1.v;
676
1120
  setError('Network error. Please try again.');
677
1121
  case 5:
678
- _context5.p = 5;
1122
+ _context1.p = 5;
679
1123
  setOtpLoading(false);
680
- return _context5.f(5);
1124
+ return _context1.f(5);
681
1125
  case 6:
682
- return _context5.a(2);
1126
+ return _context1.a(2);
683
1127
  }
684
- }, _callee5, null, [[2, 4, 5, 6]]);
1128
+ }, _callee1, null, [[2, 4, 5, 6]]);
685
1129
  }));
686
1130
  return function handleGetOtp() {
687
- return _ref7.apply(this, arguments);
1131
+ return _ref11.apply(this, arguments);
688
1132
  };
689
1133
  }();
690
1134
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -705,7 +1149,10 @@ var PowrLogin = function PowrLogin(_ref) {
705
1149
  style: styles.subtitleContainer
706
1150
  }, /*#__PURE__*/_react["default"].createElement("p", {
707
1151
  style: styles.subtitle
708
- }, isLogin ? 'Sign in to your ' : 'Create your ', /*#__PURE__*/_react["default"].createElement("span", {
1152
+ }, isLogin ? 'Sign in to your ' : 'Create your ', powrAccountUrl ? /*#__PURE__*/_react["default"].createElement("a", {
1153
+ href: powrAccountUrl,
1154
+ target: "_blank",
1155
+ rel: "noopener noreferrer",
709
1156
  style: styles.powrAccountText,
710
1157
  onMouseEnter: function onMouseEnter() {
711
1158
  return setShowTooltip(true);
@@ -713,9 +1160,34 @@ var PowrLogin = function PowrLogin(_ref) {
713
1160
  onMouseLeave: function onMouseLeave() {
714
1161
  return setShowTooltip(false);
715
1162
  }
716
- }, "PowrAccount")), showTooltip && /*#__PURE__*/_react["default"].createElement("div", {
1163
+ }, "PowrAccount") : /*#__PURE__*/_react["default"].createElement("span", {
1164
+ style: styles.powrAccountText,
1165
+ onMouseEnter: function onMouseEnter() {
1166
+ return setShowTooltip(true);
1167
+ },
1168
+ onMouseLeave: function onMouseLeave() {
1169
+ return setShowTooltip(false);
1170
+ }
1171
+ }, "PowrAccount")), isLogin ? /*#__PURE__*/_react["default"].createElement("p", {
1172
+ style: _objectSpread(_objectSpread({}, styles.subtitle), {}, {
1173
+ marginTop: 6,
1174
+ fontSize: 14,
1175
+ fontWeight: 400
1176
+ })
1177
+ }, loginGate === 'password' ? 'Enter your password.' : smsResetStep === 'otp' ? 'Enter the code we sent.' : loginGate === 'help' ? 'WhatsApp us to get in.' : smsResetStep === 'password' ? 'Set a password for next time.' : 'Enter your mobile number.') : null, showTooltip && /*#__PURE__*/_react["default"].createElement("div", {
717
1178
  style: styles.tooltip
718
- }, "Secure authentication powered by Lawazia Tech"))), authView === 'add-phone' && pendingAuth ? /*#__PURE__*/_react["default"].createElement(_AddPhonePanel["default"], {
1179
+ }, "Secure authentication powered by Lawazia Tech"))), authView === 'add-name' && pendingAuth ? /*#__PURE__*/_react["default"].createElement(_profileNameStep.profileNameStep.Component, {
1180
+ ctx: {
1181
+ user: pendingAuth.user,
1182
+ token: pendingAuth.token,
1183
+ apiUrl: apiUrl,
1184
+ projectId: projectId,
1185
+ defaultCountry: resolvedDefaultCountry
1186
+ },
1187
+ onComplete: function onComplete(patch) {
1188
+ handleAddPhoneComplete(_objectSpread(_objectSpread({}, pendingAuth.user), patch), pendingAuth.token);
1189
+ }
1190
+ }) : authView === 'add-phone' && pendingAuth ? /*#__PURE__*/_react["default"].createElement(_AddPhonePanel["default"], {
719
1191
  apiUrl: apiUrl,
720
1192
  projectId: projectId,
721
1193
  pendingAuth: pendingAuth,
@@ -753,23 +1225,14 @@ var PowrLogin = function PowrLogin(_ref) {
753
1225
  }, /*#__PURE__*/_react["default"].createElement("label", {
754
1226
  htmlFor: "phoneOrEmail",
755
1227
  style: styles.label
756
- }, isLogin ? 'Phone or Email' : 'Phone Number'), !isLogin ? /*#__PURE__*/_react["default"].createElement(_PhoneInput["default"], {
1228
+ }, "Mobile"), /*#__PURE__*/_react["default"].createElement(_PhoneInput["default"], {
757
1229
  value: formData.phoneOrEmail,
758
1230
  country: phoneCountry,
759
1231
  onChange: handleRegisterPhoneChange,
760
- international: international,
1232
+ international: true,
761
1233
  allowedCountries: allowedCountries,
762
1234
  defaultCountry: resolvedDefaultCountry,
763
1235
  inputStyle: _objectSpread({}, fieldErrors.phoneOrEmail ? styles.inputError : {})
764
- }) : /*#__PURE__*/_react["default"].createElement("input", {
765
- type: "text",
766
- id: "phoneOrEmail",
767
- name: "phoneOrEmail",
768
- value: formData.phoneOrEmail,
769
- onChange: handlePhoneOrEmailChange,
770
- style: _objectSpread(_objectSpread({}, styles.input), fieldErrors.phoneOrEmail ? styles.inputError : {}),
771
- placeholder: "Phone (+country code) or email",
772
- required: true
773
1236
  }), fieldErrors.phoneOrEmail && /*#__PURE__*/_react["default"].createElement("div", {
774
1237
  style: styles.fieldError
775
1238
  }, fieldErrors.phoneOrEmail), !isLogin && requirePhoneVerification && /*#__PURE__*/_react["default"].createElement("div", {
@@ -787,7 +1250,7 @@ var PowrLogin = function PowrLogin(_ref) {
787
1250
  style: styles.successText
788
1251
  }, "Phone number verified successfully!"), /*#__PURE__*/_react["default"].createElement("div", {
789
1252
  id: "recaptcha-container"
790
- })), /*#__PURE__*/_react["default"].createElement("div", {
1253
+ })), (!isLogin || loginGate === 'password') && smsResetStep !== 'otp' && smsResetStep !== 'password' && /*#__PURE__*/_react["default"].createElement("div", {
791
1254
  style: styles.formGroup
792
1255
  }, /*#__PURE__*/_react["default"].createElement("label", {
793
1256
  htmlFor: "password",
@@ -867,27 +1330,78 @@ var PowrLogin = function PowrLogin(_ref) {
867
1330
  style: styles.checkboxText
868
1331
  }, "I agree to the Terms of Service and Privacy Policy")), fieldErrors.terms && /*#__PURE__*/_react["default"].createElement("div", {
869
1332
  style: styles.fieldError
870
- }, fieldErrors.terms)), isLogin && /*#__PURE__*/_react["default"].createElement("div", {
871
- style: styles.rememberSection
872
- }, /*#__PURE__*/_react["default"].createElement("label", {
873
- style: styles.checkboxLabel
874
- }, /*#__PURE__*/_react["default"].createElement("input", {
875
- type: "checkbox",
876
- style: styles.checkbox
877
- }), /*#__PURE__*/_react["default"].createElement("span", {
878
- style: styles.checkboxText
879
- }, "Remember me")), passwordResetHelpUrl ? /*#__PURE__*/_react["default"].createElement("a", {
1333
+ }, fieldErrors.terms)), isLogin && loginGate === 'help' && !smsResetStep && /*#__PURE__*/_react["default"].createElement("div", {
1334
+ style: styles.otpSection
1335
+ }, /*#__PURE__*/_react["default"].createElement("p", {
1336
+ style: styles.otpText
1337
+ }, "No password on this number yet. WhatsApp us to create an account or reset."), passwordResetHelpUrl ? /*#__PURE__*/_react["default"].createElement("a", {
880
1338
  href: passwordResetHelpUrl,
881
1339
  target: "_blank",
882
1340
  rel: "noopener noreferrer",
883
- style: styles.forgotPasswordLink
884
- }, passwordResetHelpLabel) : showForgotPassword ? /*#__PURE__*/_react["default"].createElement("button", {
1341
+ style: _objectSpread(_objectSpread({}, styles.otpButton), {}, {
1342
+ display: 'block',
1343
+ textAlign: 'center',
1344
+ textDecoration: 'none'
1345
+ })
1346
+ }, passwordResetHelpLabel) : /*#__PURE__*/_react["default"].createElement("p", {
1347
+ style: styles.otpText
1348
+ }, "WhatsApp the app\u2019s support number."), /*#__PURE__*/_react["default"].createElement("button", {
885
1349
  type: "button",
886
1350
  onClick: function onClick() {
887
- return setShowOtpOption(!showOtpOption);
1351
+ setLoginGate('password');
1352
+ setError('');
1353
+ setSuccess('');
888
1354
  },
889
1355
  style: styles.forgotPasswordLink
890
- }, "Forgot password?") : null), isLogin && !passwordResetHelpUrl && showForgotPassword && showOtpOption && /*#__PURE__*/_react["default"].createElement("div", {
1356
+ }, "I already have a password")), isLogin && resetChannel === 'otp' && smsResetStep === 'otp' && /*#__PURE__*/_react["default"].createElement("div", {
1357
+ style: styles.otpSection
1358
+ }, /*#__PURE__*/_react["default"].createElement("p", {
1359
+ style: styles.otpText
1360
+ }, otpLoading && success === 'Sending a code…' ? 'Sending a code to your phone…' : 'Enter the 5-digit code we sent to your phone.'), /*#__PURE__*/_react["default"].createElement("input", {
1361
+ type: "text",
1362
+ inputMode: "numeric",
1363
+ autoComplete: "one-time-code",
1364
+ value: smsOtp.replace(/\D/g, '').slice(0, 5),
1365
+ onChange: function onChange(e) {
1366
+ return setSmsOtp(e.target.value);
1367
+ },
1368
+ placeholder: "5-digit code",
1369
+ style: styles.input
1370
+ }), /*#__PURE__*/_react["default"].createElement("button", {
1371
+ type: "button",
1372
+ onClick: handleSmsVerify,
1373
+ disabled: otpLoading || smsOtp.replace(/\D/g, '').length !== 5,
1374
+ style: _objectSpread(_objectSpread({}, styles.otpButton), otpLoading ? styles.buttonDisabled : {})
1375
+ }, otpLoading ? 'Checking…' : 'Verify code')), isLogin && resetChannel === 'otp' && smsResetStep === 'password' && /*#__PURE__*/_react["default"].createElement("div", {
1376
+ style: styles.otpSection
1377
+ }, /*#__PURE__*/_react["default"].createElement("p", {
1378
+ style: styles.otpText
1379
+ }, smsVerifyAuth !== null && smsVerifyAuth !== void 0 && smsVerifyAuth.user ? 'Set a new password for this number.' : 'Create a password. Next time you sign in without SMS.'), /*#__PURE__*/_react["default"].createElement("input", {
1380
+ type: "password",
1381
+ autoComplete: "new-password",
1382
+ value: smsNewPassword,
1383
+ onChange: function onChange(e) {
1384
+ return setSmsNewPassword(e.target.value);
1385
+ },
1386
+ placeholder: "New password",
1387
+ style: _objectSpread(_objectSpread({}, styles.input), {}, {
1388
+ marginBottom: 8
1389
+ })
1390
+ }), /*#__PURE__*/_react["default"].createElement("input", {
1391
+ type: "password",
1392
+ autoComplete: "new-password",
1393
+ value: smsConfirmPassword,
1394
+ onChange: function onChange(e) {
1395
+ return setSmsConfirmPassword(e.target.value);
1396
+ },
1397
+ placeholder: "Confirm password",
1398
+ style: styles.input
1399
+ }), /*#__PURE__*/_react["default"].createElement("button", {
1400
+ type: "button",
1401
+ onClick: handleSmsSavePassword,
1402
+ disabled: otpLoading || smsNewPassword.length < 6,
1403
+ style: _objectSpread(_objectSpread({}, styles.otpButton), otpLoading ? styles.buttonDisabled : {})
1404
+ }, otpLoading ? 'Saving…' : 'Save password and sign in')), isLogin && resetChannel !== 'otp' && resetChannel !== 'whatsapp' && !passwordResetHelpUrl && showForgotPassword && showOtpOption && /*#__PURE__*/_react["default"].createElement("div", {
891
1405
  style: styles.otpSection
892
1406
  }, /*#__PURE__*/_react["default"].createElement("p", {
893
1407
  style: styles.otpText
@@ -902,33 +1416,32 @@ var PowrLogin = function PowrLogin(_ref) {
902
1416
  style: styles.errorMessage
903
1417
  }, error), success && /*#__PURE__*/_react["default"].createElement("div", {
904
1418
  style: styles.successMessage
905
- }, success), /*#__PURE__*/_react["default"].createElement("button", {
1419
+ }, success), !smsResetStep && loginGate !== 'help' && /*#__PURE__*/_react["default"].createElement("button", {
906
1420
  type: "submit",
907
- disabled: loading,
908
- style: _objectSpread(_objectSpread({}, styles.button), loading ? styles.buttonDisabled : {})
909
- }, loading ? /*#__PURE__*/_react["default"].createElement("div", {
1421
+ disabled: loading || otpLoading,
1422
+ style: _objectSpread(_objectSpread({}, styles.button), loading || otpLoading ? styles.buttonDisabled : {})
1423
+ }, loading || otpLoading ? /*#__PURE__*/_react["default"].createElement("div", {
910
1424
  style: _objectSpread(_objectSpread({}, styles.spinner), {}, {
911
1425
  animation: 'spin 1s linear infinite'
912
1426
  })
913
- }) : isLogin ? 'Sign In' : 'Sign Up')), /*#__PURE__*/_react["default"].createElement("div", {
914
- style: styles.navigationSection
915
- }, /*#__PURE__*/_react["default"].createElement("p", {
916
- style: styles.navigationText
917
- }, isLogin ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Don't have an account?", ' ', shouldShowToggle ? /*#__PURE__*/_react["default"].createElement("button", {
918
- type: "button",
919
- onClick: toggleMode,
920
- style: styles.navigationLink
921
- }, "Create one here") : /*#__PURE__*/_react["default"].createElement("a", {
922
- href: "/signup",
923
- style: styles.navigationLink
924
- }, "Create one here")) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, "Already have an account?", ' ', shouldShowToggle ? /*#__PURE__*/_react["default"].createElement("button", {
1427
+ }) : isLogin ? loginGate === 'password' ? 'Sign In' : 'Continue' : 'Sign Up'), isLogin && loginGate === 'password' && !smsResetStep && /*#__PURE__*/_react["default"].createElement("div", {
1428
+ style: {
1429
+ textAlign: 'center',
1430
+ marginTop: 12
1431
+ }
1432
+ }, resetChannel === 'otp' ? /*#__PURE__*/_react["default"].createElement("button", {
925
1433
  type: "button",
926
- onClick: toggleMode,
927
- style: styles.navigationLink
928
- }, "Sign in here") : /*#__PURE__*/_react["default"].createElement("a", {
929
- href: "/login",
930
- style: styles.navigationLink
931
- }, "Sign in here")))))), showOtpModal && /*#__PURE__*/_react["default"].createElement("div", {
1434
+ onClick: handleSmsForgotStart,
1435
+ disabled: otpLoading,
1436
+ style: styles.forgotPasswordLink
1437
+ }, otpLoading ? 'Sending a code…' : 'Forgot password? Get a code') : passwordResetHelpUrl ? /*#__PURE__*/_react["default"].createElement("a", {
1438
+ href: passwordResetHelpUrl,
1439
+ target: "_blank",
1440
+ rel: "noopener noreferrer",
1441
+ style: styles.forgotPasswordLink
1442
+ }, passwordResetHelpLabel) : /*#__PURE__*/_react["default"].createElement("span", {
1443
+ style: styles.forgotPasswordLink
1444
+ }, "Forgot password? WhatsApp us"))))), showOtpModal && /*#__PURE__*/_react["default"].createElement("div", {
932
1445
  style: styles.modalOverlay
933
1446
  }, /*#__PURE__*/_react["default"].createElement("div", {
934
1447
  style: styles.modalContent
@@ -1390,7 +1903,8 @@ var styles = {
1390
1903
  powrAccountText: {
1391
1904
  color: '#ff6b35',
1392
1905
  fontWeight: '600',
1393
- cursor: 'help'
1906
+ cursor: 'pointer',
1907
+ textDecoration: 'none'
1394
1908
  },
1395
1909
  tooltip: {
1396
1910
  position: 'absolute',