Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 42x 42x 22x 20x 20x 20x 20x 20x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { TokenInterface, TokenInterfaceEncodedObject } from './types';
import base64url from './base64url';
export function decodeToken(
token: string | TokenInterface | TokenInterfaceEncodedObject
): TokenInterface | undefined {
if (typeof token === 'string') {
// decompose the token into parts
const tokenParts = token.split('.');
const header = JSON.parse(base64url.decode(tokenParts[0]));
const payload = JSON.parse(base64url.decode(tokenParts[1]));
const signature = tokenParts[2];
// return the token object
return {
header,
payload,
signature,
};
} else if (typeof token === 'object') {
if (typeof token.payload !== 'string') {
throw new Error('Expected token payload to be a base64 or json string');
}
let payload = token.payload;
if (token.payload[0] !== '{') {
payload = base64url.decode(payload);
}
const allHeaders: any = [];
(token.header as any).map((headerValue: string) => {
const header = JSON.parse(base64url.decode(headerValue));
allHeaders.push(header);
});
return {
header: allHeaders,
payload: JSON.parse(payload),
signature: token.signature,
};
}
}
|