{"version":3,"sources":["jsdelivr-header.js","/npm/maxmind-loader@0.5.12/maxmind-loader.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNiB,QAAQ,cACzB,IAAI,GAAa,QAAQ,MACrB,KAAa,QAAQ,UACrB,WAAa,QAAQ,mBAAmB,WACxC,IAAa,QAAQ,OACrB,KAAa,QAAQ,QAKzB,SAAS,UAAU,EAAS,GAEJ,mBAAZ,IACV,EAAW,EACX,EAAW,CAAC,IAEb,EAAkB,GAAmB,CAAC,GAC7B,KAAU,EAAQ,MAAW,QACtC,EAAQ,QAAU,EAAQ,SAAW,SACN,IAApB,EAAQ,UAClB,EAAQ,SAAU,GAEnB,IAAI,EAAc,EAAQ,SAAW,IAEjC,EAAe,EAAW,IAAI,EAAQ,IAAI,OAAO,IAAK,cAAgB,KACtE,EAAc,sDAAwD,EAAU,SAChF,EAAc,IAAI,KAClB,EAAc,GAJA,CAAE,GAAG,EAAG,GAAG,EAAG,GAAG,EAAG,GAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAI/B,GAAc,EAAK,UAElD,EAAK,QAAQ,GACb,IAAI,EAAU,EAAK,cACf,EAAU,EAAK,WAAW,EAC1B,EAAU,EAAK,UAIf,GADA,EAAU,GAFd,EAAe,EAAQ,EAAK,EAAQ,IAAM,IAC1C,EAAe,EAAM,EAAK,EAAM,IAAM,GAEzB,8BAAgC,EAAQ,SACjD,EAAU,EAAQ,QAAU,EAAM,EAAO,EAsB7C,SAAS,EAAY,GAKpB,GAJsB,iBAAX,IACV,EAAU,yBAA2B,EACrC,EAAU,IAAI,MAAM,KAEjB,EAGH,MAAM,EAFN,EAAS,EAIX,CAGA,SAAS,EAAgB,EAAU,GAClC,EAAS,GAAQ,QACjB,IAAI,GAAK,EACT,GAAI,GAAG,WAAW,GAAW,CAC5B,IAAI,EAAQ,GAAG,SAAS,GACpB,EAAM,KAAO,EAChB,EAAY,EAAY,OAAS,EAAM,KAAO,0BAA4B,KAAK,MAAM,EAAO,KAAW,MAEvG,GAAK,CAEP,MACC,EAAY,EAAW,cAExB,OAAO,CACR,CA/CA,EAAQ,IAAO,EAAe,QAAI,EAAS,wEAkGvC,EAAQ,QACX,KAAK,GA5CN,SAAqB,EAAK,GACzB,GAAI,EACH,EAAY,QAEN,GAAK,GAAS,EAAK,SAAnB,CAKP,IAAI,EAAe,EAAK,SACxB,GAdO,EAca,EAda,QAcjC,CAfD,IAkBK,EAAe,EAAO,QAAQ,MAAO,IACrC,EAAe,GAAG,aAAa,GAC/B,EAAe,WAAW,GAC1B,EAAe,KAiBnB,GAAG,UAAU,EAAS,GAAc,SAAS,GACxC,EACH,EAAY,GAEZ,EAAU,WAAW,EAAU,EAEjC,GA3BA,CALA,MAFC,EAAY,yBAab,SAAS,IACR,aAAa,GACb,IAAI,EAAa,EAAQ,QAAQ,OAAQ,IAAI,QAAQ,eAAgB,IACrE,GAAI,GAAW,EAAU,CACrB,IAAI,EAAS,KAAK,QAAQ,IA1EhC,SAAe,EAAQ,EAAQ,GAC9B,GAAG,iBAAiB,GACjB,KAAK,IAAI,QAAQ,CAAE,KAAM,KACzB,GAAG,SAAS,SAAU,GACtB,EAAY,EACb,IACC,GAAG,OAAO,WACR,EAAgB,IACf,GACH,EAAS,KAAM,EAGhB,GAEH,CA6DM,CAAM,EAAS,EAAQ,EAAU,QACrC,MACK,EAAgB,IACf,GACH,EAAS,KAAM,EAInB,CASD,IAMC,KAAK,EAAS,EAEhB,CAIA,OAAO,QAAU","file":"/npm/maxmind-loader@0.5.12/maxmind-loader.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/maxmind-loader@0.5.12/maxmind-loader.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","                 require('date-utils');                // JerrySievert/node-date-utils\nvar fs         = require('fs')\n  , wget       = require('wgetjs')                     // angleman/wgetjs\n  , uncompress = require('compress-buffer').uncompress // egorfine/node-compress-buffer, used because decompress doesn't support just .gz\n  , tar        = require('tar')                        // isaacs/node-tar\n  , path       = require('path')\n;\n\n// todo: consider using grimen/node-document-compressor-deflate\n\nfunction maxloader(options, callback) {\n\n\tif (typeof options === 'function') {\n\t\tcallback = options;\n\t\toptions  = {};\n\t};\n\toptions         = options         || {};\n \toptions.dest    = options.dest    || '/tmp/';\n\toptions.timeout = options.timeout || 15 * 60 * 1000; // 15 minutes instead of 2 second default\n\tif (typeof options.extract === 'undefined') {\n\t\toptions.extract = true;\n\t}\n\tvar edition     = options.edition || 132\n\t  , offsets     = { su:0, mo:6, tu:5, we:4, th: 3, fr: 2, sa: 1 }\n\t  , day_offset  = (options.day) ? options.day.substr(0.2).toLowerCase() : 'tu'\n\t  , pre         = 'http://www.maxmind.com/app/download_new?edition_id=' + edition + '&date='\n\t  , date        = new Date()\n\t  , offset      = 0 - (offsets[day_offset] + date.getDay()) // days to prior day (tuesday)\n\t;\n\tdate.addDays(offset);\n\tvar year    = date.getFullYear()\n\t  , month   = date.getMonth()+1\n\t  , day     = date.getDate();\n\tmonth       = (month > 9) ? month : '0' + month;\n\tday         = (day > 9) ? day : '0' + day;\n\tvar date    = year + month + day\n\t  , post    =\"&suffix=tar.gz&license_key=\" + options.license\n\t  , source  = options.source || pre + date + post\n\t;\n\toptions.url = (options.license) ? source : 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz';\n\n\n\tfunction untar(tarsrc, outdir, outFile) {\n\t\tfs.createReadStream(tarsrc)\n\t\t  .pipe(tar.Extract({ path: outdir}))\n\t\t  .on(\"error\", function (err) {\n\t\t\t  returnError(err);\n\t\t  })\n\t\t  .on(\"end\", function () {\n\t\t\tif (validateDatFile(outFile)) {\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback(null, outFile);\n\t\t\t\t}\n\t\t\t}\n\t\t  })\n\t\t;\n\t}\n\n\n\tfunction returnError(message) {\n\t\tif (typeof message == 'string') { // error from this layer?\n\t\t\tmessage = \"maxmind-loader error: \" + message;\n\t\t\tmessage = new Error(message);\n\t\t}\n\t\tif (callback) {\n\t\t\tcallback(message);\n\t\t} else {\n\t\t\tthrow message;\n\t\t}\n\t}\n\n\n\tfunction validateDatFile(testFile, size) {\n\t\tsize   = size || 14001000; // should be at least 14MB  \n\t\tvar ok = false;\n\t\tif (fs.existsSync(testFile)) {\n\t\t\tvar fstat = fs.statSync(testFile);\n\t\t\tif (fstat.size < size) {\n\t\t\t\treturnError(testFile +  \" is \" + fstat.size + \", needs to be at least \" + Math.round(size / 1000000) + 'MB');\n\t\t\t} else {\n\t\t\t\tok = true;\n\t\t\t}\n\t\t} else {\n\t\t\treturnError(testFile + \" not found\");\n\t\t}\n\t\treturn ok\n\t}\n\n\n\tfunction validateGzFile(testFile) {\n\t\treturn validateDatFile(testFile, 9001000); // should be at least 9MB\n\t}\n\n\n\tfunction extractData(err, data) {\n\t\tif (err) {\n\t\t\treturnError(err);\n\t\t\treturn;\n\t\t} else if (!data || !data.filepath) {\n\t\t\treturnError('missing data.filepath');\n\t\t\treturn;\n\t\t}\n\n\t\tvar gzFile       = data.filepath;\n\t\tif (!validateGzFile(gzFile)) {                // return error if it's doesn't exist or isn't at least 9MB\n\t\t\treturn;\n\t\t}\n\t\tvar outFile      = gzFile.replace('.gz', '');\n\t\tvar rawData      = fs.readFileSync(gzFile);\n\t\tvar uncompressed = uncompress(rawData);       // todo: find async version\n\t\tvar timerid      = null;\n\n\t\tfunction finishUp() {\n\t\t\tclearTimeout(timerid);\n\t\t\tvar paidFile   = outFile.replace('.tar', '').replace('download_new', '');\n\t\t\tif (outFile != paidFile) { // paid data\n\t\t\t    var outdir = path.dirname(outFile);\n\t\t\t    untar(outFile, outdir, paidFile, attempt);\n\t\t\t} else { // free data\n\t\t\t\tif (validateDatFile(outFile)) {\n\t\t\t\t\tif (callback) {\n\t\t\t\t\t\tcallback(null, outFile);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfs.writeFile(outFile, uncompressed, function(err) {\n\t\t\tif (err) {\n\t\t\t\treturnError(err);\n\t\t\t} else {\n\t\t\t\ttimerid = setTimeout(finishUp, 1);\n\t\t\t}\n\t\t});\n\t}\n\n\n\tif (options.extract) {\n\t\twget(options, extractData);\n\t} else {\n\t\twget(options, callback);\n\t}\n}\n\n\n\nmodule.exports = maxloader;\n"]}