{"version":3,"sources":["jsdelivr-header.js","/npm/@redningsselskapet/ad@0.3.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MAAM,gBAAkB,QAAQ,mBAC1B,WAAa,QAAQ,iBAErB,QAAU,CACd,KAAM,QAAQ,cACd,MAAO,QAAQ,eACf,GAAI,QAAQ,YACZ,OAAQ,QAAQ,gBAChB,QAAS,QAAQ,0BACjB,WAAY,QAAQ,6BACpB,UAAW,QAAQ,oBAGrB,MAAM,GACJ,WAAA,CAAY,GACV,QAAe,IAAX,EACF,MAAM,IAAI,MAAM,8BAKlB,IAFe,EAAO,MAAQ,EAAO,OAAS,EAAO,KAGnD,MAAM,IAAI,MACR,+DAIJ,IAA2C,IAAvC,OAAO,EAAO,KAAK,QAAQ,OAC7B,MAAM,IAAI,MACR,wEAIJ,IAA0C,IAAtC,OAAO,EAAO,MAAM,QAAQ,KAC9B,MAAM,IAAI,MACR,+EAIJ,EAAO,OAAS,OAAO,EAAO,MAAM,MAAM,KAAK,QAEzB,IAAlB,EAAO,SACT,EAAO,OAAS,EAAO,OAAO,MAAM,KAAK,KAAI,GAAK,MAAM,MAAK,KAAK,MAGpE,EAAS,OAAO,OAAO,WAAY,GAEnC,KAAK,OAAS,EAEd,KAAK,OAAS,CACZ,SAAS,EACT,WAAY,IACZ,MAAO,CAAC,EACR,OAAQ,CAAC,EACT,IAAK,CAAC,EACN,IAAK,CAAC,EACN,IAAK,CAAC,EAAM,KACV,IAAK,KAAK,OAAO,QACf,OAEF,IAAK,KAAK,OAAO,KAAU,KAAK,OAAO,GAAM,GAC3C,OAEF,IAAI,EAAM,KAAK,OAAO,GAAM,GAE5B,KADW,IAAI,KAAS,EAAI,UACjB,KAAK,OAAO,YAIvB,OAAO,EAAI,aAHF,KAAK,OAAO,GAAM,EAGX,EAElB,IAAK,CAAC,EAAM,EAAK,KACf,KAAK,OAAO,GAAM,GAAO,CACvB,UAAW,IAAI,KACf,QACD,GAIL,KAAK,GAAK,IAAI,gBAAgB,CAC5B,IAAK,EAAO,IACZ,OAAQ,EAAO,OACf,SAAU,EAAO,KACjB,SAAU,EAAO,KACjB,WAAY,CACV,oBAAoB,IAG1B,CAEA,KAAA,CAAM,GAEJ,OADA,KAAK,OAAO,QAAU,EACf,IACT,CAEA,YAAA,CAAa,GAEX,OADA,KAAK,OAAO,WAAa,EAClB,IACT,EAGF,MAAM,YAAc,KAClB,IAAK,MAAM,KAAO,QAAS,CACzB,IAAI,EAAO,QAAQ,GACnB,IAAK,MAAM,KAAM,EACf,GAAG,UAAU,GAAM,EAAK,EAE5B,GAGF,cAEA,OAAO,QAAU","file":"/npm/@redningsselskapet/ad@0.3.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@redningsselskapet/ad@0.3.1/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 activedirectory = require('activedirectory');\r\nconst configFile = require('./config.json');\r\n\r\nconst imports = {\r\n  user: require('./src/user'),\r\n  group: require('./src/group'),\r\n  ou: require('./src/ou'),\r\n  others: require('./src/others'),\r\n  helpers: require('./src/internal/helpers'),\r\n  operations: require('./src/internal/operations'),\r\n  chainable: require('./src/chainable')\r\n};\r\n\r\nclass AD {\r\n  constructor(config) {\r\n    if (config === undefined) {\r\n      throw new Error('Configuration is required.');\r\n    }\r\n\r\n    let invalid = !config.url || !config.user || !config.pass;\r\n\r\n    if (invalid) {\r\n      throw new Error(\r\n        'The following configuration is required: {url, user, pass}.'\r\n      );\r\n    }\r\n\r\n    if (String(config.url).indexOf('://') === -1) {\r\n      throw new Error(\r\n        'You must specify the protocol in the url, such as ldaps://127.0.0.1.'\r\n      );\r\n    }\r\n\r\n    if (String(config.user).indexOf('@') === -1) {\r\n      throw new Error(\r\n        'The user must include the fully qualified domain name, such as joe@acme.co.'\r\n      );\r\n    }\r\n\r\n    config.domain = String(config.user).split('@')[1];\r\n\r\n    if (config.baseDN === undefined) {\r\n      config.baseDN = config.domain.split('.').map(n => `DC=${n}`).join(',');\r\n    }\r\n\r\n    config = Object.assign(configFile, config);\r\n\r\n    this.config = config;\r\n\r\n    this._cache = {\r\n      enabled: true,\r\n      expiration: 600000,\r\n      users: {},\r\n      groups: {},\r\n      ous: {},\r\n      all: {},\r\n      get: (type, key) => {\r\n        if (!this._cache.enabled) {\r\n          return undefined;\r\n        }\r\n        if (!this._cache[type] || !this._cache[type][key]) {\r\n          return undefined;\r\n        }\r\n        let obj = this._cache[type][key];\r\n        let diff = new Date() - obj.timestamp;\r\n        if (diff > this._cache.expiration) {\r\n          delete this._cache[type][key];\r\n          return undefined;\r\n        }\r\n        return obj.value;\r\n      },\r\n      set: (type, key, value) => {\r\n        this._cache[type][key] = {\r\n          timestamp: new Date(),\r\n          value\r\n        };\r\n      }\r\n    };\r\n\r\n    this.ad = new activedirectory({\r\n      url: config.url,\r\n      baseDN: config.baseDN,\r\n      username: config.user,\r\n      password: config.pass,\r\n      tlsOptions: {\r\n        rejectUnauthorized: false\r\n      }\r\n    });\r\n  }\r\n\r\n  cache(bool) {\r\n    this._cache.enabled = bool;\r\n    return this;\r\n  }\r\n\r\n  cacheTimeout(millis) {\r\n    this._cache.expiration = millis;\r\n    return this;\r\n  }\r\n}\r\n\r\nconst loadImports = () => {\r\n  for (const key in imports) {\r\n    let file = imports[key];\r\n    for (const fn in file) {\r\n      AD.prototype[fn] = file[fn];\r\n    }\r\n  }\r\n};\r\n\r\nloadImports();\r\n\r\nmodule.exports = AD;\r\n"]}