powr-sdk-web 4.4.0 → 4.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/auth/index.js +179 -94
- package/dist/utils/auth.js +1 -1
- package/package.json +1 -1
package/dist/auth/index.js
CHANGED
|
@@ -116,6 +116,14 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
116
116
|
_useState28 = _slicedToArray(_useState27, 2),
|
|
117
117
|
firebaseConfirm = _useState28[0],
|
|
118
118
|
setFirebaseConfirm = _useState28[1];
|
|
119
|
+
var _useState29 = (0, _react.useState)(false),
|
|
120
|
+
_useState30 = _slicedToArray(_useState29, 2),
|
|
121
|
+
showOtpModal = _useState30[0],
|
|
122
|
+
setShowOtpModal = _useState30[1];
|
|
123
|
+
var _useState31 = (0, _react.useState)(false),
|
|
124
|
+
_useState32 = _slicedToArray(_useState31, 2),
|
|
125
|
+
isPhoneVerified = _useState32[0],
|
|
126
|
+
setIsPhoneVerified = _useState32[1];
|
|
119
127
|
var shouldShowToggle = mode === 'toggle';
|
|
120
128
|
var handleInputChange = /*#__PURE__*/function () {
|
|
121
129
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
|
|
@@ -144,39 +152,98 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
144
152
|
}();
|
|
145
153
|
var sendFirebaseOtp = /*#__PURE__*/function () {
|
|
146
154
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
|
|
147
|
-
var appVerifier, confirmationResult, _t;
|
|
155
|
+
var appVerifier, confirmationResult, _t, _t2;
|
|
148
156
|
return _regenerator().w(function (_context2) {
|
|
149
157
|
while (1) switch (_context2.p = _context2.n) {
|
|
150
158
|
case 0:
|
|
151
159
|
setOtpLoading(true);
|
|
152
160
|
setError('');
|
|
153
161
|
_context2.p = 1;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
162
|
+
// Clear any existing reCAPTCHA
|
|
163
|
+
if (window.recaptchaVerifier) {
|
|
164
|
+
try {
|
|
165
|
+
window.recaptchaVerifier.clear();
|
|
166
|
+
} catch (e) {
|
|
167
|
+
console.log('Error clearing reCAPTCHA:', e);
|
|
168
|
+
}
|
|
169
|
+
window.recaptchaVerifier = null;
|
|
158
170
|
}
|
|
171
|
+
|
|
172
|
+
// Create new reCAPTCHA verifier with proper configuration
|
|
173
|
+
window.recaptchaVerifier = new _firebase.RecaptchaVerifier(_firebase.auth, 'recaptcha-container', {
|
|
174
|
+
size: 'invisible',
|
|
175
|
+
callback: function callback(response) {
|
|
176
|
+
console.log('reCAPTCHA verified successfully');
|
|
177
|
+
},
|
|
178
|
+
'expired-callback': function expiredCallback() {
|
|
179
|
+
console.log('reCAPTCHA expired');
|
|
180
|
+
setError('reCAPTCHA expired. Please try again.');
|
|
181
|
+
},
|
|
182
|
+
'error-callback': function errorCallback(error) {
|
|
183
|
+
console.error('reCAPTCHA error:', error);
|
|
184
|
+
setError('reCAPTCHA verification failed. Please try again.');
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
_context2.p = 2;
|
|
188
|
+
_context2.n = 3;
|
|
189
|
+
return window.recaptchaVerifier.render();
|
|
190
|
+
case 3:
|
|
191
|
+
console.log('reCAPTCHA rendered successfully');
|
|
192
|
+
_context2.n = 5;
|
|
193
|
+
break;
|
|
194
|
+
case 4:
|
|
195
|
+
_context2.p = 4;
|
|
196
|
+
_t = _context2.v;
|
|
197
|
+
console.error('reCAPTCHA render error:', _t);
|
|
198
|
+
case 5:
|
|
159
199
|
appVerifier = window.recaptchaVerifier;
|
|
160
|
-
_context2.n =
|
|
200
|
+
_context2.n = 6;
|
|
161
201
|
return (0, _firebase.signInWithPhoneNumber)(_firebase.auth, phone, appVerifier);
|
|
162
|
-
case
|
|
202
|
+
case 6:
|
|
163
203
|
confirmationResult = _context2.v;
|
|
164
204
|
setFirebaseConfirm(confirmationResult);
|
|
165
205
|
setFirebaseOtpSent(true);
|
|
206
|
+
setShowOtpModal(true);
|
|
166
207
|
setSuccess('OTP sent to your phone!');
|
|
167
|
-
_context2.n =
|
|
208
|
+
_context2.n = 8;
|
|
168
209
|
break;
|
|
169
|
-
case
|
|
170
|
-
_context2.p =
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
210
|
+
case 7:
|
|
211
|
+
_context2.p = 7;
|
|
212
|
+
_t2 = _context2.v;
|
|
213
|
+
console.error('Firebase OTP Error:', _t2);
|
|
214
|
+
|
|
215
|
+
// Handle specific Firebase errors
|
|
216
|
+
if (_t2.code === 'auth/invalid-app-credential') {
|
|
217
|
+
setError('Firebase configuration issue. Please check your Firebase setup.');
|
|
218
|
+
} else if (_t2.code === 'auth/captcha-check-failed') {
|
|
219
|
+
setError('Security verification failed. Please refresh and try again.');
|
|
220
|
+
} else if (_t2.code === 'auth/invalid-phone-number') {
|
|
221
|
+
setError('Invalid phone number format. Please enter a valid number.');
|
|
222
|
+
} else if (_t2.code === 'auth/too-many-requests') {
|
|
223
|
+
setError('Too many requests. Please try again after some time.');
|
|
224
|
+
} else if (_t2.code === 'auth/quota-exceeded') {
|
|
225
|
+
setError('Daily SMS quota exceeded. Please try again tomorrow.');
|
|
226
|
+
} else {
|
|
227
|
+
setError("Failed to send OTP: ".concat(_t2.message || 'Unknown error'));
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
// Clear reCAPTCHA on error
|
|
231
|
+
if (window.recaptchaVerifier) {
|
|
232
|
+
try {
|
|
233
|
+
window.recaptchaVerifier.clear();
|
|
234
|
+
} catch (e) {
|
|
235
|
+
console.log('Error clearing reCAPTCHA on error:', e);
|
|
236
|
+
}
|
|
237
|
+
window.recaptchaVerifier = null;
|
|
238
|
+
}
|
|
239
|
+
case 8:
|
|
240
|
+
_context2.p = 8;
|
|
174
241
|
setOtpLoading(false);
|
|
175
|
-
return _context2.f(
|
|
176
|
-
case
|
|
242
|
+
return _context2.f(8);
|
|
243
|
+
case 9:
|
|
177
244
|
return _context2.a(2);
|
|
178
245
|
}
|
|
179
|
-
}, _callee2, null, [[1,
|
|
246
|
+
}, _callee2, null, [[2, 4], [1, 7, 8, 9]]);
|
|
180
247
|
}));
|
|
181
248
|
return function sendFirebaseOtp(_x2) {
|
|
182
249
|
return _ref3.apply(this, arguments);
|
|
@@ -184,7 +251,7 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
184
251
|
}();
|
|
185
252
|
var verifyFirebaseOtp = /*#__PURE__*/function () {
|
|
186
253
|
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
187
|
-
var result,
|
|
254
|
+
var result, _t3;
|
|
188
255
|
return _regenerator().w(function (_context3) {
|
|
189
256
|
while (1) switch (_context3.p = _context3.n) {
|
|
190
257
|
case 0:
|
|
@@ -202,23 +269,24 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
202
269
|
return firebaseConfirm.confirm(otp);
|
|
203
270
|
case 3:
|
|
204
271
|
result = _context3.v;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
272
|
+
setIsPhoneVerified(true);
|
|
273
|
+
setShowOtpModal(false);
|
|
274
|
+
setSuccess('Phone number verified successfully! Now you can sign up.');
|
|
275
|
+
setOtp('');
|
|
276
|
+
_context3.n = 5;
|
|
209
277
|
break;
|
|
278
|
+
case 4:
|
|
279
|
+
_context3.p = 4;
|
|
280
|
+
_t3 = _context3.v;
|
|
281
|
+
setError('Invalid OTP. Please try again.');
|
|
210
282
|
case 5:
|
|
211
283
|
_context3.p = 5;
|
|
212
|
-
_t2 = _context3.v;
|
|
213
|
-
setError('Invalid OTP. Please try again.');
|
|
214
|
-
case 6:
|
|
215
|
-
_context3.p = 6;
|
|
216
284
|
setLoading(false);
|
|
217
|
-
return _context3.f(
|
|
218
|
-
case
|
|
285
|
+
return _context3.f(5);
|
|
286
|
+
case 6:
|
|
219
287
|
return _context3.a(2);
|
|
220
288
|
}
|
|
221
|
-
}, _callee3, null, [[1, 5, 6
|
|
289
|
+
}, _callee3, null, [[1, 4, 5, 6]]);
|
|
222
290
|
}));
|
|
223
291
|
return function verifyFirebaseOtp() {
|
|
224
292
|
return _ref4.apply(this, arguments);
|
|
@@ -248,7 +316,6 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
248
316
|
data,
|
|
249
317
|
ok,
|
|
250
318
|
_args4 = arguments,
|
|
251
|
-
_t3,
|
|
252
319
|
_t4;
|
|
253
320
|
return _regenerator().w(function (_context4) {
|
|
254
321
|
while (1) switch (_context4.p = _context4.n) {
|
|
@@ -290,8 +357,8 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
290
357
|
if (!isLogin && formData.password !== formData.confirmPassword) {
|
|
291
358
|
errors.confirmPassword = 'Passwords do not match';
|
|
292
359
|
}
|
|
293
|
-
if (!isLogin &&
|
|
294
|
-
errors.
|
|
360
|
+
if (!isLogin && !isPhoneVerified) {
|
|
361
|
+
errors.phoneOrEmail = 'Please verify your phone number first';
|
|
295
362
|
}
|
|
296
363
|
if (!(Object.keys(errors).length > 0)) {
|
|
297
364
|
_context4.n = 1;
|
|
@@ -301,35 +368,7 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
301
368
|
setLoading(false);
|
|
302
369
|
return _context4.a(2);
|
|
303
370
|
case 1:
|
|
304
|
-
|
|
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;
|
|
371
|
+
_context4.p = 1;
|
|
333
372
|
endpoint = isLogin ? "/auth/login" : "/auth/register";
|
|
334
373
|
payload = isLogin ? {
|
|
335
374
|
phoneOrEmail: formData.phoneOrEmail,
|
|
@@ -339,12 +378,12 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
339
378
|
phoneOrEmail: formData.phoneOrEmail,
|
|
340
379
|
password: formData.password
|
|
341
380
|
};
|
|
342
|
-
_context4.n =
|
|
381
|
+
_context4.n = 2;
|
|
343
382
|
return (0, _auth.apiCall)(apiUrl, endpoint, projectId, {
|
|
344
383
|
method: 'POST',
|
|
345
384
|
body: payload
|
|
346
385
|
});
|
|
347
|
-
case
|
|
386
|
+
case 2:
|
|
348
387
|
_yield$apiCall = _context4.v;
|
|
349
388
|
data = _yield$apiCall.data;
|
|
350
389
|
ok = _yield$apiCall.ok;
|
|
@@ -380,20 +419,20 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
380
419
|
setError("".concat(isLogin ? 'Login' : 'Registration', " failed. Please try again."));
|
|
381
420
|
}
|
|
382
421
|
}
|
|
383
|
-
_context4.n =
|
|
422
|
+
_context4.n = 4;
|
|
384
423
|
break;
|
|
385
|
-
case
|
|
386
|
-
_context4.p =
|
|
424
|
+
case 3:
|
|
425
|
+
_context4.p = 3;
|
|
387
426
|
_t4 = _context4.v;
|
|
388
427
|
setError('Network error. Please try again.');
|
|
389
|
-
case
|
|
390
|
-
_context4.p =
|
|
428
|
+
case 4:
|
|
429
|
+
_context4.p = 4;
|
|
391
430
|
setLoading(false);
|
|
392
|
-
return _context4.f(
|
|
393
|
-
case
|
|
431
|
+
return _context4.f(4);
|
|
432
|
+
case 5:
|
|
394
433
|
return _context4.a(2);
|
|
395
434
|
}
|
|
396
|
-
}, _callee4, null, [[
|
|
435
|
+
}, _callee4, null, [[1, 3, 4, 5]]);
|
|
397
436
|
}));
|
|
398
437
|
return function handleSubmit(_x3) {
|
|
399
438
|
return _ref5.apply(this, arguments);
|
|
@@ -409,6 +448,8 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
409
448
|
setOtp('');
|
|
410
449
|
setFirebaseOtpSent(false);
|
|
411
450
|
setFirebaseConfirm(null);
|
|
451
|
+
setShowOtpModal(false);
|
|
452
|
+
setIsPhoneVerified(false);
|
|
412
453
|
setFormData({
|
|
413
454
|
phoneOrEmail: '',
|
|
414
455
|
password: '',
|
|
@@ -537,35 +578,20 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
537
578
|
style: styles.fieldError
|
|
538
579
|
}, fieldErrors.phoneOrEmail), !isLogin && /*#__PURE__*/_react["default"].createElement("div", {
|
|
539
580
|
style: styles.helpText
|
|
540
|
-
}, "Registration requires phone verification for security"), !isLogin && isValidPhone(formData.phoneOrEmail) &&
|
|
581
|
+
}, "Registration requires phone verification for security"), !isLogin && isValidPhone(formData.phoneOrEmail) && !isPhoneVerified && /*#__PURE__*/_react["default"].createElement("button", {
|
|
541
582
|
type: "button",
|
|
542
583
|
onClick: function onClick() {
|
|
543
584
|
return sendFirebaseOtp(formatPhone(formData.phoneOrEmail));
|
|
544
585
|
},
|
|
545
|
-
style: styles.otpButton,
|
|
586
|
+
style: _objectSpread(_objectSpread({}, styles.otpButton), {}, {
|
|
587
|
+
marginTop: '8px'
|
|
588
|
+
}),
|
|
546
589
|
disabled: otpLoading
|
|
547
|
-
}, otpLoading ? 'Sending OTP...' : '
|
|
590
|
+
}, otpLoading ? 'Sending OTP...' : 'Verify Phone Number'), !isLogin && isPhoneVerified && /*#__PURE__*/_react["default"].createElement("div", {
|
|
591
|
+
style: styles.successText
|
|
592
|
+
}, "\u2705 Phone number verified successfully!"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
548
593
|
id: "recaptcha-container"
|
|
549
|
-
}))
|
|
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", {
|
|
594
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
569
595
|
style: styles.formGroup
|
|
570
596
|
}, /*#__PURE__*/_react["default"].createElement("label", {
|
|
571
597
|
htmlFor: "password",
|
|
@@ -679,7 +705,55 @@ var PowrLogin = function PowrLogin(_ref) {
|
|
|
679
705
|
}, "Sign in here") : /*#__PURE__*/_react["default"].createElement("a", {
|
|
680
706
|
href: "/login",
|
|
681
707
|
style: styles.navigationLink
|
|
682
|
-
}, "Sign in here")))))
|
|
708
|
+
}, "Sign in here"))))), showOtpModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
709
|
+
style: styles.modalOverlay
|
|
710
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
711
|
+
style: styles.modalContent
|
|
712
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
713
|
+
style: styles.modalHeader
|
|
714
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
715
|
+
style: styles.modalTitle
|
|
716
|
+
}, "Verify Phone Number"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
717
|
+
onClick: function onClick() {
|
|
718
|
+
setShowOtpModal(false);
|
|
719
|
+
setOtp('');
|
|
720
|
+
setError('');
|
|
721
|
+
},
|
|
722
|
+
style: styles.closeButton
|
|
723
|
+
}, "\xD7")), /*#__PURE__*/_react["default"].createElement("p", {
|
|
724
|
+
style: styles.modalText
|
|
725
|
+
}, "We've sent a verification code to ", /*#__PURE__*/_react["default"].createElement("strong", null, formData.phoneOrEmail)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
726
|
+
style: styles.formGroup
|
|
727
|
+
}, /*#__PURE__*/_react["default"].createElement("label", {
|
|
728
|
+
htmlFor: "modalOtp",
|
|
729
|
+
style: styles.label
|
|
730
|
+
}, "Enter OTP"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
731
|
+
type: "text",
|
|
732
|
+
id: "modalOtp",
|
|
733
|
+
value: otp,
|
|
734
|
+
onChange: function onChange(e) {
|
|
735
|
+
return setOtp(e.target.value);
|
|
736
|
+
},
|
|
737
|
+
style: styles.input,
|
|
738
|
+
placeholder: "Enter 6-digit OTP",
|
|
739
|
+
maxLength: "6",
|
|
740
|
+
autoFocus: true
|
|
741
|
+
})), error && /*#__PURE__*/_react["default"].createElement("div", {
|
|
742
|
+
style: styles.errorMessage
|
|
743
|
+
}, error), /*#__PURE__*/_react["default"].createElement("div", {
|
|
744
|
+
style: styles.modalButtons
|
|
745
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
746
|
+
onClick: function onClick() {
|
|
747
|
+
setShowOtpModal(false);
|
|
748
|
+
setOtp('');
|
|
749
|
+
setError('');
|
|
750
|
+
},
|
|
751
|
+
style: styles.cancelButton
|
|
752
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
753
|
+
onClick: verifyFirebaseOtp,
|
|
754
|
+
disabled: loading || !otp || otp.length < 6,
|
|
755
|
+
style: _objectSpread(_objectSpread({}, styles.button), loading || !otp || otp.length < 6 ? styles.buttonDisabled : {})
|
|
756
|
+
}, loading ? 'Verifying...' : 'Verify')))));
|
|
683
757
|
};
|
|
684
758
|
var styles = {
|
|
685
759
|
container: {
|
|
@@ -820,6 +894,17 @@ var styles = {
|
|
|
820
894
|
fontSize: '14px',
|
|
821
895
|
fontWeight: '500'
|
|
822
896
|
},
|
|
897
|
+
successText: {
|
|
898
|
+
background: '#f0fdf4',
|
|
899
|
+
color: '#16a34a',
|
|
900
|
+
padding: '8px 12px',
|
|
901
|
+
borderRadius: '6px',
|
|
902
|
+
border: '1px solid #bbf7d0',
|
|
903
|
+
fontSize: '12px',
|
|
904
|
+
fontWeight: '500',
|
|
905
|
+
marginTop: '8px',
|
|
906
|
+
textAlign: 'center'
|
|
907
|
+
},
|
|
823
908
|
toggleSection: {
|
|
824
909
|
marginTop: '24px',
|
|
825
910
|
textAlign: 'center',
|
package/dist/utils/auth.js
CHANGED
|
@@ -29,7 +29,7 @@ var getAuthToken = exports.getAuthToken = function getAuthToken() {
|
|
|
29
29
|
return null;
|
|
30
30
|
};
|
|
31
31
|
|
|
32
|
-
// Create headers with authentication
|
|
32
|
+
// Create headers with authentication
|
|
33
33
|
var createAuthHeaders = exports.createAuthHeaders = function createAuthHeaders() {
|
|
34
34
|
var additionalHeaders = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
35
35
|
var token = getAuthToken();
|