{"version":3,"sources":["jsdelivr-header.js","/npm/usermode@1.1.9/src/index.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,yHCNM,QAAU,OAAO,QAAU,CAAE,QAAO,SACpC,GAAK,QAAQ,QAAQ,MACrB,KAAO,QAAQ,QAAQ,QACT,IAAQ,QAAQ,aAAY,WAchD,SAAA,oBAAA,IAsGA,QAjGS,EAAA,KAAP,SAAY,GACL,GAAG,WAAW,IACjB,GAAG,cAAc,EAAU,MAE7B,KAAK,SAAW,EAChB,KAAK,MAAQ,KAAK,WAClB,KAAK,QAAU,KAAK,QAAQ,KAAK,SACnC,EAEe,EAAA,SAAf,WACE,OAAO,KAAK,MAAM,GAAG,aAAa,KAAK,UAAU,WACnD,EAEe,EAAA,UAAf,WACE,GAAG,cAAc,KAAK,SAAU,KAAK,UAAU,KAAK,OACtD,EAEO,EAAA,QAAP,SAAe,GACb,OAAO,KAAK,MAAM,EACpB,EAEO,EAAA,QAAP,SAAe,GACb,IAAM,EAAW,IAAI,EAAK,UAE1B,GAAI,KAAK,QAAQ,EAAK,UACpB,MAAM,IAAI,MAAM,aAAA,OAAa,EAAK,SAAQ,sBAW5C,OARA,KAAK,MAAM,EAAK,UAAY,CAC1B,SAAU,EAAK,SACf,SAAU,EACV,SAAU,EAAK,UAGjB,KAAK,YAEE,KAAK,MAAM,EAAK,SACzB,EAEO,EAAA,QAAP,SACE,EACA,GAMA,IAAM,EAAsB,KAAK,QAAQ,EAAK,UACxC,EAA8B,GAEpC,IAAK,EACH,MAAM,IAAI,MAAM,aAAA,OAAa,EAAK,SAAQ,sBAG5C,GAAI,EAAO,WAAa,EAAK,WAAa,EAAO,QAC/C,MAAM,IAAI,MAAM,aAAA,OAAa,EAAK,SAAQ,sBAQ5C,OALA,EAAK,SAAW,EAAO,SAAW,IAAI,EAAO,UAAY,EAAO,SAChE,EAAK,SAAW,EAAO,UAAY,EAAO,SAC1C,KAAK,MAAM,EAAK,WAAS,EAAA,QAAA,WAAA,EAAA,QAAA,UAAA,GAAQ,GAAI,CAAE,SAAU,EAAO,WACxD,KAAK,YAEE,KAAK,MAAM,EAAK,SACzB,EAEO,EAAA,QAAP,SAAe,GACb,IAAM,EAAW,KAAK,KAAK,KAAK,QAAS,GAMzC,OAJK,GAAG,WAAW,IACjB,GAAG,UAAU,GAGR,CACT,EAEO,EAAA,QAAP,SAAe,GACb,IAAM,EAAW,KAAK,KAAK,KAAK,QAAS,GAEzC,GAAI,GAAG,WAAW,GAChB,OAAO,CAEX,EAEO,EAAA,UAAP,SAAiB,EAAkB,GACjC,IAAM,EAAqB,KAAK,QAAQ,GAExC,IAAK,EACH,MAAM,IAAI,MAAM,aAAA,OAAa,EAAQ,sBAGvC,OAAI,EAAO,WAAa,IAAI,EAK9B,EACF,CAAA,CAtGA,GAwGS,QAAA","file":"/npm/usermode@1.1.9/src/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/usermode@1.1.9/src/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const _window = global.window || { require };\nconst fs = _window.require(\"fs\");\nconst path = _window.require(\"path\");\nconst { sha512_256: sha } = require(\"js-sha512\");\n\ninterface User {\n  readonly username: string;\n  readonly password: string;\n  fullname?: string;\n}\n\ninterface UserSettings {\n  username: string;\n  password: string;\n  fullname?: string;\n}\n\nclass Usermode {\n  private static filepath: string;\n  private static users: User;\n  static dirpath: string;\n\n  static init(filepath: string): void {\n    if (!fs.existsSync(filepath)) {\n      fs.writeFileSync(filepath, \"{}\");\n    }\n    this.filepath = filepath;\n    this.users = this.readFile();\n    this.dirpath = path.dirname(this.filepath);\n  }\n\n  private static readFile(): User {\n    return JSON.parse(fs.readFileSync(this.filepath).toString());\n  }\n\n  private static writeFile(): void {\n    fs.writeFileSync(this.filepath, JSON.stringify(this.users));\n  }\n\n  static getUser(username: string): User | void {\n    return this.users[username];\n  }\n\n  static addUser(user: User): User {\n    const passHash = sha(user.password);\n\n    if (this.getUser(user.username)) {\n      throw new Error(`Username \"${user.username}\" already exists!`);\n    }\n\n    this.users[user.username] = {\n      username: user.username,\n      password: passHash,\n      fullname: user.fullname,\n    };\n\n    this.writeFile();\n\n    return this.users[user.username];\n  }\n\n  static setUser(\n    user: User,\n    update: {\n      password?: string;\n      fullname?: string;\n      __force?: boolean;\n    }\n  ): User {\n    const dbUser: User | void = this.getUser(user.username);\n    const data: Partial<UserSettings> = {};\n\n    if (!dbUser) {\n      throw new Error(`Username \"${user.username}\" does not exist!`);\n    }\n\n    if (dbUser.password !== user.password && !update.__force) {\n      throw new Error(`Password \"${user.password}\" does not match!`);\n    }\n\n    data.password = update.password ? sha(update.password) : dbUser.password;\n    data.fullname = update.fullname || dbUser.fullname;\n    this.users[user.username] = { ...data, username: dbUser.username };\n    this.writeFile();\n\n    return this.users[user.username];\n  }\n\n  static setHome(username: string): string {\n    const homePath = path.join(this.dirpath, username);\n\n    if (!fs.existsSync(homePath)) {\n      fs.mkdirSync(homePath);\n    }\n\n    return homePath;\n  }\n\n  static getHome(username: string): string | void {\n    const homePath = path.join(this.dirpath, username);\n\n    if (fs.existsSync(homePath)) {\n      return homePath;\n    }\n  }\n\n  static passMatch(username: string, password: string): boolean {\n    const dbUser: User| void = this.getUser(username);\n\n    if (!dbUser) {\n      throw new Error(`Username \"${username}\" does not exist!`);\n    }\n\n    if (dbUser.password !== sha(password)) {\n      return false;\n    }\n\n    return true;\n  }\n}\n\nexport { Usermode };\n"]}