bam-ticketing-sdk
Version:
SDK for B.A.M Ticketing API
60 lines (53 loc) • 1.37 kB
text/typescript
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
}
}