react-discord-login
Version:
A React component for easy integration of 'Sign in with Discord' functionality into web applications
95 lines • 3.35 kB
JavaScript
import { __awaiter, __generator } from "tslib";
export var normalizeDiscordConfig = function (_a) {
var clientId = _a.clientId, uri = _a.redirectUri, type = _a.responseType, scopesArray = _a.scopes;
var redirectUri = uri || window.location.origin;
var responseType = type || 'code';
var scopes = scopesArray || ['identify'];
return {
clientId: clientId,
redirectUri: redirectUri,
responseType: responseType,
scopes: scopes,
};
};
export var generateUrl = function (_a) {
var clientId = _a.clientId, redirectUri = _a.redirectUri, responseType = _a.responseType, scopes = _a.scopes;
var searchParams = new URLSearchParams();
searchParams.append('client_id', clientId);
searchParams.append('response_type', responseType);
searchParams.append('redirect_uri', redirectUri);
searchParams.append('scope', scopes.join(' '));
return 'https://discord.com/api/oauth2/authorize?' + searchParams.toString();
};
var getQueryAndHash = function () {
var params = new URLSearchParams();
var query = new URLSearchParams(window.location.search);
query.forEach(function (value, key) {
params.set(key, value);
});
var fragment = new URLSearchParams(window.location.hash.slice(1));
fragment.forEach(function (value, key) {
params.set(key, value);
});
return params;
};
export var getCallbackResponse = function () {
var params = getQueryAndHash();
var error = params.get('error');
var error_description = params.get('error_description');
var token_type = params.get('token_type');
var code = params.get('code');
if (error || error_description) {
return {
type: 'error',
error: {
error: String(error),
description: String(error_description),
},
};
}
if (token_type) {
return {
type: 'token',
token: {
token_type: String(token_type),
access_token: String(params.get('access_token')),
expires_in: Number(params.get('expires_in')),
scope: String(params.get('scope')).split(' '),
},
};
}
if (code) {
return {
type: 'code',
code: {
code: String(code),
},
};
}
return {
type: null,
};
};
export var fetchUser = function (token) { return __awaiter(void 0, void 0, void 0, function () {
var result;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fetch('https://discord.com/api/users/@me', {
headers: {
authorization: "".concat(token.token_type, " ").concat(token.access_token),
},
})];
case 1:
result = _a.sent();
return [4 /*yield*/, result.json()];
case 2: return [2 /*return*/, (_a.sent())];
}
});
}); };
export var shouldHandleCallback = function () {
var params = getQueryAndHash();
var keys = Array.from(params.keys());
var targets = ['code', 'error', 'token_type'];
return targets.some(function (target) { return keys.includes(target); });
};
//# sourceMappingURL=utils.js.map