teko-oauth2
Version:
Teko Identity OAuth 2 Javascript Library for Web App Client
98 lines (71 loc) • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.delay = exports.removeTrailingSlash = exports.currentLocation = exports.createS256CodeChallenge = exports.decodeToken = exports.isExpired = exports.currentTimestamp = exports.randomString = void 0;
var _encBase = _interopRequireDefault(require("crypto-js/enc-base64"));
var _sha = _interopRequireDefault(require("crypto-js/sha256"));
var _jwtDecode = _interopRequireDefault(require("jwt-decode"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
// eslint-disable-next-line sort-imports
var randomString = function randomString() {
var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 48;
var text = '';
var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._';
for (var i = 0; i < length; i++) {
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
};
exports.randomString = randomString;
var currentTimestamp = function currentTimestamp() {
return parseInt(Date.now() / 1000);
};
exports.currentTimestamp = currentTimestamp;
var isExpired = function isExpired(timestamp) {
var leeway = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
var now = currentTimestamp();
return now > timestamp - leeway;
};
exports.isExpired = isExpired;
var decodeToken = function decodeToken(token) {
return (0, _jwtDecode["default"])(token);
};
exports.decodeToken = decodeToken;
var createS256CodeChallenge = function createS256CodeChallenge(codeVerifier) {
return _encBase["default"].stringify((0, _sha["default"])(codeVerifier)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
};
exports.createS256CodeChallenge = createS256CodeChallenge;
var currentLocation = function currentLocation() {
var _window$location = window.location,
href = _window$location.href,
search = _window$location.search;
var url = new URL(href);
if (search.includes('error')) {
url.searchParams["delete"]('error');
}
var location = removeTrailingSlash(url.href);
return location;
};
exports.currentLocation = currentLocation;
var removeTrailingSlash = function removeTrailingSlash(string) {
try {
var url = new URL(string);
var origin = url.origin,
pathname = url.pathname,
search = url.search;
if (pathname.endsWith('/')) {
return "".concat(origin).concat(pathname.substring(0, pathname.length - 1)).concat(search);
}
return url.href;
} catch (err) {
return string;
}
};
exports.removeTrailingSlash = removeTrailingSlash;
var delay = function delay(ms) {
return new Promise(function (resolve) {
return setTimeout(resolve, ms);
});
};
exports.delay = delay;