import { sql } from 'bun'; import { ClaimDefinition } from '../utilities/claimDefinitions'; import { SecureId } from '../utilities/requestModels'; export class Claims extends ClaimDefinition { userId?: SecureId; claims: string[] = []; constructor(raw?:{userId?:string, claims?: string[]}) { super(); this.userId = raw?.userId ? SecureId.fromHash(raw.userId) : undefined; this.claims = raw?.claims ?? []; } public static test(guardClaim: string, userClaims?: Claims): Boolean { return userClaims === undefined || userClaims.claims.some((x) => x === guardClaim); } } export class ClaimsOrm { async getByUserId(userId: string): Promise { const dbResults: any[] = await sql`SELECT c.name from user_claims as uc JOIN claims as c on uc.claim_id = c.id where uc.user_id = ${userId};`; const claims = new Claims(); claims.userId = SecureId.fromID(userId); claims.claims = dbResults.map((x) => x.name); return claims; } async getDefaultClaims(): Promise { const dbResults: any[] = await sql`SELECT id FROM claims WHERE is_default = true;`; return dbResults.map((x) => x.id); } }