esiil
Version:
Minimalist library for EVE Online's ESI
85 lines • 3.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports._reduceScope = exports._refreshTheToken = exports._processAuthToken = void 0;
const Token_1 = require("./helpers/Token");
const jose_1 = require("jose");
const defaults_1 = __importDefault(require("./defaults"));
async function _processAuthToken(authToken, ccpToken) {
const payload = `grant_type=authorization_code&code=${authToken}`;
return _handleTokens(await (0, Token_1._tokenExchange)(payload), ccpToken);
}
exports._processAuthToken = _processAuthToken;
async function _refreshTheToken(refreshToken, ccpToken) {
const payload = [
`grant_type=refresh_token`,
`refresh_token=${refreshToken}`,
`client_id=${defaults_1.default.clientID}`
].join('&');
return _handleTokens(await (0, Token_1._tokenRefresh)(payload), ccpToken);
}
exports._refreshTheToken = _refreshTheToken;
async function _reduceScope(refreshToken, ccpToken, updatedScopes) {
const payload = [
`grant_type=refresh_token`,
`refresh_token=${refreshToken}`,
`client_id=${defaults_1.default.clientID}`,
`scope=${encodeURIComponent(updatedScopes.join(' '))}`
].join('&');
return _handleTokens(await (0, Token_1._tokenRefresh)(payload), ccpToken);
}
exports._reduceScope = _reduceScope;
async function _handleTokens(rawSessionToken, ccpToken) {
try {
if (typeof rawSessionToken.body === 'string') {
throw new Error(`Not a valid object: ${rawSessionToken.body}`);
}
if ("access_token" in rawSessionToken.body) {
const verification = await _doVerify(ccpToken, rawSessionToken.body.access_token);
if (verification.iss == 'login.eveonline.com') {
const safeCharId = Number(verification.sub?.split(':')[2]);
if (safeCharId && typeof verification.owner === 'string') {
const completeTokenData = {
character: safeCharId,
owner: verification.owner,
...rawSessionToken.body
};
return completeTokenData;
}
else {
throw new Error("JWTPayload verification.sub.split(':')[2] not a valid number");
}
}
else {
throw new Error(`Could not verify JWT`);
}
}
}
catch (err) {
console.log('err');
console.log(err);
}
return {
access_token: '',
expires_in: 0,
token_type: '',
refresh_token: '',
character: 0,
owner: ''
};
}
async function _doVerify(ccpToken, accessToken) {
const ccpJwk = await (0, jose_1.importJWK)(_ccpToJwk(ccpToken), 'RS256');
const { payload, protectedHeader } = await (0, jose_1.jwtVerify)(accessToken, ccpJwk, {});
return payload;
}
function _ccpToJwk(token) {
return {
kty: token.kty,
e: token.e,
n: token.n
};
}
//# sourceMappingURL=indexHelper.js.map