UNPKG

@humandialog/auth.svelte

Version:

Svelte package to deal with ObjectReef OAuth 2 Identity Provider

96 lines 2.76 kB
//import base64url from "base64url"; export class Token { _raw; header; payload; constructor(token, parse_as_jwt = true) { this._raw = token; if (!parse_as_jwt) return; let parts; parts = token.split('.'); let sheader = parts[0]; let spayload = parts[1]; sheader = this.decode_base64url(sheader); spayload = this.decode_base64url(spayload); this.header = JSON.parse(sheader); this.payload = JSON.parse(spayload); } get raw() { return this._raw; } get is_jwt() { if (this.header == undefined) return false; if (this.header == null) return false; if (this.header["typ"] === "JWT") return true; else return false; } get not_expired() { let exp; exp = this.get_claim("exp"); if (exp === undefined) return false; let margin_s = 2 * 60; // 2 min default let iat; iat = this.get_claim("iat"); if (iat) { const tokenDuration_min = (exp - iat) / 60; if (tokenDuration_min > 59) { margin_s = 5 * 60; // 5 min } else if (tokenDuration_min > 29) { margin_s = 3 * 60; // 3 min } else if (tokenDuration_min > 14) { margin_s = 2 * 60; // 2 min } else if (tokenDuration_min > 9) { margin_s = 1.5 * 60; // 1.5 min } else if (tokenDuration_min > 4) { margin_s = 60; // 1 min } else { margin_s = 15; // 15 sec } } const now = Math.floor(Date.now() / 1000); if (exp > now + margin_s) return true; return false; } get_claim(key) { if (this.payload == undefined) return undefined; if (this.payload == null) return undefined; let v; v = this.payload[key]; if (v === undefined) return undefined; return v; } decode_base64url(input) { let output = input; output = output.replace('-', '+'); output = output.replace('_', '/'); switch (output.length % 4) { case 0: break; case 2: output += "=="; break; case 3: output += "="; break; default: return ""; } return atob(output); } } //# sourceMappingURL=Token.js.map