powr-sdk-web 4.3.0 → 4.4.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.
Files changed (2) hide show
  1. package/dist/auth/index.js +308 -120
  2. package/package.json +1 -1
@@ -6,7 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports["default"] = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _auth = require("../utils/auth");
9
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
9
+ var _firebase = require("../utils/firebase");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t6 in e) "default" !== _t6 && {}.hasOwnProperty.call(e, _t6) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t6)) && (i.get || i.set) ? o(f, _t6, i) : f[_t6] = e[_t6]); return f; })(e, t); }
10
11
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
11
12
  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 }; })(); }
12
13
  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); }
@@ -23,8 +24,6 @@ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r)
23
24
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
24
25
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
25
26
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
26
- // import { auth, RecaptchaVerifier, signInWithPhoneNumber } from '../utils/firebase';
27
-
28
27
  var PowrLogin = function PowrLogin(_ref) {
29
28
  var apiUrl = _ref.apiUrl,
30
29
  onLogin = _ref.onLogin,
@@ -50,6 +49,7 @@ var PowrLogin = function PowrLogin(_ref) {
50
49
  setIsLogin = _useState2[1];
51
50
  var _useState3 = (0, _react.useState)({
52
51
  phoneOrEmail: '',
52
+ // For login: phone or email, For registration: phone only
53
53
  password: '',
54
54
  confirmPassword: '',
55
55
  fullName: ''
@@ -85,20 +85,37 @@ var PowrLogin = function PowrLogin(_ref) {
85
85
  _useState16 = _slicedToArray(_useState15, 2),
86
86
  showTooltip = _useState16[0],
87
87
  setShowTooltip = _useState16[1];
88
- // const formatPhone = (phone) => {
89
- // let clean = phone.replace(/\D/g, '');
90
- // if (!clean.startsWith('91')) {
91
- // clean = '91' + clean;
92
- // }
93
- // return '+' + clean;
94
- // };
95
- // const [showOtpOption, setShowOtpOption] = useState(false);
96
- // const [otpSent, setOtpSent] = useState(false);
97
- // const [otpLoading, setOtpLoading] = useState(false);
98
- // const [otp, setOtp] = useState('');
99
- // const [firebaseOtpSent, setFirebaseOtpSent] = useState(false);
100
- // const [firebaseConfirm, setFirebaseConfirm] = useState(null);
101
-
88
+ var formatPhone = function formatPhone(phone) {
89
+ var clean = phone.replace(/\D/g, '');
90
+ if (!clean.startsWith('91')) {
91
+ clean = '91' + clean;
92
+ }
93
+ return '+' + clean;
94
+ };
95
+ var _useState17 = (0, _react.useState)(false),
96
+ _useState18 = _slicedToArray(_useState17, 2),
97
+ showOtpOption = _useState18[0],
98
+ setShowOtpOption = _useState18[1];
99
+ var _useState19 = (0, _react.useState)(false),
100
+ _useState20 = _slicedToArray(_useState19, 2),
101
+ otpSent = _useState20[0],
102
+ setOtpSent = _useState20[1];
103
+ var _useState21 = (0, _react.useState)(false),
104
+ _useState22 = _slicedToArray(_useState21, 2),
105
+ otpLoading = _useState22[0],
106
+ setOtpLoading = _useState22[1];
107
+ var _useState23 = (0, _react.useState)(''),
108
+ _useState24 = _slicedToArray(_useState23, 2),
109
+ otp = _useState24[0],
110
+ setOtp = _useState24[1];
111
+ var _useState25 = (0, _react.useState)(false),
112
+ _useState26 = _slicedToArray(_useState25, 2),
113
+ firebaseOtpSent = _useState26[0],
114
+ setFirebaseOtpSent = _useState26[1];
115
+ var _useState27 = (0, _react.useState)(null),
116
+ _useState28 = _slicedToArray(_useState27, 2),
117
+ firebaseConfirm = _useState28[0],
118
+ setFirebaseConfirm = _useState28[1];
102
119
  var shouldShowToggle = mode === 'toggle';
103
120
  var handleInputChange = /*#__PURE__*/function () {
104
121
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
@@ -125,41 +142,88 @@ var PowrLogin = function PowrLogin(_ref) {
125
142
  return _ref2.apply(this, arguments);
126
143
  };
127
144
  }();
128
-
129
- // const sendFirebaseOtp = async (phone) => {
130
- // setOtpLoading(true);
131
- // setError('');
132
- // try {
133
- // if (!window.recaptchaVerifier) {
134
- // window.recaptchaVerifier = new RecaptchaVerifier(auth, 'recaptcha-container', { size: 'invisible' });
135
- // }
136
- // const appVerifier = window.recaptchaVerifier;
137
- // const confirmationResult = await signInWithPhoneNumber(auth, phone, appVerifier);
138
- // setFirebaseConfirm(confirmationResult);
139
- // setFirebaseOtpSent(true);
140
- // setSuccess('OTP sent to your phone!');
141
- // } catch (err) {
142
- // } finally {
143
- // setOtpLoading(false);
144
- // }
145
- // };
146
-
147
- // const verifyFirebaseOtp = async () => {
148
- // setLoading(true);
149
- // setError('');
150
- // try {
151
- // if (!firebaseConfirm) {
152
- // setError('OTP not sent yet.');
153
- // return;
154
- // }
155
- // const result = await firebaseConfirm.confirm(otp);
156
- // await handleSubmit(null, true);
157
- // } catch (err) {
158
- // setError('Invalid OTP. Please try again.');
159
- // } finally {
160
- // setLoading(false);
161
- // }
162
- // };
145
+ var sendFirebaseOtp = /*#__PURE__*/function () {
146
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
147
+ var appVerifier, confirmationResult, _t;
148
+ return _regenerator().w(function (_context2) {
149
+ while (1) switch (_context2.p = _context2.n) {
150
+ case 0:
151
+ setOtpLoading(true);
152
+ setError('');
153
+ _context2.p = 1;
154
+ if (!window.recaptchaVerifier) {
155
+ window.recaptchaVerifier = new _firebase.RecaptchaVerifier(_firebase.auth, 'recaptcha-container', {
156
+ size: 'invisible'
157
+ });
158
+ }
159
+ appVerifier = window.recaptchaVerifier;
160
+ _context2.n = 2;
161
+ return (0, _firebase.signInWithPhoneNumber)(_firebase.auth, phone, appVerifier);
162
+ case 2:
163
+ confirmationResult = _context2.v;
164
+ setFirebaseConfirm(confirmationResult);
165
+ setFirebaseOtpSent(true);
166
+ setSuccess('OTP sent to your phone!');
167
+ _context2.n = 4;
168
+ break;
169
+ case 3:
170
+ _context2.p = 3;
171
+ _t = _context2.v;
172
+ case 4:
173
+ _context2.p = 4;
174
+ setOtpLoading(false);
175
+ return _context2.f(4);
176
+ case 5:
177
+ return _context2.a(2);
178
+ }
179
+ }, _callee2, null, [[1, 3, 4, 5]]);
180
+ }));
181
+ return function sendFirebaseOtp(_x2) {
182
+ return _ref3.apply(this, arguments);
183
+ };
184
+ }();
185
+ var verifyFirebaseOtp = /*#__PURE__*/function () {
186
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
187
+ var result, _t2;
188
+ return _regenerator().w(function (_context3) {
189
+ while (1) switch (_context3.p = _context3.n) {
190
+ case 0:
191
+ setLoading(true);
192
+ setError('');
193
+ _context3.p = 1;
194
+ if (firebaseConfirm) {
195
+ _context3.n = 2;
196
+ break;
197
+ }
198
+ setError('OTP not sent yet.');
199
+ return _context3.a(2);
200
+ case 2:
201
+ _context3.n = 3;
202
+ return firebaseConfirm.confirm(otp);
203
+ case 3:
204
+ result = _context3.v;
205
+ _context3.n = 4;
206
+ return handleSubmit(null, true);
207
+ case 4:
208
+ _context3.n = 6;
209
+ break;
210
+ case 5:
211
+ _context3.p = 5;
212
+ _t2 = _context3.v;
213
+ setError('Invalid OTP. Please try again.');
214
+ case 6:
215
+ _context3.p = 6;
216
+ setLoading(false);
217
+ return _context3.f(6);
218
+ case 7:
219
+ return _context3.a(2);
220
+ }
221
+ }, _callee3, null, [[1, 5, 6, 7]]);
222
+ }));
223
+ return function verifyFirebaseOtp() {
224
+ return _ref4.apply(this, arguments);
225
+ };
226
+ }();
163
227
 
164
228
  // Validation functions
165
229
  var isValidEmail = function isValidEmail(email) {
@@ -173,7 +237,7 @@ var PowrLogin = function PowrLogin(_ref) {
173
237
  return cleanPhone.length >= 7 && cleanPhone.length <= 15;
174
238
  };
175
239
  var handleSubmit = /*#__PURE__*/function () {
176
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {
240
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
177
241
  var skipPhoneValidation,
178
242
  errors,
179
243
  value,
@@ -183,12 +247,13 @@ var PowrLogin = function PowrLogin(_ref) {
183
247
  _yield$apiCall,
184
248
  data,
185
249
  ok,
186
- _args2 = arguments,
187
- _t;
188
- return _regenerator().w(function (_context2) {
189
- while (1) switch (_context2.p = _context2.n) {
250
+ _args4 = arguments,
251
+ _t3,
252
+ _t4;
253
+ return _regenerator().w(function (_context4) {
254
+ while (1) switch (_context4.p = _context4.n) {
190
255
  case 0:
191
- skipPhoneValidation = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : false;
256
+ skipPhoneValidation = _args4.length > 1 && _args4[1] !== undefined ? _args4[1] : false;
192
257
  if (e) e.preventDefault();
193
258
  setLoading(true);
194
259
  setError('');
@@ -198,12 +263,21 @@ var PowrLogin = function PowrLogin(_ref) {
198
263
  value = formData.phoneOrEmail.trim();
199
264
  isEmail = value.includes('@');
200
265
  if (!formData.phoneOrEmail.trim()) {
201
- errors.phoneOrEmail = 'Phone or email is required';
266
+ errors.phoneOrEmail = isLogin ? 'Phone or email is required' : 'Phone number is required';
202
267
  }
268
+
269
+ // Registration: Only allow phone numbers
203
270
  if (!isLogin && !isValidPhone(value)) {
204
- errors.phoneOrEmail = 'Please enter a valid phone number';
205
- } else if (isLogin && isEmail && !isValidEmail(value)) {
206
- errors.phoneOrEmail = 'Please enter a valid email address';
271
+ errors.phoneOrEmail = 'Please enter a valid phone number for registration';
272
+ }
273
+
274
+ // Login: Allow both phone and email
275
+ if (isLogin) {
276
+ if (isEmail && !isValidEmail(value)) {
277
+ errors.phoneOrEmail = 'Please enter a valid email address';
278
+ } else if (!isEmail && !isValidPhone(value)) {
279
+ errors.phoneOrEmail = 'Please enter a valid phone number';
280
+ }
207
281
  }
208
282
  if (!formData.password.trim()) {
209
283
  errors.password = 'Password is required';
@@ -216,18 +290,46 @@ var PowrLogin = function PowrLogin(_ref) {
216
290
  if (!isLogin && formData.password !== formData.confirmPassword) {
217
291
  errors.confirmPassword = 'Passwords do not match';
218
292
  }
219
- // if (!isLogin && (!otp || !firebaseConfirm)) {
220
- // errors.otp = 'Please verify OTP before signing up';
221
- // }
293
+ if (!isLogin && (!otp || !firebaseConfirm)) {
294
+ errors.otp = 'Please verify OTP before signing up';
295
+ }
222
296
  if (!(Object.keys(errors).length > 0)) {
223
- _context2.n = 1;
297
+ _context4.n = 1;
224
298
  break;
225
299
  }
226
300
  setFieldErrors(errors);
227
301
  setLoading(false);
228
- return _context2.a(2);
302
+ return _context4.a(2);
229
303
  case 1:
230
- _context2.p = 1;
304
+ if (isLogin) {
305
+ _context4.n = 7;
306
+ break;
307
+ }
308
+ _context4.p = 2;
309
+ if (!(firebaseConfirm && otp)) {
310
+ _context4.n = 4;
311
+ break;
312
+ }
313
+ _context4.n = 3;
314
+ return firebaseConfirm.confirm(otp);
315
+ case 3:
316
+ _context4.n = 5;
317
+ break;
318
+ case 4:
319
+ setError('Please verify OTP before signing up');
320
+ setLoading(false);
321
+ return _context4.a(2);
322
+ case 5:
323
+ _context4.n = 7;
324
+ break;
325
+ case 6:
326
+ _context4.p = 6;
327
+ _t3 = _context4.v;
328
+ setError('Invalid OTP. Please try again.');
329
+ setLoading(false);
330
+ return _context4.a(2);
331
+ case 7:
332
+ _context4.p = 7;
231
333
  endpoint = isLogin ? "/auth/login" : "/auth/register";
232
334
  payload = isLogin ? {
233
335
  phoneOrEmail: formData.phoneOrEmail,
@@ -237,13 +339,13 @@ var PowrLogin = function PowrLogin(_ref) {
237
339
  phoneOrEmail: formData.phoneOrEmail,
238
340
  password: formData.password
239
341
  };
240
- _context2.n = 2;
342
+ _context4.n = 8;
241
343
  return (0, _auth.apiCall)(apiUrl, endpoint, projectId, {
242
344
  method: 'POST',
243
345
  body: payload
244
346
  });
245
- case 2:
246
- _yield$apiCall = _context2.v;
347
+ case 8:
348
+ _yield$apiCall = _context4.v;
247
349
  data = _yield$apiCall.data;
248
350
  ok = _yield$apiCall.ok;
249
351
  if (ok) {
@@ -259,6 +361,10 @@ var PowrLogin = function PowrLogin(_ref) {
259
361
  confirmPassword: '',
260
362
  fullName: ''
261
363
  });
364
+ // Reset OTP related states
365
+ setOtp('');
366
+ setFirebaseOtpSent(false);
367
+ setFirebaseConfirm(null);
262
368
  } else {
263
369
  if (data.message) {
264
370
  setError(data.message);
@@ -274,23 +380,23 @@ var PowrLogin = function PowrLogin(_ref) {
274
380
  setError("".concat(isLogin ? 'Login' : 'Registration', " failed. Please try again."));
275
381
  }
276
382
  }
277
- _context2.n = 4;
383
+ _context4.n = 10;
278
384
  break;
279
- case 3:
280
- _context2.p = 3;
281
- _t = _context2.v;
385
+ case 9:
386
+ _context4.p = 9;
387
+ _t4 = _context4.v;
282
388
  setError('Network error. Please try again.');
283
- case 4:
284
- _context2.p = 4;
389
+ case 10:
390
+ _context4.p = 10;
285
391
  setLoading(false);
286
- return _context2.f(4);
287
- case 5:
288
- return _context2.a(2);
392
+ return _context4.f(10);
393
+ case 11:
394
+ return _context4.a(2);
289
395
  }
290
- }, _callee2, null, [[1, 3, 4, 5]]);
396
+ }, _callee4, null, [[7, 9, 10, 11], [2, 6]]);
291
397
  }));
292
- return function handleSubmit(_x2) {
293
- return _ref3.apply(this, arguments);
398
+ return function handleSubmit(_x3) {
399
+ return _ref5.apply(this, arguments);
294
400
  };
295
401
  }();
296
402
  var toggleMode = function toggleMode() {
@@ -298,8 +404,11 @@ var PowrLogin = function PowrLogin(_ref) {
298
404
  setError('');
299
405
  setSuccess('');
300
406
  setFieldErrors({});
301
- // setShowOtpOption(false);
302
- // setOtpSent(false);
407
+ setShowOtpOption(false);
408
+ setOtpSent(false);
409
+ setOtp('');
410
+ setFirebaseOtpSent(false);
411
+ setFirebaseConfirm(null);
303
412
  setFormData({
304
413
  phoneOrEmail: '',
305
414
  password: '',
@@ -307,37 +416,62 @@ var PowrLogin = function PowrLogin(_ref) {
307
416
  fullName: ''
308
417
  });
309
418
  };
310
-
311
- // const handleGetOtp = async () => {
312
- // if (!formData.phoneOrEmail.trim()) {
313
- // setFieldErrors({ phoneOrEmail: 'Phone or email is required for OTP' });
314
- // return;
315
- // }
316
-
317
- // setOtpLoading(true);
318
- // setError('');
319
- // setFieldErrors({});
320
-
321
- // try {
322
- // const { data, ok } = await apiCall(apiUrl, `/auth/send-otp`, projectId, {
323
- // method: 'POST',
324
- // body: { phoneOrEmail: formData.phoneOrEmail }
325
- // });
326
-
327
- // if (ok) {
328
- // setOtpSent(true);
329
- // setSuccess('OTP sent successfully! Check your phone/email.');
330
- // setShowOtpOption(false);
331
- // } else {
332
- // setError(data.message || 'Failed to send OTP. Please try again.');
333
- // }
334
- // } catch (err) {
335
- // setError('Network error. Please try again.');
336
- // } finally {
337
- // setOtpLoading(false);
338
- // }
339
- // };
340
-
419
+ var handleGetOtp = /*#__PURE__*/function () {
420
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
421
+ var _yield$apiCall2, data, ok, _t5;
422
+ return _regenerator().w(function (_context5) {
423
+ while (1) switch (_context5.p = _context5.n) {
424
+ case 0:
425
+ if (formData.phoneOrEmail.trim()) {
426
+ _context5.n = 1;
427
+ break;
428
+ }
429
+ setFieldErrors({
430
+ phoneOrEmail: 'Phone or email is required for OTP'
431
+ });
432
+ return _context5.a(2);
433
+ case 1:
434
+ setOtpLoading(true);
435
+ setError('');
436
+ setFieldErrors({});
437
+ _context5.p = 2;
438
+ _context5.n = 3;
439
+ return (0, _auth.apiCall)(apiUrl, "/auth/send-otp", projectId, {
440
+ method: 'POST',
441
+ body: {
442
+ phoneOrEmail: formData.phoneOrEmail
443
+ }
444
+ });
445
+ case 3:
446
+ _yield$apiCall2 = _context5.v;
447
+ data = _yield$apiCall2.data;
448
+ ok = _yield$apiCall2.ok;
449
+ if (ok) {
450
+ setOtpSent(true);
451
+ setSuccess('OTP sent successfully! Check your phone/email.');
452
+ setShowOtpOption(false);
453
+ } else {
454
+ setError(data.message || 'Failed to send OTP. Please try again.');
455
+ }
456
+ _context5.n = 5;
457
+ break;
458
+ case 4:
459
+ _context5.p = 4;
460
+ _t5 = _context5.v;
461
+ setError('Network error. Please try again.');
462
+ case 5:
463
+ _context5.p = 5;
464
+ setOtpLoading(false);
465
+ return _context5.f(5);
466
+ case 6:
467
+ return _context5.a(2);
468
+ }
469
+ }, _callee5, null, [[2, 4, 5, 6]]);
470
+ }));
471
+ return function handleGetOtp() {
472
+ return _ref6.apply(this, arguments);
473
+ };
474
+ }();
341
475
  return /*#__PURE__*/_react["default"].createElement("div", {
342
476
  style: styles.container
343
477
  }, /*#__PURE__*/_react["default"].createElement("div", {
@@ -390,18 +524,48 @@ var PowrLogin = function PowrLogin(_ref) {
390
524
  }, /*#__PURE__*/_react["default"].createElement("label", {
391
525
  htmlFor: "phoneOrEmail",
392
526
  style: styles.label
393
- }, "Phone or Email"), /*#__PURE__*/_react["default"].createElement("input", {
527
+ }, isLogin ? 'Phone or Email' : 'Phone Number'), /*#__PURE__*/_react["default"].createElement("input", {
394
528
  type: "text",
395
529
  id: "phoneOrEmail",
396
530
  name: "phoneOrEmail",
397
531
  value: formData.phoneOrEmail,
398
532
  onChange: handleInputChange,
399
533
  style: _objectSpread(_objectSpread({}, styles.input), fieldErrors.phoneOrEmail ? styles.inputError : {}),
400
- placeholder: "Enter your phone or email",
534
+ placeholder: isLogin ? "Enter your phone or email" : "Enter your phone number",
401
535
  required: true
402
536
  }), fieldErrors.phoneOrEmail && /*#__PURE__*/_react["default"].createElement("div", {
403
537
  style: styles.fieldError
404
- }, fieldErrors.phoneOrEmail)), /*#__PURE__*/_react["default"].createElement("div", {
538
+ }, fieldErrors.phoneOrEmail), !isLogin && /*#__PURE__*/_react["default"].createElement("div", {
539
+ style: styles.helpText
540
+ }, "Registration requires phone verification for security"), !isLogin && isValidPhone(formData.phoneOrEmail) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, !firebaseOtpSent ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("button", {
541
+ type: "button",
542
+ onClick: function onClick() {
543
+ return sendFirebaseOtp(formatPhone(formData.phoneOrEmail));
544
+ },
545
+ style: styles.otpButton,
546
+ disabled: otpLoading
547
+ }, otpLoading ? 'Sending OTP...' : 'Send OTP to Phone'), /*#__PURE__*/_react["default"].createElement("div", {
548
+ id: "recaptcha-container"
549
+ })) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
550
+ htmlFor: "otp",
551
+ style: styles.label
552
+ }, "Enter OTP"), /*#__PURE__*/_react["default"].createElement("input", {
553
+ type: "text",
554
+ id: "otp",
555
+ name: "otp",
556
+ value: otp,
557
+ onChange: function onChange(e) {
558
+ return setOtp(e.target.value);
559
+ },
560
+ style: styles.input,
561
+ placeholder: "Enter OTP received",
562
+ required: true
563
+ }), /*#__PURE__*/_react["default"].createElement("button", {
564
+ type: "button",
565
+ onClick: verifyFirebaseOtp,
566
+ style: styles.otpButton,
567
+ disabled: loading || !otp
568
+ }, loading ? 'Verifying...' : 'Verify OTP & Sign Up')))), /*#__PURE__*/_react["default"].createElement("div", {
405
569
  style: styles.formGroup
406
570
  }, /*#__PURE__*/_react["default"].createElement("label", {
407
571
  htmlFor: "password",
@@ -468,7 +632,24 @@ var PowrLogin = function PowrLogin(_ref) {
468
632
  style: styles.checkbox
469
633
  }), /*#__PURE__*/_react["default"].createElement("span", {
470
634
  style: styles.checkboxText
471
- }, "Remember me"))), error && /*#__PURE__*/_react["default"].createElement("div", {
635
+ }, "Remember me")), /*#__PURE__*/_react["default"].createElement("button", {
636
+ type: "button",
637
+ onClick: function onClick() {
638
+ return setShowOtpOption(!showOtpOption);
639
+ },
640
+ style: styles.forgotPasswordLink
641
+ }, "Forgot password?")), isLogin && showOtpOption && /*#__PURE__*/_react["default"].createElement("div", {
642
+ style: styles.otpSection
643
+ }, /*#__PURE__*/_react["default"].createElement("p", {
644
+ style: styles.otpText
645
+ }, "Having trouble signing in? Get a one-time password sent to your phone or email."), /*#__PURE__*/_react["default"].createElement("button", {
646
+ type: "button",
647
+ onClick: handleGetOtp,
648
+ disabled: otpLoading,
649
+ style: _objectSpread(_objectSpread({}, styles.otpButton), otpLoading ? styles.buttonDisabled : {})
650
+ }, otpLoading ? /*#__PURE__*/_react["default"].createElement("div", {
651
+ style: styles.spinner
652
+ }) : 'Get OTP')), error && /*#__PURE__*/_react["default"].createElement("div", {
472
653
  style: styles.errorMessage
473
654
  }, error), success && /*#__PURE__*/_react["default"].createElement("div", {
474
655
  style: styles.successMessage
@@ -753,6 +934,13 @@ var styles = {
753
934
  marginTop: '4px',
754
935
  fontWeight: '400'
755
936
  },
937
+ helpText: {
938
+ color: '#6b7280',
939
+ fontSize: '12px',
940
+ marginTop: '4px',
941
+ textAlign: 'left',
942
+ fontStyle: 'italic'
943
+ },
756
944
  inputError: {
757
945
  borderColor: '#dc2626 !important',
758
946
  boxShadow: '0 0 0 3px rgba(220, 38, 38, 0.1) !important'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "build": "babel src -d dist --copy-files",