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.
@@ -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
- var _useState = (0, _react.useState)(''),
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
- phone = _useState2[0],
40
- setPhone = _useState2[1];
54
+ phoneCountry = _useState2[0],
55
+ setPhoneCountry = _useState2[1];
41
56
  var _useState3 = (0, _react.useState)(''),
42
57
  _useState4 = _slicedToArray(_useState3, 2),
43
- otp = _useState4[0],
44
- setOtp = _useState4[1];
58
+ localNumber = _useState4[0],
59
+ setLocalNumber = _useState4[1];
45
60
  var _useState5 = (0, _react.useState)(false),
46
61
  _useState6 = _slicedToArray(_useState5, 2),
47
- loading = _useState6[0],
48
- setLoading = _useState6[1];
49
- var _useState7 = (0, _react.useState)(false),
62
+ phoneValid = _useState6[0],
63
+ setPhoneValid = _useState6[1];
64
+ var _useState7 = (0, _react.useState)(''),
50
65
  _useState8 = _slicedToArray(_useState7, 2),
51
- otpSent = _useState8[0],
52
- setOtpSent = _useState8[1];
53
- var _useState9 = (0, _react.useState)(null),
66
+ e164 = _useState8[0],
67
+ setE164 = _useState8[1];
68
+ var _useState9 = (0, _react.useState)(''),
54
69
  _useState0 = _slicedToArray(_useState9, 2),
55
- confirmationResult = _useState0[0],
56
- setConfirmationResult = _useState0[1];
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
- error = _useState10[0],
60
- setError = _useState10[1];
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
- success = _useState12[0],
64
- setSuccess = _useState12[1];
65
- var _useState13 = (0, _react.useState)(0),
78
+ otpSent = _useState12[0],
79
+ setOtpSent = _useState12[1];
80
+ var _useState13 = (0, _react.useState)(null),
66
81
  _useState14 = _slicedToArray(_useState13, 2),
67
- resendTimer = _useState14[0],
68
- setResendTimer = _useState14[1];
69
- var formatPhone = function formatPhone(value) {
70
- var clean = (value || '').replace(/\D/g, '');
71
- if (!clean.startsWith('91')) clean = '91' + clean;
72
- return '+' + clean;
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
- (0, _react.useEffect)(function () {
126
+ _react["default"].useEffect(function () {
85
127
  return function () {
86
128
  return clearRecaptcha();
87
129
  };
88
130
  }, []);
89
- (0, _react.useEffect)(function () {
90
- if (resendTimer <= 0) return undefined;
91
- var id = setInterval(function () {
92
- setResendTimer(function (t) {
93
- return t <= 1 ? 0 : t - 1;
94
- });
95
- }, 1000);
96
- return function () {
97
- return clearInterval(id);
98
- };
99
- }, [resendTimer]);
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 _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(formattedPhone) {
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
- if (!(!userId || !(pendingAuth !== null && pendingAuth !== void 0 && pendingAuth.token))) {
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
- throw new Error('Missing user session. Please sign in again.');
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 = 2;
180
+ _context.n = 3;
116
181
  return (0, _utils.updatePowrUser)({
117
182
  apiUrl: apiUrl,
118
183
  projectId: projectId,
119
184
  userId: userId,
120
- token: pendingAuth.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 2:
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 = 3;
200
+ _context.n = 5;
133
201
  break;
134
202
  }
135
- throw new Error((data === null || data === void 0 ? void 0 : data.message) || 'Failed to save phone number');
136
- case 3:
137
- return _context.a(2, _objectSpread(_objectSpread({}, existing), {}, {
138
- phoneNumber: formattedPhone,
139
- email: email || existing.email,
140
- powrId: existing.powrId || userId,
141
- _id: existing._id || userId
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 _ref2.apply(this, arguments);
225
+ return _ref3.apply(this, arguments);
148
226
  };
149
227
  }();
150
228
  var handleSaveWithoutOtp = /*#__PURE__*/function () {
151
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
152
- var formattedPhone, updatedUser, _t;
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
- if (!(phone.replace(/\D/g, '').length < 10)) {
238
+ formattedPhone = e164 || (0, _phone.normalizePhone)(localNumber, phoneCountry);
239
+ if (!(!phoneValid || !formattedPhone)) {
161
240
  _context2.n = 2;
162
241
  break;
163
242
  }
164
- setError('Please enter a valid 10-digit phone number');
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
- updatedUser = _context2.v;
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(updatedUser);
175
- _context2.n = 5;
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
- setLoading(false);
185
- return _context2.f(5);
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, 4, 5, 6]]);
274
+ }, _callee2, null, [[1, 5, 6, 7]]);
190
275
  }));
191
276
  return function handleSaveWithoutOtp() {
192
- return _ref3.apply(this, arguments);
277
+ return _ref4.apply(this, arguments);
193
278
  };
194
279
  }();
195
280
  var sendOtp = /*#__PURE__*/function () {
196
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
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 = formatPhone(phone);
206
- if (!(phone.replace(/\D/g, '').length < 10)) {
290
+ phoneNumber = e164 || (0, _phone.formatPhoneForSms)(localNumber, phoneCountry);
291
+ if (!(!phoneValid || !phoneNumber)) {
207
292
  _context3.n = 2;
208
293
  break;
209
294
  }
210
- setError('Please enter a valid 10-digit phone number');
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 _ref4.apply(this, arguments);
340
+ return _ref5.apply(this, arguments);
256
341
  };
257
342
  }();
258
343
  var verifyOtp = /*#__PURE__*/function () {
259
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
260
- var formattedPhone, updatedUser, _t4, _t5;
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 = formatPhone(phone);
374
+ formattedPhone = e164 || (0, _phone.normalizePhone)(localNumber, phoneCountry);
290
375
  _context4.n = 7;
291
376
  return savePhone(formattedPhone);
292
377
  case 7:
293
- updatedUser = _context4.v;
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(updatedUser);
297
- _context4.n = 9;
388
+ onComplete(result.user, result.token);
389
+ _context4.n = 10;
298
390
  break;
299
- case 8:
300
- _context4.p = 8;
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, 8, 9, 10]]);
403
+ }, _callee4, null, [[3, 5], [1, 9, 10, 11]]);
312
404
  }));
313
405
  return function verifyOtp() {
314
- return _ref5.apply(this, arguments);
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("div", {
327
- style: panelStyles.phoneRow
328
- }, /*#__PURE__*/_react["default"].createElement("div", {
329
- style: panelStyles.prefix
330
- }, "+91"), /*#__PURE__*/_react["default"].createElement("input", {
331
- type: "text",
332
- value: phone,
333
- onChange: function onChange(e) {
334
- return setPhone((e.target.value || '').replace(/\D/g, '').slice(0, 10));
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
- placeholder: "10-digit mobile number",
337
- style: panelStyles.input,
338
- disabled: requirePhoneVerification && otpSent || loading
339
- })), !requirePhoneVerification ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("button", {
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 || phone.replace(/\D/g, '').length < 10,
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 || phone.replace(/\D/g, '').length < 10,
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;