powr-sdk-web 5.7.1 → 5.8.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.
- package/dist/auth/index.js +147 -35
- package/dist/components/PhoneInput.js +159 -0
- package/dist/index.js +106 -0
- package/dist/onboarding/AddPhonePanel.js +213 -119
- package/dist/onboarding/PowrOnboardingProvider.js +36 -2
- package/dist/onboarding/SessionExpiredPanel.js +71 -0
- package/dist/onboarding/steps/addPhoneStep.js +15 -4
- package/dist/onboarding/steps/profileNameStep.js +3 -2
- package/dist/onboarding/utils.js +203 -25
- package/dist/powrVerify/index.js +73 -72
- package/dist/utils/jwt.js +33 -0
- package/dist/utils/phone.js +151 -0
- package/dist/utils/sessionMessages.js +26 -0
- package/package.json +44 -43
|
@@ -8,6 +8,12 @@ exports["default"] = void 0;
|
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _firebase = require("../utils/firebase");
|
|
10
10
|
var _utils = require("./utils");
|
|
11
|
+
var _phone = require("../utils/phone");
|
|
12
|
+
var _jwt = require("../utils/jwt");
|
|
13
|
+
var _sessionMessages = require("../utils/sessionMessages");
|
|
14
|
+
var _PhoneInput = _interopRequireDefault(require("../components/PhoneInput"));
|
|
15
|
+
var _SessionExpiredPanel = _interopRequireDefault(require("./SessionExpiredPanel"));
|
|
16
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
11
17
|
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); }
|
|
12
18
|
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 }; })(); }
|
|
13
19
|
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); }
|
|
@@ -32,45 +38,81 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
32
38
|
appName = _ref.appName,
|
|
33
39
|
onComplete = _ref.onComplete,
|
|
34
40
|
onBack = _ref.onBack,
|
|
41
|
+
onSessionExpired = _ref.onSessionExpired,
|
|
42
|
+
refreshToken = _ref.refreshToken,
|
|
35
43
|
_ref$requirePhoneVeri = _ref.requirePhoneVerification,
|
|
36
|
-
requirePhoneVerification = _ref$requirePhoneVeri === void 0 ? false : _ref$requirePhoneVeri
|
|
37
|
-
|
|
44
|
+
requirePhoneVerification = _ref$requirePhoneVeri === void 0 ? false : _ref$requirePhoneVeri,
|
|
45
|
+
defaultCountry = _ref.defaultCountry,
|
|
46
|
+
defaultCountryCode = _ref.defaultCountryCode,
|
|
47
|
+
_ref$international = _ref.international,
|
|
48
|
+
international = _ref$international === void 0 ? false : _ref$international,
|
|
49
|
+
_ref$allowedCountries = _ref.allowedCountries,
|
|
50
|
+
allowedCountries = _ref$allowedCountries === void 0 ? null : _ref$allowedCountries;
|
|
51
|
+
var resolvedCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
|
|
52
|
+
var _useState = (0, _react.useState)(resolvedCountry),
|
|
38
53
|
_useState2 = _slicedToArray(_useState, 2),
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
phoneCountry = _useState2[0],
|
|
55
|
+
setPhoneCountry = _useState2[1];
|
|
41
56
|
var _useState3 = (0, _react.useState)(''),
|
|
42
57
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
43
|
-
|
|
44
|
-
|
|
58
|
+
localNumber = _useState4[0],
|
|
59
|
+
setLocalNumber = _useState4[1];
|
|
45
60
|
var _useState5 = (0, _react.useState)(false),
|
|
46
61
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
var _useState7 = (0, _react.useState)(
|
|
62
|
+
phoneValid = _useState6[0],
|
|
63
|
+
setPhoneValid = _useState6[1];
|
|
64
|
+
var _useState7 = (0, _react.useState)(''),
|
|
50
65
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
var _useState9 = (0, _react.useState)(
|
|
66
|
+
e164 = _useState8[0],
|
|
67
|
+
setE164 = _useState8[1];
|
|
68
|
+
var _useState9 = (0, _react.useState)(''),
|
|
54
69
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
var _useState1 = (0, _react.useState)(
|
|
70
|
+
otp = _useState0[0],
|
|
71
|
+
setOtp = _useState0[1];
|
|
72
|
+
var _useState1 = (0, _react.useState)(false),
|
|
58
73
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
var _useState11 = (0, _react.useState)(
|
|
74
|
+
loading = _useState10[0],
|
|
75
|
+
setLoading = _useState10[1];
|
|
76
|
+
var _useState11 = (0, _react.useState)(false),
|
|
62
77
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
var _useState13 = (0, _react.useState)(
|
|
78
|
+
otpSent = _useState12[0],
|
|
79
|
+
setOtpSent = _useState12[1];
|
|
80
|
+
var _useState13 = (0, _react.useState)(null),
|
|
66
81
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
var
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
82
|
+
confirmationResult = _useState14[0],
|
|
83
|
+
setConfirmationResult = _useState14[1];
|
|
84
|
+
var _useState15 = (0, _react.useState)(''),
|
|
85
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
86
|
+
error = _useState16[0],
|
|
87
|
+
setError = _useState16[1];
|
|
88
|
+
var _useState17 = (0, _react.useState)(''),
|
|
89
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
90
|
+
success = _useState18[0],
|
|
91
|
+
setSuccess = _useState18[1];
|
|
92
|
+
var _useState19 = (0, _react.useState)(0),
|
|
93
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
94
|
+
resendTimer = _useState20[0],
|
|
95
|
+
setResendTimer = _useState20[1];
|
|
96
|
+
var _useState21 = (0, _react.useState)(false),
|
|
97
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
98
|
+
sessionExpired = _useState22[0],
|
|
99
|
+
setSessionExpired = _useState22[1];
|
|
100
|
+
_react["default"].useEffect(function () {
|
|
101
|
+
if (pendingAuth !== null && pendingAuth !== void 0 && pendingAuth.token && (0, _jwt.isJwtExpired)(pendingAuth.token)) {
|
|
102
|
+
setSessionExpired(true);
|
|
103
|
+
}
|
|
104
|
+
}, [pendingAuth === null || pendingAuth === void 0 ? void 0 : pendingAuth.token]);
|
|
105
|
+
_react["default"].useEffect(function () {
|
|
106
|
+
if (resendTimer <= 0) return undefined;
|
|
107
|
+
var id = setInterval(function () {
|
|
108
|
+
setResendTimer(function (t) {
|
|
109
|
+
return t <= 1 ? 0 : t - 1;
|
|
110
|
+
});
|
|
111
|
+
}, 1000);
|
|
112
|
+
return function () {
|
|
113
|
+
return clearInterval(id);
|
|
114
|
+
};
|
|
115
|
+
}, [resendTimer]);
|
|
74
116
|
var clearRecaptcha = function clearRecaptcha() {
|
|
75
117
|
if (window.recaptchaVerifierAddPhone) {
|
|
76
118
|
try {
|
|
@@ -81,75 +123,111 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
81
123
|
window.recaptchaVerifierAddPhone = null;
|
|
82
124
|
}
|
|
83
125
|
};
|
|
84
|
-
|
|
126
|
+
_react["default"].useEffect(function () {
|
|
85
127
|
return function () {
|
|
86
128
|
return clearRecaptcha();
|
|
87
129
|
};
|
|
88
130
|
}, []);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
131
|
+
var handlePhoneChange = function handlePhoneChange(_ref2) {
|
|
132
|
+
var country = _ref2.country,
|
|
133
|
+
local = _ref2.localNumber,
|
|
134
|
+
formatted = _ref2.e164,
|
|
135
|
+
isValid = _ref2.isValid;
|
|
136
|
+
setPhoneCountry(country);
|
|
137
|
+
setLocalNumber(local);
|
|
138
|
+
setE164(formatted);
|
|
139
|
+
setPhoneValid(isValid);
|
|
140
|
+
};
|
|
141
|
+
var handleSignInAgain = function handleSignInAgain() {
|
|
142
|
+
if (typeof onSessionExpired === 'function') {
|
|
143
|
+
onSessionExpired();
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (typeof onBack === 'function') {
|
|
147
|
+
onBack();
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
var markSessionExpired = function markSessionExpired() {
|
|
151
|
+
setSessionExpired(true);
|
|
152
|
+
setError('');
|
|
153
|
+
setSuccess('');
|
|
154
|
+
};
|
|
100
155
|
var savePhone = /*#__PURE__*/function () {
|
|
101
|
-
var
|
|
102
|
-
var userId, existing, email, _yield$updatePowrUser, ok, data;
|
|
156
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(formattedPhone) {
|
|
157
|
+
var userId, sessionToken, sessionRefreshToken, existing, email, _yield$updatePowrUser, ok, data, activeToken;
|
|
103
158
|
return _regenerator().w(function (_context) {
|
|
104
159
|
while (1) switch (_context.n) {
|
|
105
160
|
case 0:
|
|
106
161
|
userId = (0, _utils.getUserId)(pendingAuth === null || pendingAuth === void 0 ? void 0 : pendingAuth.user);
|
|
107
|
-
|
|
162
|
+
sessionToken = pendingAuth === null || pendingAuth === void 0 ? void 0 : pendingAuth.token;
|
|
163
|
+
sessionRefreshToken = refreshToken || (pendingAuth === null || pendingAuth === void 0 ? void 0 : pendingAuth.refreshToken);
|
|
164
|
+
if (!(!userId || !sessionToken)) {
|
|
108
165
|
_context.n = 1;
|
|
109
166
|
break;
|
|
110
167
|
}
|
|
111
|
-
|
|
168
|
+
markSessionExpired();
|
|
169
|
+
return _context.a(2, null);
|
|
112
170
|
case 1:
|
|
171
|
+
if (!(0, _jwt.isJwtExpired)(sessionToken)) {
|
|
172
|
+
_context.n = 2;
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
markSessionExpired();
|
|
176
|
+
return _context.a(2, null);
|
|
177
|
+
case 2:
|
|
113
178
|
existing = pendingAuth.user || {};
|
|
114
179
|
email = existing.email && existing.email.includes('@') && existing.email || existing.phoneNumber && existing.phoneNumber.includes('@') && existing.phoneNumber || existing.email || '';
|
|
115
|
-
_context.n =
|
|
180
|
+
_context.n = 3;
|
|
116
181
|
return (0, _utils.updatePowrUser)({
|
|
117
182
|
apiUrl: apiUrl,
|
|
118
183
|
projectId: projectId,
|
|
119
184
|
userId: userId,
|
|
120
|
-
token:
|
|
185
|
+
token: sessionToken,
|
|
186
|
+
refreshToken: sessionRefreshToken,
|
|
121
187
|
body: {
|
|
122
188
|
phoneNumber: formattedPhone,
|
|
123
189
|
email: email,
|
|
124
190
|
fullName: existing.fullName
|
|
125
|
-
}
|
|
191
|
+
},
|
|
192
|
+
onTokenRefreshed: pendingAuth === null || pendingAuth === void 0 ? void 0 : pendingAuth.onTokenRefreshed
|
|
126
193
|
});
|
|
127
|
-
case
|
|
194
|
+
case 3:
|
|
128
195
|
_yield$updatePowrUser = _context.v;
|
|
129
196
|
ok = _yield$updatePowrUser.ok;
|
|
130
197
|
data = _yield$updatePowrUser.data;
|
|
198
|
+
activeToken = _yield$updatePowrUser.token;
|
|
131
199
|
if (ok) {
|
|
132
|
-
_context.n =
|
|
200
|
+
_context.n = 5;
|
|
133
201
|
break;
|
|
134
202
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
203
|
+
if (!(0, _jwt.isAuthSessionError)(data === null || data === void 0 ? void 0 : data.message)) {
|
|
204
|
+
_context.n = 4;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
markSessionExpired();
|
|
208
|
+
return _context.a(2, null);
|
|
209
|
+
case 4:
|
|
210
|
+
throw new Error((0, _sessionMessages.getFriendlyAuthError)(data === null || data === void 0 ? void 0 : data.message) || _sessionMessages.SESSION_MESSAGES.saveFailed);
|
|
211
|
+
case 5:
|
|
212
|
+
return _context.a(2, {
|
|
213
|
+
user: _objectSpread(_objectSpread({}, existing), {}, {
|
|
214
|
+
phoneNumber: formattedPhone,
|
|
215
|
+
email: email || existing.email,
|
|
216
|
+
powrId: existing.powrId || userId,
|
|
217
|
+
_id: existing._id || userId
|
|
218
|
+
}),
|
|
219
|
+
token: activeToken
|
|
220
|
+
});
|
|
143
221
|
}
|
|
144
222
|
}, _callee);
|
|
145
223
|
}));
|
|
146
224
|
return function savePhone(_x) {
|
|
147
|
-
return
|
|
225
|
+
return _ref3.apply(this, arguments);
|
|
148
226
|
};
|
|
149
227
|
}();
|
|
150
228
|
var handleSaveWithoutOtp = /*#__PURE__*/function () {
|
|
151
|
-
var
|
|
152
|
-
var formattedPhone,
|
|
229
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
230
|
+
var formattedPhone, result, _t;
|
|
153
231
|
return _regenerator().w(function (_context2) {
|
|
154
232
|
while (1) switch (_context2.p = _context2.n) {
|
|
155
233
|
case 0:
|
|
@@ -157,43 +235,50 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
157
235
|
setError('');
|
|
158
236
|
setSuccess('');
|
|
159
237
|
_context2.p = 1;
|
|
160
|
-
|
|
238
|
+
formattedPhone = e164 || (0, _phone.normalizePhone)(localNumber, phoneCountry);
|
|
239
|
+
if (!(!phoneValid || !formattedPhone)) {
|
|
161
240
|
_context2.n = 2;
|
|
162
241
|
break;
|
|
163
242
|
}
|
|
164
|
-
setError(
|
|
243
|
+
setError(_sessionMessages.SESSION_MESSAGES.invalidPhone);
|
|
165
244
|
setLoading(false);
|
|
166
245
|
return _context2.a(2);
|
|
167
246
|
case 2:
|
|
168
|
-
formattedPhone = formatPhone(phone);
|
|
169
247
|
_context2.n = 3;
|
|
170
248
|
return savePhone(formattedPhone);
|
|
171
249
|
case 3:
|
|
172
|
-
|
|
250
|
+
result = _context2.v;
|
|
251
|
+
if (result) {
|
|
252
|
+
_context2.n = 4;
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
setLoading(false);
|
|
256
|
+
return _context2.a(2);
|
|
257
|
+
case 4:
|
|
173
258
|
setSuccess('Phone number saved!');
|
|
174
|
-
onComplete(
|
|
175
|
-
_context2.n =
|
|
259
|
+
onComplete(result.user, result.token);
|
|
260
|
+
_context2.n = 6;
|
|
176
261
|
break;
|
|
177
|
-
case 4:
|
|
178
|
-
_context2.p = 4;
|
|
179
|
-
_t = _context2.v;
|
|
180
|
-
console.error('add-phone save error', _t);
|
|
181
|
-
setError((_t === null || _t === void 0 ? void 0 : _t.message) || 'Failed to save phone number');
|
|
182
262
|
case 5:
|
|
183
263
|
_context2.p = 5;
|
|
184
|
-
|
|
185
|
-
|
|
264
|
+
_t = _context2.v;
|
|
265
|
+
console.error('add-phone save error', _t);
|
|
266
|
+
setError((_t === null || _t === void 0 ? void 0 : _t.message) || _sessionMessages.SESSION_MESSAGES.saveFailed);
|
|
186
267
|
case 6:
|
|
268
|
+
_context2.p = 6;
|
|
269
|
+
setLoading(false);
|
|
270
|
+
return _context2.f(6);
|
|
271
|
+
case 7:
|
|
187
272
|
return _context2.a(2);
|
|
188
273
|
}
|
|
189
|
-
}, _callee2, null, [[1,
|
|
274
|
+
}, _callee2, null, [[1, 5, 6, 7]]);
|
|
190
275
|
}));
|
|
191
276
|
return function handleSaveWithoutOtp() {
|
|
192
|
-
return
|
|
277
|
+
return _ref4.apply(this, arguments);
|
|
193
278
|
};
|
|
194
279
|
}();
|
|
195
280
|
var sendOtp = /*#__PURE__*/function () {
|
|
196
|
-
var
|
|
281
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
197
282
|
var phoneNumber, confirmation, _t2, _t3;
|
|
198
283
|
return _regenerator().w(function (_context3) {
|
|
199
284
|
while (1) switch (_context3.p = _context3.n) {
|
|
@@ -202,12 +287,12 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
202
287
|
setError('');
|
|
203
288
|
setSuccess('');
|
|
204
289
|
_context3.p = 1;
|
|
205
|
-
phoneNumber =
|
|
206
|
-
if (!(
|
|
290
|
+
phoneNumber = e164 || (0, _phone.formatPhoneForSms)(localNumber, phoneCountry);
|
|
291
|
+
if (!(!phoneValid || !phoneNumber)) {
|
|
207
292
|
_context3.n = 2;
|
|
208
293
|
break;
|
|
209
294
|
}
|
|
210
|
-
setError(
|
|
295
|
+
setError(_sessionMessages.SESSION_MESSAGES.invalidPhone);
|
|
211
296
|
setLoading(false);
|
|
212
297
|
return _context3.a(2);
|
|
213
298
|
case 2:
|
|
@@ -240,7 +325,7 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
240
325
|
_context3.p = 8;
|
|
241
326
|
_t3 = _context3.v;
|
|
242
327
|
console.error('add-phone sendOtp error', _t3);
|
|
243
|
-
setError((_t3 === null || _t3 === void 0 ? void 0 : _t3.message) || 'Failed to send OTP.');
|
|
328
|
+
setError((_t3 === null || _t3 === void 0 ? void 0 : _t3.message) || 'Failed to send OTP. Please try again.');
|
|
244
329
|
clearRecaptcha();
|
|
245
330
|
case 9:
|
|
246
331
|
_context3.p = 9;
|
|
@@ -252,12 +337,12 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
252
337
|
}, _callee3, null, [[3, 5], [1, 8, 9, 10]]);
|
|
253
338
|
}));
|
|
254
339
|
return function sendOtp() {
|
|
255
|
-
return
|
|
340
|
+
return _ref5.apply(this, arguments);
|
|
256
341
|
};
|
|
257
342
|
}();
|
|
258
343
|
var verifyOtp = /*#__PURE__*/function () {
|
|
259
|
-
var
|
|
260
|
-
var formattedPhone,
|
|
344
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
345
|
+
var formattedPhone, result, _t4, _t5;
|
|
261
346
|
return _regenerator().w(function (_context4) {
|
|
262
347
|
while (1) switch (_context4.p = _context4.n) {
|
|
263
348
|
case 0:
|
|
@@ -286,34 +371,47 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
286
371
|
_context4.p = 5;
|
|
287
372
|
_t4 = _context4.v;
|
|
288
373
|
case 6:
|
|
289
|
-
formattedPhone =
|
|
374
|
+
formattedPhone = e164 || (0, _phone.normalizePhone)(localNumber, phoneCountry);
|
|
290
375
|
_context4.n = 7;
|
|
291
376
|
return savePhone(formattedPhone);
|
|
292
377
|
case 7:
|
|
293
|
-
|
|
378
|
+
result = _context4.v;
|
|
379
|
+
if (result) {
|
|
380
|
+
_context4.n = 8;
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
setLoading(false);
|
|
384
|
+
return _context4.a(2);
|
|
385
|
+
case 8:
|
|
294
386
|
clearRecaptcha();
|
|
295
387
|
setSuccess('Phone number saved!');
|
|
296
|
-
onComplete(
|
|
297
|
-
_context4.n =
|
|
388
|
+
onComplete(result.user, result.token);
|
|
389
|
+
_context4.n = 10;
|
|
298
390
|
break;
|
|
299
|
-
case
|
|
300
|
-
_context4.p =
|
|
391
|
+
case 9:
|
|
392
|
+
_context4.p = 9;
|
|
301
393
|
_t5 = _context4.v;
|
|
302
394
|
console.error('add-phone verifyOtp error', _t5);
|
|
303
395
|
setError((_t5 === null || _t5 === void 0 ? void 0 : _t5.message) || 'Invalid OTP. Please try again.');
|
|
304
|
-
case 9:
|
|
305
|
-
_context4.p = 9;
|
|
306
|
-
setLoading(false);
|
|
307
|
-
return _context4.f(9);
|
|
308
396
|
case 10:
|
|
397
|
+
_context4.p = 10;
|
|
398
|
+
setLoading(false);
|
|
399
|
+
return _context4.f(10);
|
|
400
|
+
case 11:
|
|
309
401
|
return _context4.a(2);
|
|
310
402
|
}
|
|
311
|
-
}, _callee4, null, [[3, 5], [1,
|
|
403
|
+
}, _callee4, null, [[3, 5], [1, 9, 10, 11]]);
|
|
312
404
|
}));
|
|
313
405
|
return function verifyOtp() {
|
|
314
|
-
return
|
|
406
|
+
return _ref6.apply(this, arguments);
|
|
315
407
|
};
|
|
316
408
|
}();
|
|
409
|
+
if (sessionExpired) {
|
|
410
|
+
return /*#__PURE__*/_react["default"].createElement(_SessionExpiredPanel["default"], {
|
|
411
|
+
onSignIn: handleSignInAgain,
|
|
412
|
+
loading: loading
|
|
413
|
+
});
|
|
414
|
+
}
|
|
317
415
|
var subtitle = requirePhoneVerification ? "".concat(appName, " uses your phone for sign-in. Verify your number to continue.") : "".concat(appName, " uses your phone for sign-in. Add your number to continue.");
|
|
318
416
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
319
417
|
style: panelStyles.wrapper
|
|
@@ -323,23 +421,26 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
323
421
|
style: panelStyles.subtitle
|
|
324
422
|
}, subtitle), /*#__PURE__*/_react["default"].createElement("label", {
|
|
325
423
|
style: panelStyles.label
|
|
326
|
-
}, "Phone number"), /*#__PURE__*/_react["default"].createElement("
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
424
|
+
}, "Phone number"), /*#__PURE__*/_react["default"].createElement(_PhoneInput["default"], {
|
|
425
|
+
value: localNumber,
|
|
426
|
+
country: phoneCountry,
|
|
427
|
+
onChange: handlePhoneChange,
|
|
428
|
+
international: international,
|
|
429
|
+
allowedCountries: allowedCountries,
|
|
430
|
+
defaultCountry: resolvedCountry,
|
|
431
|
+
disabled: requirePhoneVerification && otpSent || loading,
|
|
432
|
+
placeholder: international ? 'Phone number' : '10-digit mobile number',
|
|
433
|
+
inputStyle: {
|
|
434
|
+
height: 46,
|
|
435
|
+
border: '1px solid #e5e7eb'
|
|
335
436
|
},
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
})
|
|
437
|
+
selectStyle: {
|
|
438
|
+
border: '1px solid #e5e7eb'
|
|
439
|
+
}
|
|
440
|
+
}), !requirePhoneVerification ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("button", {
|
|
340
441
|
type: "button",
|
|
341
442
|
onClick: handleSaveWithoutOtp,
|
|
342
|
-
disabled: loading ||
|
|
443
|
+
disabled: loading || !phoneValid,
|
|
343
444
|
style: panelStyles.primaryButton
|
|
344
445
|
}, loading ? 'Saving...' : 'Continue'), onBack && /*#__PURE__*/_react["default"].createElement("button", {
|
|
345
446
|
type: "button",
|
|
@@ -352,7 +453,7 @@ var AddPhonePanel = function AddPhonePanel(_ref) {
|
|
|
352
453
|
}, "Back to sign in")) : !otpSent ? /*#__PURE__*/_react["default"].createElement("button", {
|
|
353
454
|
type: "button",
|
|
354
455
|
onClick: sendOtp,
|
|
355
|
-
disabled: loading ||
|
|
456
|
+
disabled: loading || !phoneValid,
|
|
356
457
|
style: panelStyles.primaryButton
|
|
357
458
|
}, loading ? 'Sending...' : 'Send OTP') : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
358
459
|
style: _objectSpread(_objectSpread({}, panelStyles.label), {}, {
|
|
@@ -424,14 +525,6 @@ var panelStyles = {
|
|
|
424
525
|
alignItems: 'center',
|
|
425
526
|
marginBottom: 12
|
|
426
527
|
},
|
|
427
|
-
prefix: {
|
|
428
|
-
background: '#fff7ed',
|
|
429
|
-
color: '#7c2d12',
|
|
430
|
-
padding: '10px 12px',
|
|
431
|
-
borderRadius: 8,
|
|
432
|
-
fontWeight: 700,
|
|
433
|
-
border: '1px solid #ffedd5'
|
|
434
|
-
},
|
|
435
528
|
input: {
|
|
436
529
|
flex: 1,
|
|
437
530
|
padding: '12px 14px',
|
|
@@ -449,7 +542,8 @@ var panelStyles = {
|
|
|
449
542
|
borderRadius: 8,
|
|
450
543
|
cursor: 'pointer',
|
|
451
544
|
fontWeight: 700,
|
|
452
|
-
fontSize: 15
|
|
545
|
+
fontSize: 15,
|
|
546
|
+
marginTop: 12
|
|
453
547
|
},
|
|
454
548
|
smallPrimaryButton: {
|
|
455
549
|
padding: '12px 16px',
|
|
@@ -7,7 +7,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports["default"] = void 0;
|
|
8
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
9
9
|
var _OnboardingShell = _interopRequireDefault(require("./OnboardingShell"));
|
|
10
|
+
var _SessionExpiredPanel = _interopRequireDefault(require("./SessionExpiredPanel"));
|
|
10
11
|
var _utils = require("./utils");
|
|
12
|
+
var _phone = require("../utils/phone");
|
|
13
|
+
var _jwt = require("../utils/jwt");
|
|
11
14
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
12
15
|
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 _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
13
16
|
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; }
|
|
@@ -46,9 +49,21 @@ var PowrOnboardingProvider = function PowrOnboardingProvider(_ref) {
|
|
|
46
49
|
skip = _ref$skip === void 0 ? false : _ref$skip,
|
|
47
50
|
_ref$requirePhoneVeri = _ref.requirePhoneVerification,
|
|
48
51
|
requirePhoneVerification = _ref$requirePhoneVeri === void 0 ? false : _ref$requirePhoneVeri,
|
|
52
|
+
_ref$defaultCountry = _ref.defaultCountry,
|
|
53
|
+
defaultCountry = _ref$defaultCountry === void 0 ? _phone.DEFAULT_COUNTRY : _ref$defaultCountry,
|
|
54
|
+
_ref$defaultCountryCo = _ref.defaultCountryCode,
|
|
55
|
+
defaultCountryCode = _ref$defaultCountryCo === void 0 ? _phone.DEFAULT_COUNTRY_CODE : _ref$defaultCountryCo,
|
|
56
|
+
_ref$international = _ref.international,
|
|
57
|
+
international = _ref$international === void 0 ? false : _ref$international,
|
|
58
|
+
_ref$allowedCountries = _ref.allowedCountries,
|
|
59
|
+
allowedCountries = _ref$allowedCountries === void 0 ? null : _ref$allowedCountries,
|
|
60
|
+
refreshToken = _ref.refreshToken,
|
|
49
61
|
onUserUpdate = _ref.onUserUpdate,
|
|
62
|
+
onSessionExpired = _ref.onSessionExpired,
|
|
63
|
+
onTokenRefreshed = _ref.onTokenRefreshed,
|
|
50
64
|
onAllComplete = _ref.onAllComplete,
|
|
51
65
|
children = _ref.children;
|
|
66
|
+
var resolvedDefaultCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
|
|
52
67
|
var _useState = (0, _react.useState)(user),
|
|
53
68
|
_useState2 = _slicedToArray(_useState, 2),
|
|
54
69
|
localUser = _useState2[0],
|
|
@@ -75,9 +90,16 @@ var PowrOnboardingProvider = function PowrOnboardingProvider(_ref) {
|
|
|
75
90
|
apiUrl: apiUrl,
|
|
76
91
|
projectId: projectId,
|
|
77
92
|
appName: appName,
|
|
78
|
-
requirePhoneVerification: requirePhoneVerification
|
|
93
|
+
requirePhoneVerification: requirePhoneVerification,
|
|
94
|
+
defaultCountry: resolvedDefaultCountry,
|
|
95
|
+
defaultCountryCode: defaultCountryCode,
|
|
96
|
+
international: international,
|
|
97
|
+
allowedCountries: allowedCountries,
|
|
98
|
+
refreshToken: refreshToken,
|
|
99
|
+
onSessionExpired: onSessionExpired,
|
|
100
|
+
onTokenRefreshed: onTokenRefreshed
|
|
79
101
|
};
|
|
80
|
-
}, [localUser, token, apiUrl, projectId, appName, requirePhoneVerification]);
|
|
102
|
+
}, [localUser, token, apiUrl, projectId, appName, requirePhoneVerification, resolvedDefaultCountry, defaultCountryCode, international, allowedCountries, refreshToken, onSessionExpired, onTokenRefreshed]);
|
|
81
103
|
var runEvaluation = (0, _react.useCallback)(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
82
104
|
var pending;
|
|
83
105
|
return _regenerator().w(function (_context) {
|
|
@@ -114,6 +136,7 @@ var PowrOnboardingProvider = function PowrOnboardingProvider(_ref) {
|
|
|
114
136
|
(0, _react.useEffect)(function () {
|
|
115
137
|
runEvaluation();
|
|
116
138
|
}, [runEvaluation]);
|
|
139
|
+
var sessionTimedOut = !skip && isHydrated && !!localUser && !!token && (0, _jwt.isJwtExpired)(token);
|
|
117
140
|
var handleStepComplete = /*#__PURE__*/function () {
|
|
118
141
|
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(patch) {
|
|
119
142
|
var updatedUser, pending;
|
|
@@ -167,6 +190,17 @@ var PowrOnboardingProvider = function PowrOnboardingProvider(_ref) {
|
|
|
167
190
|
if (skip || !isHydrated || !localUser || !token) {
|
|
168
191
|
return children;
|
|
169
192
|
}
|
|
193
|
+
if (sessionTimedOut) {
|
|
194
|
+
return /*#__PURE__*/_react["default"].createElement(_OnboardingShell["default"], {
|
|
195
|
+
appName: appName,
|
|
196
|
+
appLogo: appLogo,
|
|
197
|
+
currentStep: 1,
|
|
198
|
+
totalSteps: 1,
|
|
199
|
+
stepTitle: "Sign in"
|
|
200
|
+
}, /*#__PURE__*/_react["default"].createElement(_SessionExpiredPanel["default"], {
|
|
201
|
+
onSignIn: onSessionExpired
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
170
204
|
if (evaluating) {
|
|
171
205
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
172
206
|
style: loadingStyles.page
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports["default"] = void 0;
|
|
7
|
+
var _react = _interopRequireDefault(require("react"));
|
|
8
|
+
var _sessionMessages = require("../utils/sessionMessages");
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
10
|
+
var SessionExpiredPanel = function SessionExpiredPanel(_ref) {
|
|
11
|
+
var _ref$title = _ref.title,
|
|
12
|
+
title = _ref$title === void 0 ? _sessionMessages.SESSION_MESSAGES.expiredTitle : _ref$title,
|
|
13
|
+
_ref$body = _ref.body,
|
|
14
|
+
body = _ref$body === void 0 ? _sessionMessages.SESSION_MESSAGES.expiredBody : _ref$body,
|
|
15
|
+
_ref$actionLabel = _ref.actionLabel,
|
|
16
|
+
actionLabel = _ref$actionLabel === void 0 ? _sessionMessages.SESSION_MESSAGES.signInAgain : _ref$actionLabel,
|
|
17
|
+
onSignIn = _ref.onSignIn,
|
|
18
|
+
_ref$loading = _ref.loading,
|
|
19
|
+
loading = _ref$loading === void 0 ? false : _ref$loading;
|
|
20
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
21
|
+
style: styles.wrapper
|
|
22
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
23
|
+
style: styles.icon,
|
|
24
|
+
"aria-hidden": "true"
|
|
25
|
+
}, "\u23F1"), /*#__PURE__*/_react["default"].createElement("h2", {
|
|
26
|
+
style: styles.title
|
|
27
|
+
}, title), /*#__PURE__*/_react["default"].createElement("p", {
|
|
28
|
+
style: styles.body
|
|
29
|
+
}, body), /*#__PURE__*/_react["default"].createElement("button", {
|
|
30
|
+
type: "button",
|
|
31
|
+
onClick: onSignIn,
|
|
32
|
+
disabled: loading || typeof onSignIn !== 'function',
|
|
33
|
+
style: styles.primaryButton
|
|
34
|
+
}, loading ? 'Please wait...' : actionLabel));
|
|
35
|
+
};
|
|
36
|
+
var styles = {
|
|
37
|
+
wrapper: {
|
|
38
|
+
width: '100%',
|
|
39
|
+
textAlign: 'center',
|
|
40
|
+
padding: '8px 0 4px'
|
|
41
|
+
},
|
|
42
|
+
icon: {
|
|
43
|
+
fontSize: 32,
|
|
44
|
+
lineHeight: 1,
|
|
45
|
+
marginBottom: 12
|
|
46
|
+
},
|
|
47
|
+
title: {
|
|
48
|
+
margin: '0 0 10px',
|
|
49
|
+
fontSize: 22,
|
|
50
|
+
fontWeight: 700,
|
|
51
|
+
color: '#111827'
|
|
52
|
+
},
|
|
53
|
+
body: {
|
|
54
|
+
margin: '0 0 20px',
|
|
55
|
+
fontSize: 14,
|
|
56
|
+
color: '#6b7280',
|
|
57
|
+
lineHeight: 1.6
|
|
58
|
+
},
|
|
59
|
+
primaryButton: {
|
|
60
|
+
width: '100%',
|
|
61
|
+
padding: 12,
|
|
62
|
+
background: '#ff6b35',
|
|
63
|
+
color: 'white',
|
|
64
|
+
border: 'none',
|
|
65
|
+
borderRadius: 8,
|
|
66
|
+
cursor: 'pointer',
|
|
67
|
+
fontWeight: 700,
|
|
68
|
+
fontSize: 15
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
var _default = exports["default"] = SessionExpiredPanel;
|