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.
@@ -14,18 +14,29 @@ var AddPhoneStepView = function AddPhoneStepView(_ref) {
14
14
  onBack = _ref.onBack;
15
15
  var pendingAuth = {
16
16
  user: ctx.user,
17
- token: ctx.token
17
+ token: ctx.token,
18
+ refreshToken: ctx.refreshToken,
19
+ onTokenRefreshed: ctx.onTokenRefreshed
18
20
  };
19
21
  return /*#__PURE__*/_react["default"].createElement(_AddPhonePanel["default"], {
20
22
  apiUrl: ctx.apiUrl,
21
23
  projectId: ctx.projectId,
22
24
  pendingAuth: pendingAuth,
25
+ refreshToken: ctx.refreshToken,
23
26
  appName: ctx.appName || 'App',
24
- onComplete: function onComplete(updatedUser) {
25
- return _onComplete(updatedUser);
27
+ onComplete: function onComplete(updatedUser, sessionToken) {
28
+ if (sessionToken && typeof ctx.onTokenRefreshed === 'function') {
29
+ ctx.onTokenRefreshed(sessionToken);
30
+ }
31
+ _onComplete(updatedUser);
26
32
  },
27
33
  onBack: onBack,
28
- requirePhoneVerification: ctx.requirePhoneVerification === true
34
+ onSessionExpired: ctx.onSessionExpired,
35
+ requirePhoneVerification: ctx.requirePhoneVerification === true,
36
+ defaultCountry: ctx.defaultCountry,
37
+ defaultCountryCode: ctx.defaultCountryCode,
38
+ international: ctx.international === true,
39
+ allowedCountries: ctx.allowedCountries
29
40
  });
30
41
  };
31
42
  var addPhoneStep = exports.addPhoneStep = {
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.profileNameStep = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _utils = require("../utils");
10
+ var _phone = require("../../utils/phone");
10
11
  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); }
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); }
@@ -37,7 +38,7 @@ var ProfileNameStepView = function ProfileNameStepView(_ref) {
37
38
  setError = _useState6[1];
38
39
  var handleSave = /*#__PURE__*/function () {
39
40
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
40
- var trimmed, userId, _yield$updatePowrUser, ok, data, _t;
41
+ var trimmed, _ctx$user$phoneNumber, userId, _yield$updatePowrUser, ok, data, _t;
41
42
  return _regenerator().w(function (_context) {
42
43
  while (1) switch (_context.p = _context.n) {
43
44
  case 0:
@@ -61,7 +62,7 @@ var ProfileNameStepView = function ProfileNameStepView(_ref) {
61
62
  token: ctx.token,
62
63
  body: {
63
64
  fullName: trimmed,
64
- phoneNumber: ctx.user.phoneNumber,
65
+ phoneNumber: (_ctx$user$phoneNumber = ctx.user.phoneNumber) !== null && _ctx$user$phoneNumber !== void 0 && _ctx$user$phoneNumber.includes('@') ? ctx.user.phoneNumber : (0, _phone.normalizePhone)(ctx.user.phoneNumber || '', ctx.defaultCountry),
65
66
  email: ctx.user.email
66
67
  }
67
68
  });
@@ -3,18 +3,97 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "DEFAULT_COUNTRY", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _phone.DEFAULT_COUNTRY;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "DEFAULT_COUNTRY_CODE", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _phone.DEFAULT_COUNTRY_CODE;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "PRIORITY_COUNTRIES", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _phone.PRIORITY_COUNTRIES;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "buildPhoneFromParts", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _phone.buildPhoneFromParts;
28
+ }
29
+ });
6
30
  exports.defineAppStep = defineAppStep;
7
31
  exports.defineOptionalAppStep = defineOptionalAppStep;
8
32
  exports.evaluateSteps = evaluateSteps;
33
+ Object.defineProperty(exports, "formatPhoneForSms", {
34
+ enumerable: true,
35
+ get: function get() {
36
+ return _phone.formatPhoneForSms;
37
+ }
38
+ });
39
+ Object.defineProperty(exports, "getCountryOptions", {
40
+ enumerable: true,
41
+ get: function get() {
42
+ return _phone.getCountryOptions;
43
+ }
44
+ });
45
+ Object.defineProperty(exports, "getLocalPhoneNumber", {
46
+ enumerable: true,
47
+ get: function get() {
48
+ return _phone.getLocalPhoneNumber;
49
+ }
50
+ });
51
+ Object.defineProperty(exports, "getPhoneLookupVariants", {
52
+ enumerable: true,
53
+ get: function get() {
54
+ return _phone.getPhoneLookupVariants;
55
+ }
56
+ });
9
57
  exports.getUserId = getUserId;
10
- exports.hasValidPhone = hasValidPhone;
58
+ Object.defineProperty(exports, "hasValidPhone", {
59
+ enumerable: true,
60
+ get: function get() {
61
+ return _phone.hasValidPhone;
62
+ }
63
+ });
64
+ Object.defineProperty(exports, "isValidPhone", {
65
+ enumerable: true,
66
+ get: function get() {
67
+ return _phone.isValidPhone;
68
+ }
69
+ });
11
70
  exports.mergePowrSteps = mergePowrSteps;
12
71
  exports.needsOnboarding = needsOnboarding;
13
72
  exports.needsPhone = needsPhone;
14
73
  exports.needsProfileName = needsProfileName;
74
+ Object.defineProperty(exports, "normalizePhone", {
75
+ enumerable: true,
76
+ get: function get() {
77
+ return _phone.normalizePhone;
78
+ }
79
+ });
80
+ Object.defineProperty(exports, "parsePhone", {
81
+ enumerable: true,
82
+ get: function get() {
83
+ return _phone.parsePhone;
84
+ }
85
+ });
86
+ exports.refreshAccessToken = refreshAccessToken;
87
+ Object.defineProperty(exports, "resolveCountry", {
88
+ enumerable: true,
89
+ get: function get() {
90
+ return _phone.resolveCountry;
91
+ }
92
+ });
15
93
  exports.updatePowrUser = updatePowrUser;
16
94
  var _profileNameStep = require("./steps/profileNameStep");
17
95
  var _addPhoneStep = require("./steps/addPhoneStep");
96
+ var _phone = require("../utils/phone");
18
97
  function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
19
98
  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); }
20
99
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
@@ -32,19 +111,13 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
32
111
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
33
112
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
34
113
  function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
35
- function hasValidPhone(phone) {
36
- if (!phone || typeof phone !== 'string') return false;
37
- if (phone.includes('@')) return false;
38
- var clean = phone.replace(/\D/g, '');
39
- return clean.length >= 10 && clean.length <= 15;
40
- }
41
114
  function getUserId(user) {
42
115
  if (!user) return null;
43
116
  var id = user.powrId || user._id || user.id;
44
117
  return id ? String(id) : null;
45
118
  }
46
119
  function needsPhone(user) {
47
- return !hasValidPhone(user === null || user === void 0 ? void 0 : user.phoneNumber);
120
+ return !(0, _phone.hasValidPhone)(user === null || user === void 0 ? void 0 : user.phoneNumber);
48
121
  }
49
122
  function needsProfileName(user) {
50
123
  var _user$fullName;
@@ -173,41 +246,146 @@ function _needsOnboarding() {
173
246
  }));
174
247
  return _needsOnboarding.apply(this, arguments);
175
248
  }
176
- function updatePowrUser(_x4) {
177
- return _updatePowrUser.apply(this, arguments);
249
+ function refreshAccessToken(_x4) {
250
+ return _refreshAccessToken.apply(this, arguments);
178
251
  }
179
- function _updatePowrUser() {
180
- _updatePowrUser = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(_ref) {
181
- var apiUrl, projectId, userId, token, body, separator, url, response, data;
252
+ function _refreshAccessToken() {
253
+ _refreshAccessToken = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(_ref) {
254
+ var apiUrl, projectId, refreshToken, url, response, data;
182
255
  return _regenerator().w(function (_context3) {
183
256
  while (1) switch (_context3.n) {
184
257
  case 0:
185
- apiUrl = _ref.apiUrl, projectId = _ref.projectId, userId = _ref.userId, token = _ref.token, body = _ref.body;
186
- separator = '?';
187
- url = "".concat(apiUrl, "/users/").concat(userId).concat(separator, "projectId=").concat(projectId);
188
- _context3.n = 1;
258
+ apiUrl = _ref.apiUrl, projectId = _ref.projectId, refreshToken = _ref.refreshToken;
259
+ if (refreshToken) {
260
+ _context3.n = 1;
261
+ break;
262
+ }
263
+ return _context3.a(2, {
264
+ ok: false,
265
+ data: {
266
+ message: 'No refresh token'
267
+ }
268
+ });
269
+ case 1:
270
+ url = "".concat(apiUrl, "/auth/refresh-token?projectId=").concat(projectId);
271
+ _context3.n = 2;
189
272
  return fetch(url, {
190
- method: 'PUT',
273
+ method: 'POST',
191
274
  headers: {
192
- 'Content-Type': 'application/json',
193
- Authorization: "Bearer ".concat(token)
275
+ 'Content-Type': 'application/json'
194
276
  },
195
- body: JSON.stringify(body)
277
+ body: JSON.stringify({
278
+ refreshToken: refreshToken
279
+ })
196
280
  });
197
- case 1:
281
+ case 2:
198
282
  response = _context3.v;
199
- _context3.n = 2;
283
+ _context3.n = 3;
200
284
  return response.json()["catch"](function () {
201
285
  return {};
202
286
  });
203
- case 2:
287
+ case 3:
204
288
  data = _context3.v;
289
+ if (response.ok) {
290
+ _context3.n = 4;
291
+ break;
292
+ }
205
293
  return _context3.a(2, {
206
- ok: response.ok,
294
+ ok: false,
295
+ data: data
296
+ });
297
+ case 4:
298
+ return _context3.a(2, {
299
+ ok: true,
300
+ token: data.token,
207
301
  data: data
208
302
  });
209
303
  }
210
304
  }, _callee3);
211
305
  }));
306
+ return _refreshAccessToken.apply(this, arguments);
307
+ }
308
+ function updatePowrUser(_x5) {
309
+ return _updatePowrUser.apply(this, arguments);
310
+ }
311
+ function _updatePowrUser() {
312
+ _updatePowrUser = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(_ref2) {
313
+ var apiUrl, projectId, userId, token, refreshToken, body, onTokenRefreshed, activeToken, putUser, response, data, refreshed;
314
+ return _regenerator().w(function (_context5) {
315
+ while (1) switch (_context5.n) {
316
+ case 0:
317
+ apiUrl = _ref2.apiUrl, projectId = _ref2.projectId, userId = _ref2.userId, token = _ref2.token, refreshToken = _ref2.refreshToken, body = _ref2.body, onTokenRefreshed = _ref2.onTokenRefreshed;
318
+ activeToken = token;
319
+ putUser = /*#__PURE__*/function () {
320
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
321
+ var url;
322
+ return _regenerator().w(function (_context4) {
323
+ while (1) switch (_context4.n) {
324
+ case 0:
325
+ url = "".concat(apiUrl, "/users/").concat(userId, "?projectId=").concat(projectId);
326
+ return _context4.a(2, fetch(url, {
327
+ method: 'PUT',
328
+ headers: {
329
+ 'Content-Type': 'application/json',
330
+ Authorization: "Bearer ".concat(activeToken)
331
+ },
332
+ body: JSON.stringify(body)
333
+ }));
334
+ }
335
+ }, _callee4);
336
+ }));
337
+ return function putUser() {
338
+ return _ref3.apply(this, arguments);
339
+ };
340
+ }();
341
+ _context5.n = 1;
342
+ return putUser();
343
+ case 1:
344
+ response = _context5.v;
345
+ _context5.n = 2;
346
+ return response.json()["catch"](function () {
347
+ return {};
348
+ });
349
+ case 2:
350
+ data = _context5.v;
351
+ if (!(response.status === 401 && refreshToken)) {
352
+ _context5.n = 6;
353
+ break;
354
+ }
355
+ _context5.n = 3;
356
+ return refreshAccessToken({
357
+ apiUrl: apiUrl,
358
+ projectId: projectId,
359
+ refreshToken: refreshToken
360
+ });
361
+ case 3:
362
+ refreshed = _context5.v;
363
+ if (!(refreshed.ok && refreshed.token)) {
364
+ _context5.n = 6;
365
+ break;
366
+ }
367
+ activeToken = refreshed.token;
368
+ if (typeof onTokenRefreshed === 'function') {
369
+ onTokenRefreshed(activeToken);
370
+ }
371
+ _context5.n = 4;
372
+ return putUser();
373
+ case 4:
374
+ response = _context5.v;
375
+ _context5.n = 5;
376
+ return response.json()["catch"](function () {
377
+ return {};
378
+ });
379
+ case 5:
380
+ data = _context5.v;
381
+ case 6:
382
+ return _context5.a(2, {
383
+ ok: response.ok,
384
+ data: data,
385
+ token: activeToken
386
+ });
387
+ }
388
+ }, _callee5);
389
+ }));
212
390
  return _updatePowrUser.apply(this, arguments);
213
391
  }
@@ -7,6 +7,9 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports["default"] = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
9
  var _firebase = require("../utils/firebase");
10
+ var _phone = require("../utils/phone");
11
+ var _PhoneInput = _interopRequireDefault(require("../components/PhoneInput"));
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
13
  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 _t5 in e) "default" !== _t5 && {}.hasOwnProperty.call(e, _t5) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t5)) && (i.get || i.set) ? o(f, _t5, i) : f[_t5] = e[_t5]); return f; })(e, t); }
11
14
  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; }
12
15
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -25,52 +28,63 @@ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" !=
25
28
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
26
29
  var PowrVerify = function PowrVerify(_ref) {
27
30
  var onVerified = _ref.onVerified,
31
+ _ref$defaultCountry = _ref.defaultCountry,
32
+ defaultCountry = _ref$defaultCountry === void 0 ? _phone.DEFAULT_COUNTRY : _ref$defaultCountry,
28
33
  _ref$defaultCountryCo = _ref.defaultCountryCode,
29
- defaultCountryCode = _ref$defaultCountryCo === void 0 ? '91' : _ref$defaultCountryCo,
34
+ defaultCountryCode = _ref$defaultCountryCo === void 0 ? _phone.DEFAULT_COUNTRY_CODE : _ref$defaultCountryCo,
35
+ _ref$international = _ref.international,
36
+ international = _ref$international === void 0 ? false : _ref$international,
37
+ _ref$allowedCountries = _ref.allowedCountries,
38
+ allowedCountries = _ref$allowedCountries === void 0 ? null : _ref$allowedCountries,
30
39
  _ref$appName = _ref.appName,
31
40
  appName = _ref$appName === void 0 ? 'App' : _ref$appName,
32
41
  _ref$projectId = _ref.projectId,
33
42
  projectId = _ref$projectId === void 0 ? undefined : _ref$projectId;
34
- var _useState = (0, _react.useState)(''),
43
+ var resolvedCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
44
+ var _useState = (0, _react.useState)(resolvedCountry),
35
45
  _useState2 = _slicedToArray(_useState, 2),
36
- phone = _useState2[0],
37
- setPhone = _useState2[1];
46
+ phoneCountry = _useState2[0],
47
+ setPhoneCountry = _useState2[1];
38
48
  var _useState3 = (0, _react.useState)(''),
39
49
  _useState4 = _slicedToArray(_useState3, 2),
40
- otp = _useState4[0],
41
- setOtp = _useState4[1];
50
+ localNumber = _useState4[0],
51
+ setLocalNumber = _useState4[1];
42
52
  var _useState5 = (0, _react.useState)(false),
43
53
  _useState6 = _slicedToArray(_useState5, 2),
44
- loading = _useState6[0],
45
- setLoading = _useState6[1];
46
- var _useState7 = (0, _react.useState)(false),
54
+ phoneValid = _useState6[0],
55
+ setPhoneValid = _useState6[1];
56
+ var _useState7 = (0, _react.useState)(''),
47
57
  _useState8 = _slicedToArray(_useState7, 2),
48
- otpSent = _useState8[0],
49
- setOtpSent = _useState8[1];
50
- var _useState9 = (0, _react.useState)(null),
58
+ e164 = _useState8[0],
59
+ setE164 = _useState8[1];
60
+ var _useState9 = (0, _react.useState)(''),
51
61
  _useState0 = _slicedToArray(_useState9, 2),
52
- confirmationResult = _useState0[0],
53
- setConfirmationResult = _useState0[1];
54
- var _useState1 = (0, _react.useState)(''),
62
+ otp = _useState0[0],
63
+ setOtp = _useState0[1];
64
+ var _useState1 = (0, _react.useState)(false),
55
65
  _useState10 = _slicedToArray(_useState1, 2),
56
- error = _useState10[0],
57
- setError = _useState10[1];
58
- var _useState11 = (0, _react.useState)(''),
66
+ loading = _useState10[0],
67
+ setLoading = _useState10[1];
68
+ var _useState11 = (0, _react.useState)(false),
59
69
  _useState12 = _slicedToArray(_useState11, 2),
60
- success = _useState12[0],
61
- setSuccess = _useState12[1];
62
- var _useState13 = (0, _react.useState)(0),
70
+ otpSent = _useState12[0],
71
+ setOtpSent = _useState12[1];
72
+ var _useState13 = (0, _react.useState)(null),
63
73
  _useState14 = _slicedToArray(_useState13, 2),
64
- resendTimer = _useState14[0],
65
- setResendTimer = _useState14[1];
66
- var formatPhone = function formatPhone(p) {
67
- var clean = (p || '').replace(/\D/g, '');
68
- if (!clean) return '';
69
- if (!clean.startsWith(defaultCountryCode)) {
70
- clean = defaultCountryCode + clean;
71
- }
72
- return '+' + clean;
73
- };
74
+ confirmationResult = _useState14[0],
75
+ setConfirmationResult = _useState14[1];
76
+ var _useState15 = (0, _react.useState)(''),
77
+ _useState16 = _slicedToArray(_useState15, 2),
78
+ error = _useState16[0],
79
+ setError = _useState16[1];
80
+ var _useState17 = (0, _react.useState)(''),
81
+ _useState18 = _slicedToArray(_useState17, 2),
82
+ success = _useState18[0],
83
+ setSuccess = _useState18[1];
84
+ var _useState19 = (0, _react.useState)(0),
85
+ _useState20 = _slicedToArray(_useState19, 2),
86
+ resendTimer = _useState20[0],
87
+ setResendTimer = _useState20[1];
74
88
  var clearRecaptcha = function clearRecaptcha() {
75
89
  if (window.recaptchaVerifier) {
76
90
  try {
@@ -81,8 +95,18 @@ var PowrVerify = function PowrVerify(_ref) {
81
95
  window.recaptchaVerifier = null;
82
96
  }
83
97
  };
98
+ var handlePhoneChange = function handlePhoneChange(_ref2) {
99
+ var country = _ref2.country,
100
+ local = _ref2.localNumber,
101
+ formatted = _ref2.e164,
102
+ isValid = _ref2.isValid;
103
+ setPhoneCountry(country);
104
+ setLocalNumber(local);
105
+ setE164(formatted);
106
+ setPhoneValid(isValid);
107
+ };
84
108
  var sendOtp = /*#__PURE__*/function () {
85
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
109
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
86
110
  var phoneNumber, appVerifier, confirmation, _t, _t2;
87
111
  return _regenerator().w(function (_context) {
88
112
  while (1) switch (_context.p = _context.n) {
@@ -91,8 +115,8 @@ var PowrVerify = function PowrVerify(_ref) {
91
115
  setError('');
92
116
  setSuccess('');
93
117
  _context.p = 1;
94
- phoneNumber = formatPhone(phone);
95
- if (phoneNumber) {
118
+ phoneNumber = e164 || (0, _phone.formatPhoneForSms)(localNumber, phoneCountry);
119
+ if (!(!phoneValid || !phoneNumber)) {
96
120
  _context.n = 2;
97
121
  break;
98
122
  }
@@ -100,7 +124,6 @@ var PowrVerify = function PowrVerify(_ref) {
100
124
  setLoading(false);
101
125
  return _context.a(2);
102
126
  case 2:
103
- // clear existing
104
127
  clearRecaptcha();
105
128
  window.recaptchaVerifier = new _firebase.RecaptchaVerifier(_firebase.auth, 'recaptcha-container-powrbase', {
106
129
  size: 'invisible',
@@ -143,11 +166,11 @@ var PowrVerify = function PowrVerify(_ref) {
143
166
  }, _callee, null, [[3, 5], [1, 8, 9, 10]]);
144
167
  }));
145
168
  return function sendOtp() {
146
- return _ref2.apply(this, arguments);
169
+ return _ref3.apply(this, arguments);
147
170
  };
148
171
  }();
149
172
  var verifyOtp = /*#__PURE__*/function () {
150
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
173
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
151
174
  var result, token, _t3, _t4;
152
175
  return _regenerator().w(function (_context2) {
153
176
  while (1) switch (_context2.p = _context2.n) {
@@ -189,8 +212,6 @@ var PowrVerify = function PowrVerify(_ref) {
189
212
  clearRecaptcha();
190
213
  setResendTimer(0);
191
214
  if (typeof onVerified === 'function') {
192
- // Pass token and projectId. Keep backward compatibility by
193
- // allowing consumers to accept a single token arg.
194
215
  try {
195
216
  onVerified(token, projectId);
196
217
  } catch (e) {
@@ -216,11 +237,11 @@ var PowrVerify = function PowrVerify(_ref) {
216
237
  }, _callee2, null, [[5, 7], [1, 9, 10, 11]]);
217
238
  }));
218
239
  return function verifyOtp() {
219
- return _ref3.apply(this, arguments);
240
+ return _ref4.apply(this, arguments);
220
241
  };
221
242
  }();
222
243
  (0, _react.useEffect)(function () {
223
- if (resendTimer <= 0) return;
244
+ if (resendTimer <= 0) return undefined;
224
245
  var id = setInterval(function () {
225
246
  setResendTimer(function (t) {
226
247
  if (t <= 1) {
@@ -254,23 +275,19 @@ var PowrVerify = function PowrVerify(_ref) {
254
275
  }
255
276
  }, "Tell us your phone and we'll send a one-time code."), /*#__PURE__*/_react["default"].createElement("label", {
256
277
  style: labelStyle
257
- }, "Phone number"), /*#__PURE__*/_react["default"].createElement("div", {
258
- style: phoneRowStyle
259
- }, /*#__PURE__*/_react["default"].createElement("div", {
260
- style: prefixBox
261
- }, defaultCountryCode), /*#__PURE__*/_react["default"].createElement("input", {
262
- type: "text",
263
- value: phone,
264
- onChange: function onChange(e) {
265
- return setPhone((e.target.value || '').replace(/\D/g, '').slice(0, 10));
266
- },
267
- placeholder: "0000000000",
268
- style: inputFlexStyle,
269
- disabled: otpSent
270
- })), !otpSent && /*#__PURE__*/_react["default"].createElement("button", {
278
+ }, "Phone number"), /*#__PURE__*/_react["default"].createElement(_PhoneInput["default"], {
279
+ value: localNumber,
280
+ country: phoneCountry,
281
+ onChange: handlePhoneChange,
282
+ international: international,
283
+ allowedCountries: allowedCountries,
284
+ defaultCountry: resolvedCountry,
285
+ disabled: otpSent,
286
+ placeholder: international ? 'Phone number' : 'Mobile number'
287
+ }), !otpSent && /*#__PURE__*/_react["default"].createElement("button", {
271
288
  onClick: sendOtp,
272
289
  style: buttonStyle,
273
- disabled: loading || phone.replace(/\D/g, '').length < 10
290
+ disabled: loading || !phoneValid
274
291
  }, loading ? 'Sending...' : 'Send OTP'), otpSent && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
275
292
  style: _objectSpread(_objectSpread({}, labelStyle), {}, {
276
293
  marginTop: 12
@@ -352,14 +369,6 @@ var phoneRowStyle = {
352
369
  alignItems: 'center',
353
370
  width: '100%'
354
371
  };
355
- var prefixBox = {
356
- background: '#fff7ed',
357
- color: '#7c2d12',
358
- padding: '10px 12px',
359
- borderRadius: 8,
360
- fontWeight: 700,
361
- border: '1px solid #ffedd5'
362
- };
363
372
  var inputFlexStyle = {
364
373
  flex: 1,
365
374
  padding: 10,
@@ -372,14 +381,6 @@ var labelStyle = {
372
381
  fontWeight: 600,
373
382
  marginBottom: 6
374
383
  };
375
- var inputStyle = {
376
- width: '100%',
377
- padding: 10,
378
- borderRadius: 8,
379
- border: '1px solid #e5e7eb',
380
- marginBottom: 12,
381
- boxSizing: 'border-box'
382
- };
383
384
  var buttonStyle = {
384
385
  width: '100%',
385
386
  padding: 12,
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.decodeJwtPayload = decodeJwtPayload;
7
+ exports.isAuthSessionError = isAuthSessionError;
8
+ exports.isJwtExpired = isJwtExpired;
9
+ function decodeJwtPayload(token) {
10
+ if (!token || typeof token !== 'string') return null;
11
+ try {
12
+ var parts = token.split('.');
13
+ if (parts.length < 2) return null;
14
+ var base64 = parts[1].replace(/-/g, '+').replace(/_/g, '/');
15
+ var padded = base64.padEnd(base64.length + (4 - base64.length % 4) % 4, '=');
16
+ var json = atob(padded);
17
+ return JSON.parse(json);
18
+ } catch (_unused) {
19
+ return null;
20
+ }
21
+ }
22
+ function isJwtExpired(token) {
23
+ var leewaySeconds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 30;
24
+ var payload = decodeJwtPayload(token);
25
+ if (!(payload !== null && payload !== void 0 && payload.exp)) return false;
26
+ var now = Math.floor(Date.now() / 1000);
27
+ return payload.exp <= now + leewaySeconds;
28
+ }
29
+ function isAuthSessionError(message) {
30
+ if (!message || typeof message !== 'string') return false;
31
+ var lower = message.toLowerCase();
32
+ return lower.includes('jwt expired') || lower.includes('invalid token') || lower.includes('no authorization token') || lower.includes('no token provided');
33
+ }