react-oauth2
Version:
    • 30.8 kB
JavaScript
import React from 'react';
function asyncGeneratorStep(n, t, e, r, o, a, c) {
try {
var i = n[a](c),
u = i.value;
} catch (n) {
return void e(n);
}
i.done ? t(u) : Promise.resolve(u).then(r, o);
}
function _asyncToGenerator(n) {
return function () {
var t = this,
e = arguments;
return new Promise(function (r, o) {
var a = n.apply(t, e);
function _next(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
}
function _throw(n) {
asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
}
_next(void 0);
});
};
}
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (e.includes(n)) continue;
t[n] = r[n];
}
return t;
}
function _regeneratorRuntime() {
_regeneratorRuntime = function () {
return e;
};
var t,
e = {},
r = Object.prototype,
n = r.hasOwnProperty,
o = Object.defineProperty || function (t, e, r) {
t[e] = r.value;
},
i = "function" == typeof Symbol ? Symbol : {},
a = i.iterator || "@@iterator",
c = i.asyncIterator || "@@asyncIterator",
u = i.toStringTag || "@@toStringTag";
function define(t, e, r) {
return Object.defineProperty(t, e, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}), t[e];
}
try {
define({}, "");
} catch (t) {
define = function (t, e, r) {
return t[e] = r;
};
}
function wrap(t, e, r, n) {
var i = e && e.prototype instanceof Generator ? e : Generator,
a = Object.create(i.prototype),
c = new Context(n || []);
return o(a, "_invoke", {
value: makeInvokeMethod(t, r, c)
}), a;
}
function tryCatch(t, e, r) {
try {
return {
type: "normal",
arg: t.call(e, r)
};
} catch (t) {
return {
type: "throw",
arg: t
};
}
}
e.wrap = wrap;
var h = "suspendedStart",
l = "suspendedYield",
f = "executing",
s = "completed",
y = {};
function Generator() {}
function GeneratorFunction() {}
function GeneratorFunctionPrototype() {}
var p = {};
define(p, a, function () {
return this;
});
var d = Object.getPrototypeOf,
v = d && d(d(values([])));
v && v !== r && n.call(v, a) && (p = v);
var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
function defineIteratorMethods(t) {
["next", "throw", "return"].forEach(function (e) {
define(t, e, function (t) {
return this._invoke(e, t);
});
});
}
function AsyncIterator(t, e) {
function invoke(r, o, i, a) {
var c = tryCatch(t[r], t, o);
if ("throw" !== c.type) {
var u = c.arg,
h = u.value;
return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) {
invoke("next", t, i, a);
}, function (t) {
invoke("throw", t, i, a);
}) : e.resolve(h).then(function (t) {
u.value = t, i(u);
}, function (t) {
return invoke("throw", t, i, a);
});
}
a(c.arg);
}
var r;
o(this, "_invoke", {
value: function (t, n) {
function callInvokeWithMethodAndArg() {
return new e(function (e, r) {
invoke(t, n, e, r);
});
}
return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
});
}
function makeInvokeMethod(e, r, n) {
var o = h;
return function (i, a) {
if (o === f) throw Error("Generator is already running");
if (o === s) {
if ("throw" === i) throw a;
return {
value: t,
done: !0
};
}
for (n.method = i, n.arg = a;;) {
var c = n.delegate;
if (c) {
var u = maybeInvokeDelegate(c, n);
if (u) {
if (u === y) continue;
return u;
}
}
if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) {
if (o === h) throw o = s, n.arg;
n.dispatchException(n.arg);
} else "return" === n.method && n.abrupt("return", n.arg);
o = f;
var p = tryCatch(e, r, n);
if ("normal" === p.type) {
if (o = n.done ? s : l, p.arg === y) continue;
return {
value: p.arg,
done: n.done
};
}
"throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg);
}
};
}
function maybeInvokeDelegate(e, r) {
var n = r.method,
o = e.iterator[n];
if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y;
var i = tryCatch(o, e.iterator, r.arg);
if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y;
var a = i.arg;
return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y);
}
function pushTryEntry(t) {
var e = {
tryLoc: t[0]
};
1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e);
}
function resetTryEntry(t) {
var e = t.completion || {};
e.type = "normal", delete e.arg, t.completion = e;
}
function Context(t) {
this.tryEntries = [{
tryLoc: "root"
}], t.forEach(pushTryEntry, this), this.reset(!0);
}
function values(e) {
if (e || "" === e) {
var r = e[a];
if (r) return r.call(e);
if ("function" == typeof e.next) return e;
if (!isNaN(e.length)) {
var o = -1,
i = function next() {
for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next;
return next.value = t, next.done = !0, next;
};
return i.next = i;
}
}
throw new TypeError(typeof e + " is not iterable");
}
return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
value: GeneratorFunctionPrototype,
configurable: !0
}), o(GeneratorFunctionPrototype, "constructor", {
value: GeneratorFunction,
configurable: !0
}), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) {
var e = "function" == typeof t && t.constructor;
return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name));
}, e.mark = function (t) {
return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t;
}, e.awrap = function (t) {
return {
__await: t
};
}, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () {
return this;
}), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) {
void 0 === i && (i = Promise);
var a = new AsyncIterator(wrap(t, r, n, o), i);
return e.isGeneratorFunction(r) ? a : a.next().then(function (t) {
return t.done ? t.value : a.next();
});
}, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () {
return this;
}), define(g, "toString", function () {
return "[object Generator]";
}), e.keys = function (t) {
var e = Object(t),
r = [];
for (var n in e) r.push(n);
return r.reverse(), function next() {
for (; r.length;) {
var t = r.pop();
if (t in e) return next.value = t, next.done = !1, next;
}
return next.done = !0, next;
};
}, e.values = values, Context.prototype = {
constructor: Context,
reset: function (e) {
if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t);
},
stop: function () {
this.done = !0;
var t = this.tryEntries[0].completion;
if ("throw" === t.type) throw t.arg;
return this.rval;
},
dispatchException: function (e) {
if (this.done) throw e;
var r = this;
function handle(n, o) {
return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o;
}
for (var o = this.tryEntries.length - 1; o >= 0; --o) {
var i = this.tryEntries[o],
a = i.completion;
if ("root" === i.tryLoc) return handle("end");
if (i.tryLoc <= this.prev) {
var c = n.call(i, "catchLoc"),
u = n.call(i, "finallyLoc");
if (c && u) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
} else if (c) {
if (this.prev < i.catchLoc) return handle(i.catchLoc, !0);
} else {
if (!u) throw Error("try statement without catch or finally");
if (this.prev < i.finallyLoc) return handle(i.finallyLoc);
}
}
}
},
abrupt: function (t, e) {
for (var r = this.tryEntries.length - 1; r >= 0; --r) {
var o = this.tryEntries[r];
if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) {
var i = o;
break;
}
}
i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null);
var a = i ? i.completion : {};
return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a);
},
complete: function (t, e) {
if ("throw" === t.type) throw t.arg;
return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y;
},
finish: function (t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y;
}
},
catch: function (t) {
for (var e = this.tryEntries.length - 1; e >= 0; --e) {
var r = this.tryEntries[e];
if (r.tryLoc === t) {
var n = r.completion;
if ("throw" === n.type) {
var o = n.arg;
resetTryEntry(r);
}
return o;
}
}
throw Error("illegal catch attempt");
},
delegateYield: function (e, r, n) {
return this.delegate = {
iterator: values(e),
resultName: r,
nextLoc: n
}, "next" === this.method && (this.arg = t), y;
}
}, e;
}
/**
* Initiates the OAuth2 flow by constructing the authorization URL
*/
function oauth2(config) {
var params = new URLSearchParams({
client_id: config.clientId,
redirect_uri: config.redirectUri,
scope: config.scope,
display: 'popup',
response_type: 'code'
});
// Add provider-specific parameters
if (config.authorizationUrl.includes('google')) {
params.append('access_type', 'offline');
params.append('prompt', 'select_account consent');
} else if (config.authorizationUrl.includes('facebook')) {
params.append('auth_type', 'rerequest');
}
return Promise.resolve({
url: config.authorizationUrl + "?" + params.toString(),
config: config
});
}
/**
* Opens a popup window for OAuth authentication
*/
function openPopup(_ref) {
var url = _ref.url,
config = _ref.config;
return new Promise(function (resolve) {
var width = config.width || 500;
var height = config.height || 500;
var options = {
width: width,
height: height,
top: window.screenY + (window.outerHeight - height) / 2.5,
left: window.screenX + (window.outerWidth - width) / 2
};
var optionsString = Object.entries(options).map(function (_ref2) {
var key = _ref2[0],
value = _ref2[1];
return key + "=" + value;
}).join(',');
var popup = window.open(url, '_blank', optionsString);
if (popup && url === 'about:blank') {
popup.document.body.innerHTML = 'Loading...';
}
resolve({
window: popup,
config: config
});
});
}
/**
* Polls the popup window for OAuth completion
*/
function pollPopup(_ref3) {
var popupWindow = _ref3.window,
config = _ref3.config,
requestToken = _ref3.requestToken;
return new Promise(function (resolve, reject) {
if (requestToken) {
var params = new URLSearchParams(requestToken);
popupWindow.location.href = config.authorizationUrl + "?" + params.toString();
}
var polling = setInterval(function () {
if (!popupWindow || popupWindow.closed) {
clearInterval(polling);
reject(new Error('Popup window was closed'));
return;
}
try {
// Check if we're on the redirect URL
var currentUrl = popupWindow.location.href;
var isRedirectUrl = currentUrl.startsWith(config.redirectUri);
if (isRedirectUrl) {
var searchParams = new URLSearchParams(popupWindow.location.search.substring(1).replace(/\/$/, ''));
var hashParams = new URLSearchParams(popupWindow.location.hash.substring(1).replace(/[\/$]/, ''));
var _params = {};
[searchParams, hashParams].forEach(function (paramSet) {
paramSet.forEach(function (value, key) {
_params[key] = value;
});
});
if (_params.error) {
clearInterval(polling);
reject({
error: _params.error
});
return;
}
if (Object.keys(_params).length === 0) {
clearInterval(polling);
reject({
error: 'OAuth redirect has occurred but no query or hash parameters were found.'
});
return;
}
clearInterval(polling);
resolve({
oauthData: _params,
config: config,
window: popupWindow,
// @ts-expect-error
interval: polling
});
}
} catch (error) {
// Ignore cross-origin frame access errors
}
}, 500);
});
}
function handleCallback(_x) {
return _handleCallback.apply(this, arguments);
}
function _handleCallback() {
_handleCallback = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
var window, interval, profile;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
window = _ref.window, interval = _ref.interval, profile = _ref.profile;
// Close the popup window
if (window && !window.closed) {
window.close();
}
// Clear the polling interval
if (interval) {
clearInterval(interval);
}
return _context.abrupt("return", {
profile: profile
});
case 4:
case "end":
return _context.stop();
}
}, _callee);
}));
return _handleCallback.apply(this, arguments);
}
function facebookLogin(_x2) {
return _facebookLogin.apply(this, arguments);
}
function _facebookLogin() {
_facebookLogin = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(facebook) {
var popup, profile;
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
while (1) switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return oauth2(facebook).then(openPopup).then(pollPopup);
case 3:
popup = _context2.sent;
_context2.next = 6;
return exchangeFacebookCodeForToken(popup);
case 6:
profile = _context2.sent;
return _context2.abrupt("return", handleCallback(profile));
case 10:
_context2.prev = 10;
_context2.t0 = _context2["catch"](0);
console.error('Facebook login error:', _context2.t0);
throw _context2.t0;
case 14:
case "end":
return _context2.stop();
}
}, _callee2, null, [[0, 10]]);
}));
return _facebookLogin.apply(this, arguments);
}
function exchangeFacebookCodeForToken(_x3) {
return _exchangeFacebookCodeForToken.apply(this, arguments);
}
function _exchangeFacebookCodeForToken() {
_exchangeFacebookCodeForToken = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref2) {
var oauthData, config, window, interval, data, FB_API_VERSION, accessTokenUrl, tokenParams, tokenResponse, graphApiUrl, profileParams, profile;
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
while (1) switch (_context3.prev = _context3.next) {
case 0:
oauthData = _ref2.oauthData, config = _ref2.config, window = _ref2.window, interval = _ref2.interval;
data = _extends({}, oauthData, config);
FB_API_VERSION = 'v18.0';
accessTokenUrl = "https://graph.facebook.com/" + FB_API_VERSION + "/oauth/access_token";
tokenParams = new URLSearchParams({
code: data.code,
client_id: data.clientId,
client_secret: data.clientSecret,
redirect_uri: data.redirectUri
});
_context3.next = 7;
return fetch(accessTokenUrl + "?" + tokenParams).then(function (res) {
if (!res.ok) throw new Error("Token request failed: " + res.statusText);
return res.json();
});
case 7:
tokenResponse = _context3.sent;
if (!('error' in tokenResponse)) {
_context3.next = 10;
break;
}
throw new Error(tokenResponse.error);
case 10:
graphApiUrl = "https://graph.facebook.com/" + FB_API_VERSION + "/me";
profileParams = new URLSearchParams({
fields: data.scope,
access_token: tokenResponse.access_token
});
_context3.next = 14;
return fetch(graphApiUrl + "?" + profileParams).then(function (res) {
if (!res.ok) throw new Error("Profile request failed: " + res.statusText);
return res.json();
});
case 14:
profile = _context3.sent;
if (!('error' in profile)) {
_context3.next = 17;
break;
}
throw new Error(profile.error);
case 17:
return _context3.abrupt("return", {
window: window,
interval: interval,
profile: profile
});
case 18:
case "end":
return _context3.stop();
}
}, _callee3);
}));
return _exchangeFacebookCodeForToken.apply(this, arguments);
}
function googleLogin(_x4) {
return _googleLogin.apply(this, arguments);
}
function _googleLogin() {
_googleLogin = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4(google) {
var popup, profile;
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
while (1) switch (_context4.prev = _context4.next) {
case 0:
_context4.prev = 0;
_context4.next = 3;
return oauth2(google).then(openPopup).then(pollPopup);
case 3:
popup = _context4.sent;
_context4.next = 6;
return exchangeGoogleCodeForToken(popup);
case 6:
profile = _context4.sent;
return _context4.abrupt("return", handleCallback(profile));
case 10:
_context4.prev = 10;
_context4.t0 = _context4["catch"](0);
console.error('Google login error:', _context4.t0);
throw _context4.t0;
case 14:
case "end":
return _context4.stop();
}
}, _callee4, null, [[0, 10]]);
}));
return _googleLogin.apply(this, arguments);
}
function exchangeGoogleCodeForToken(_x5) {
return _exchangeGoogleCodeForToken.apply(this, arguments);
}
function _exchangeGoogleCodeForToken() {
_exchangeGoogleCodeForToken = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee5(_ref3) {
var oauthData, config, window, interval, data, accessTokenUrl, userInfoUrl, tokenResponse, profile;
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
while (1) switch (_context5.prev = _context5.next) {
case 0:
oauthData = _ref3.oauthData, config = _ref3.config, window = _ref3.window, interval = _ref3.interval;
data = _extends({}, oauthData, config);
accessTokenUrl = 'https://oauth2.googleapis.com/token';
userInfoUrl = 'https://openidconnect.googleapis.com/v1/userinfo';
_context5.next = 6;
return fetch(accessTokenUrl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
code: data.code,
client_id: data.clientId,
client_secret: data.clientSecret,
redirect_uri: data.redirectUri,
grant_type: 'authorization_code'
})
}).then(function (res) {
if (!res.ok) throw new Error("Token request failed: " + res.statusText);
return res.json();
});
case 6:
tokenResponse = _context5.sent;
if (!('error' in tokenResponse)) {
_context5.next = 9;
break;
}
throw new Error(tokenResponse.error);
case 9:
_context5.next = 11;
return fetch(userInfoUrl, {
headers: {
'Authorization': "Bearer " + tokenResponse.access_token
}
}).then(function (res) {
if (!res.ok) throw new Error("Profile request failed: " + res.statusText);
return res.json();
});
case 11:
profile = _context5.sent;
if (!('error' in profile)) {
_context5.next = 14;
break;
}
throw new Error(profile.error);
case 14:
return _context5.abrupt("return", {
window: window,
interval: interval,
profile: profile
});
case 15:
case "end":
return _context5.stop();
}
}, _callee5);
}));
return _exchangeGoogleCodeForToken.apply(this, arguments);
}
var _excluded = ["url", "clientId", "clientSecret", "redirectUri", "authorizationUrl", "scope", "width", "height", "className", "style", "disabled", "children", "callback"];
var BUTTON_PROPS = ['style', 'className', 'disabled'];
var FacebookOauth2 = function FacebookOauth2(_ref) {
var _ref$url = _ref.url,
url = _ref$url === void 0 ? 'http://localhost:3000/' : _ref$url,
clientId = _ref.clientId,
clientSecret = _ref.clientSecret,
_ref$redirectUri = _ref.redirectUri,
redirectUri = _ref$redirectUri === void 0 ? 'http://localhost:3000/' : _ref$redirectUri,
_ref$authorizationUrl = _ref.authorizationUrl,
authorizationUrl = _ref$authorizationUrl === void 0 ? 'https://www.facebook.com/v18.0/dialog/oauth' : _ref$authorizationUrl,
_ref$scope = _ref.scope,
scope = _ref$scope === void 0 ? 'email,public_profile' : _ref$scope,
_ref$width = _ref.width,
width = _ref$width === void 0 ? 580 : _ref$width,
_ref$height = _ref.height,
height = _ref$height === void 0 ? 400 : _ref$height,
className = _ref.className,
style = _ref.style,
disabled = _ref.disabled,
children = _ref.children,
callback = _ref.callback,
props = _objectWithoutPropertiesLoose(_ref, _excluded);
var getButtonAttributes = function getButtonAttributes() {
var buttonProps = {};
BUTTON_PROPS.forEach(function (prop) {
// @ts-expect-error
var value = props[prop];
if (value !== undefined) {
buttonProps[prop] = value;
}
});
return buttonProps;
};
var handleClick = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var config, result;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
config = {
url: url,
clientId: clientId,
clientSecret: clientSecret,
redirectUri: redirectUri,
authorizationUrl: authorizationUrl,
scope: scope,
width: width,
height: height
};
_context.next = 4;
return facebookLogin(config);
case 4:
result = _context.sent;
callback(null, result);
_context.next = 11;
break;
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](0);
callback(_context.t0 instanceof Error ? _context.t0 : new Error('Facebook login failed'), null);
case 11:
case "end":
return _context.stop();
}
}, _callee, null, [[0, 8]]);
}));
return function handleClick() {
return _ref2.apply(this, arguments);
};
}();
return React.createElement("button", Object.assign({
type: "button"
}, getButtonAttributes(), {
className: "facebook-oauth-button " + (className || ''),
style: _extends({
display: 'inline-flex',
alignItems: 'center',
justifyContent: 'center',
padding: '8px 16px',
fontSize: '14px',
fontWeight: 500,
border: 'none',
borderRadius: '4px',
backgroundColor: '#1877f2',
color: 'white',
cursor: disabled ? 'not-allowed' : 'pointer',
opacity: disabled ? 0.7 : 1,
transition: 'background-color 0.2s ease'
}, style),
onClick: handleClick,
disabled: disabled
}), children);
};
var _excluded$1 = ["url", "clientId", "clientSecret", "redirectUri", "authorizationUrl", "scope", "width", "height", "className", "style", "disabled", "children", "callback"];
var BUTTON_PROPS$1 = ['style', 'className', 'disabled'];
var DEFAULT_SCOPES = ['openid', 'email', 'profile'];
var GoogleOauth2 = function GoogleOauth2(_ref) {
var _ref$url = _ref.url,
url = _ref$url === void 0 ? 'http://localhost:3000/' : _ref$url,
clientId = _ref.clientId,
clientSecret = _ref.clientSecret,
_ref$redirectUri = _ref.redirectUri,
redirectUri = _ref$redirectUri === void 0 ? 'http://localhost:3000/' : _ref$redirectUri,
_ref$authorizationUrl = _ref.authorizationUrl,
authorizationUrl = _ref$authorizationUrl === void 0 ? 'https://accounts.google.com/o/oauth2/v2/auth' : _ref$authorizationUrl,
_ref$scope = _ref.scope,
scope = _ref$scope === void 0 ? DEFAULT_SCOPES : _ref$scope,
_ref$width = _ref.width,
width = _ref$width === void 0 ? 580 : _ref$width,
_ref$height = _ref.height,
height = _ref$height === void 0 ? 400 : _ref$height,
className = _ref.className,
style = _ref.style,
disabled = _ref.disabled,
children = _ref.children,
callback = _ref.callback,
props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
var getButtonAttributes = function getButtonAttributes() {
var buttonProps = {};
BUTTON_PROPS$1.forEach(function (prop) {
// @ts-expect-error
var value = props[prop];
if (value !== undefined) {
buttonProps[prop] = value;
}
});
return buttonProps;
};
var handleClick = /*#__PURE__*/function () {
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
var config, result;
return _regeneratorRuntime().wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
config = {
url: url,
clientId: clientId,
clientSecret: clientSecret,
redirectUri: redirectUri,
authorizationUrl: authorizationUrl,
scope: Array.isArray(scope) ? scope.join(' ') : scope,
width: width,
height: height
};
_context.next = 4;
return googleLogin(config);
case 4:
result = _context.sent;
callback(null, result);
_context.next = 11;
break;
case 8:
_context.prev = 8;
_context.t0 = _context["catch"](0);
callback(_context.t0 instanceof Error ? _context.t0 : new Error('Google login failed'), null);
case 11:
case "end":
return _context.stop();
}
}, _callee, null, [[0, 8]]);
}));
return function handleClick() {
return _ref2.apply(this, arguments);
};
}();
return React.createElement("button", Object.assign({
type: "button"
}, getButtonAttributes(), {
className: "google-oauth-button " + (className || ''),
style: _extends({
display: 'inline-flex',
alignItems: 'center',
justifyContent: 'center',
padding: '8px 16px',
fontSize: '14px',
fontWeight: 500,
border: '1px solid #dadce0',
borderRadius: '4px',
backgroundColor: 'white',
color: '#3c4043',
cursor: disabled ? 'not-allowed' : 'pointer',
opacity: disabled ? 0.7 : 1,
transition: 'background-color 0.2s ease, box-shadow 0.2s ease',
boxShadow: '0 1px 2px rgba(0, 0, 0, 0.1)'
}, style),
onClick: handleClick,
disabled: disabled
}), children);
};
export { FacebookOauth2, GoogleOauth2 };
//# sourceMappingURL=react-oauth2.esm.js.map