UNPKG

bam-ticketing-sdk

Version:

SDK for B.A.M Ticketing API

60 lines (53 loc) 1.37 kB
import { Jwt } from '../auth' interface CommonPayload { exp: number iat?: number } export enum UserType { Registered = 'registered', Anonymous = 'anon', Guest = 'guest', } export interface UserPayload extends CommonPayload { username: string verified: boolean id: number device_id?: string impersonated_by?: number permissions: CompletePermissions enrollment_id?: string enrolled?: boolean type: UserType } export type CompletePermissions = { [key: string]: PerOrgPermissions } export type PerOrgPermissions = { [key: string]: string[] } export function extractOrganizersFromJwt(jwt: Jwt) { const payload = getParsedJwt(jwt.token) if (payload?.permissions != null) { return Object.keys(payload?.permissions) } return [] } /** * Returns a JS object representation of a Javascript Web Token from its common encoded * string form. * * @template T the expected shape of the parsed token * @param {string} token a Javascript Web Token in base64 encoded, `.` separated form * @returns {(T | undefined)} an object-representation of the token * or undefined if parsing failed */ export function getParsedJwt< T extends object = { [k: string]: string | number } >(token: string): T | undefined { try { // TODO: Don't use atob if the code is running on node return JSON.parse(atob(token.split('.')[1])) } catch { return undefined } }