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
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
});
|
package/dist/onboarding/utils.js
CHANGED
|
@@ -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
|
|
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
|
|
177
|
-
return
|
|
249
|
+
function refreshAccessToken(_x4) {
|
|
250
|
+
return _refreshAccessToken.apply(this, arguments);
|
|
178
251
|
}
|
|
179
|
-
function
|
|
180
|
-
|
|
181
|
-
var apiUrl, projectId,
|
|
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,
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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: '
|
|
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(
|
|
277
|
+
body: JSON.stringify({
|
|
278
|
+
refreshToken: refreshToken
|
|
279
|
+
})
|
|
196
280
|
});
|
|
197
|
-
case
|
|
281
|
+
case 2:
|
|
198
282
|
response = _context3.v;
|
|
199
|
-
_context3.n =
|
|
283
|
+
_context3.n = 3;
|
|
200
284
|
return response.json()["catch"](function () {
|
|
201
285
|
return {};
|
|
202
286
|
});
|
|
203
|
-
case
|
|
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:
|
|
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
|
}
|
package/dist/powrVerify/index.js
CHANGED
|
@@ -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 ?
|
|
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
|
|
43
|
+
var resolvedCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
|
|
44
|
+
var _useState = (0, _react.useState)(resolvedCountry),
|
|
35
45
|
_useState2 = _slicedToArray(_useState, 2),
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
phoneCountry = _useState2[0],
|
|
47
|
+
setPhoneCountry = _useState2[1];
|
|
38
48
|
var _useState3 = (0, _react.useState)(''),
|
|
39
49
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
localNumber = _useState4[0],
|
|
51
|
+
setLocalNumber = _useState4[1];
|
|
42
52
|
var _useState5 = (0, _react.useState)(false),
|
|
43
53
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
var _useState7 = (0, _react.useState)(
|
|
54
|
+
phoneValid = _useState6[0],
|
|
55
|
+
setPhoneValid = _useState6[1];
|
|
56
|
+
var _useState7 = (0, _react.useState)(''),
|
|
47
57
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
var _useState9 = (0, _react.useState)(
|
|
58
|
+
e164 = _useState8[0],
|
|
59
|
+
setE164 = _useState8[1];
|
|
60
|
+
var _useState9 = (0, _react.useState)(''),
|
|
51
61
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
var _useState13 = (0, _react.useState)(
|
|
70
|
+
otpSent = _useState12[0],
|
|
71
|
+
setOtpSent = _useState12[1];
|
|
72
|
+
var _useState13 = (0, _react.useState)(null),
|
|
63
73
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
var
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
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 =
|
|
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
|
|
169
|
+
return _ref3.apply(this, arguments);
|
|
147
170
|
};
|
|
148
171
|
}();
|
|
149
172
|
var verifyOtp = /*#__PURE__*/function () {
|
|
150
|
-
var
|
|
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
|
|
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("
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
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 ||
|
|
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
|
+
}
|