diff --git a/src/utils/is-jwt.ts b/src/utils/is-jwt.ts new file mode 100644 index 0000000000..efc82a7ac1 --- /dev/null +++ b/src/utils/is-jwt.ts @@ -0,0 +1,31 @@ +import atob from 'atob'; + +/** + * Check if a given string conforms to the structure of a JWT. + */ +export default function isJWT(string: string) { + const parts = string.split('.'); + + // JWTs have the structure header.payload.signature + if (parts.length !== 3) return false; + + // Check if all segments are base64 encoded + try { + atob(parts[0]); + atob(parts[1]); + atob(parts[2]); + } catch (err) { + console.log(err); + return false; + } + + // Check if the header and payload are valid JSON + try { + JSON.parse(atob(parts[0])); + JSON.parse(atob(parts[1])); + } catch { + return false; + } + + return true; +}