bento-auth-js
Version:
Authentication library for web applications of Bento-Platform
45 lines (36 loc) • 1.59 kB
text/typescript
import type { JWTPayload } from "jose";
export const LS_OPENID_CONFIG_KEY = "BENTO_OPENID_CONFIG";
export const buildUrlEncodedData = (obj: object) =>
Object.entries(obj).reduce((params, [k, v]) => {
if (v === null || v === undefined) return params;
params.set(k, v.toString());
return params;
}, new URLSearchParams());
export const getIsAuthenticated = (idTokenContents: JWTPayload | null | undefined) =>
!!idTokenContents && idTokenContents.exp && Math.round(new Date().getTime() / 1000) < idTokenContents.exp;
export const makeAuthorizationHeader = (token: string | null | undefined): Record<string, string | never> =>
token ? { Authorization: `Bearer ${token}` } : {};
export const recursiveOrderedObject = (x: Record<string, unknown>): unknown => {
if (Array.isArray(x)) {
// Don't sort array, but DO make sure each nested object has sorted keys
return x.map((y) => recursiveOrderedObject(y));
} else if (typeof x === "object" && x !== null) {
return Object.keys(x)
.sort()
.reduce<Record<string, unknown>>((acc, y: string) => {
acc[y] = x[y];
return acc;
}, {});
} else {
return x; // Primitive
}
};
export const popLocalStorageItem = (key: string) => {
const val = localStorage.getItem(key);
localStorage.removeItem(key);
return val;
};
export const nop = () => {};
export const logMissingAuthContext = (...keys: string[]): void => {
console.error(`Missing Bento auth context: ${keys.join(" or ")}`);
};