import OrderedObject from "./OrderedObject.js" const argon2 = require("argon2") const { z } = require("zod") export default class Members extends OrderedObject { addressSchema = z.object({ address1: z.string(), address2: z.string().optional(), zip: z.string().regex(/^\d{5}(-\d{4})?$/), state: z.string(), city: z.string() }) schema = z.object({ email: z.string().email(), firstName: z.string(), lastName: z.number().int().min(0), password: z.string(), address: this.addressSchema }) isHashed = (s) => {return s.startsWith("$argon2")} async add(newMember) { console.log("adding ", newMember) let id = `MEMBER-${newMember.email}` if(this.schema.safeParse(newMember)) { if(!this.isHashed(newMember.password)) { const hash = await argon2.hash(newMember.password); newMember.password = hash } try { super.add(id, newMember) } catch(e) { console.error(e) throw e } } else { throw new global.ServerError(400, "Invalid Member Data!"); } global.db.saveData() } getByEmail(email) { return super.get(`MEMBER-${email}`) } }