{"version":3,"sources":["jsdelivr-header.js","/npm/esf-but@0.3.28/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACDA,aAEA,IAEC,GAAY,QAAQ,MACpB,KAAY,QAAQ,QACpB,KAAY,QAAQ,QACpB,MAAY,QAAQ,SACpB,IAAY,QAAQ,OACpB,IAAY,QAAQ,UAEpB,MAAY,QAAQ,UAEpB,IAAY,QAAQ,YACpB,GAAY,QAAQ,eAEpB,IAAY,QAAQ,aAEpB,UAAY,EACZ,KAAY,sBACZ,SAAY,EAEZ,WAAW,SAAS,GACnB,OAAO,EAAS,QAAQ,OAAO,GAChC,EAIA,gBAAgB,WAEf,IAAI,EAAG,SAAS,GAIf,OAHI,KAAK,WAAW,KACnB,EAAE,KAAK,QAAQ,UAAU,UAAU,GAAG,QAAQ,OAAO,MAE/C,CACR,EAEA,SAAS,OAAO,MAAM,SAAQ,SAAS,EAAE,GACxC,SAAS,OAAO,MAAM,GAAG,UAAU,EAAG,EAAE,UACzC,IAEA,SAAS,OAAO,cAAc,SAAQ,SAAS,EAAE,GAChD,SAAS,OAAO,cAAc,GAAG,EAAG,EACrC,IAEA,SAAS,OAAO,OAAO,EAAG,SAAS,OAAO,QAC1C,SAAS,QAAQ,QAAQ,EAAG,SAAS,QAAQ,SAC7C,SAAS,QAAQ,QAAQ,EAAG,SAAS,QAAQ,SAE1C,SAAS,eAAe,mBAC1B,SAAS,cAAc,EAAG,SAAS,eAGrC,EAEA,iBAAiB,WACb,SAAS,eAAe,mBAC1B,OAAO,WAAW,SAAS,cAE7B,EAEA,aAAa,WAEZ,OAAO,IAAI,SAAQ,SAAS,EAAG,IAEhB,IAAX,UACF,EAAG,UAGJ,GAAG,SAAS,eAAgB,CAAC,SAAW,SAAQ,SAAS,EAAE,GAEvD,IACF,IAAI,wBACJ,EAAG,IAGJ,SAAS,KAAK,MAAM,GACpB,KAAK,oBACQ,IAAV,UACH,QAAQ,MAAM,aAAa,SAAS,OAAO,MAAM,IAAK,SAAS,OAAO,MAAM,MAE5E,kBAEA,mBAEA,EAAG,UAEJ,GAED,GAED,EAEA,UAAY,SAAS,GAYpB,IAXA,IAEC,EAAa,CACZ,OACA,WACA,WACA,eACA,SAIM,EAAE,EAAE,EAAE,EAAa,OAAO,EAAE,EAAE,IACrC,GAAG,EAAE,IAAI,QACR,IAAI,OAAO,IAAI,EAAa,GAAG,kBAAoB,MACnD,IAAI,EAAa,GAAjB,gBAIF,OAAO,CACR,EAEA,IAAY,SAAS,GAEpB,GAAI,SAAS,IAAb,CAEA,IACC,EAAO,CACN,GAAK,IAAI,MACT,GAAK,IAAI,IACT,GAAK,IAAI,MACT,GAAK,IAAI,OACT,GAAK,IAAI,cACT,GAAK,IAAI,aAEV,EAAM,KACN,GAAM,EAIJ,aAAa,QACf,EAAM,KACN,EAAI,KAAK,EAAE,OAII,iBAAN,IACT,EAAE,KAAK,UAAU,GACd,IACF,GAAG,IAIL,EAAE,UAAU,GAEZ,IAAI,EAAE,IAAI,KAEV,GAAG,WACF,aACA,EAAE,cAAc,KAAK,EAAE,MACvB,SAAS,GACR,GAAG,EAAK,MAAM,CACf,IAGD,QAAQ,IAAI,EAAO,GAAO,YAAY,GAzCf,CA2CxB,EAEA,IAAK,SAAS,EAAQ,EAAM,GAC3B,IAAI,GACJ,IAAI,GACJ,EAAc,EACf,EAEA,QAAY,SAAS,EAAS,EAAQ,GAErC,OAAO,IAAI,SAAQ,SAAS,EAAG,GAE9B,IAAI,EAAQ,CACX,KAAM,IAAI,MAAM,EAAS,SAAS,KAClC,KAAM,GACN,KAAM,IAAI,MAAM,EAAS,SAAS,SAClC,KAAM,EAAgB,UAAU,KAAK,IAAI,EAAgB,UAAU,MAGpE,IAEC,IAAI,EAAO,GAAG,kBAAkB,EAAS,WAEzC,KAAK,IAAI,GAAS,SAAS,GAC1B,EAAE,GAAG,QAAQ,SAAS,GACrB,EAAK,MAAM,EACZ,IAAG,GAAG,OAAO,WAEZ,EAAK,MACL,IAAI,cAAc,EAAS,QAAQ,OAAO,EAAS,WACnD,GAAG,EAEJ,IAAG,GAAG,SAAQ,SAAS,GACtB,IAAI,kBAAkB,EAAE,EACzB,GACD,GAED,CAAC,MAAM,GACN,IAAI,kBAAkB,EAAE,EACzB,CAED,GAED,EAEA,SAAY,WAIX,OAFA,IAAI,6BAEG,IAAI,SAAQ,SAAS,EAAG,GAE9B,eAAe,MAAK,SAAS,GAC5B,IAAI,sCAAsC,KAAK,UAAU,SAAS,SAElE,IAAI,EAAQ,GACZ,SAAS,OAAO,MAAM,SAAQ,SAAS,EAAE,GACxC,EAAQ,KAAK,QAAQ,EAAE,EAAE,SAAS,QACnC,IAEA,QAAQ,IAAI,GAAS,MAAK,SAAS,GAClC,IAAI,kCAAkC,KAAK,UAAU,IACrD,EAAG,EACJ,IAAG,OAAM,SAAS,GACjB,IAAI,sBAAsB,EAAE,EAC7B,GAED,IAAG,OAAM,SAAS,GACjB,IAAI,4BAA4B,EAAE,EACnC,GAED,GAED,EAEA,iBAAmB,WAClB,IAAI,EAAE,IAAI,KAKV,MAJM,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,cAC1E,KAAI,SAAS,GACpB,OAAO,EAAE,GAAG,IAAI,EAAE,CACnB,IACS,KAAK,GACf,EAEA,kBAAmB,WAIlB,OAFA,IAAI,sCAEG,IAAI,SAAQ,SAAS,EAAG,GAE9B,eAAe,MAAK,SAAS,GAE5B,IAAI,4BAEJ,IACC,IACI,EAAW,IAAI,EADJ,QAAQ,eAAe,YACR,SAAS,OAAO,OAE1C,EAAU,WAAW,SAAS,OAAO,QACrC,EAAU,SAAS,OAAO,WAAW,IAC1C,CAAC,MAAM,GACN,IAAI,6BAA6B,EAAE,EACpC,CAEA,IAAI,EAAQ,CAEX,gBAAgB,SAAS,GACxB,OAAO,IAAI,SAAQ,SAAS,EAAI,GAE/B,IAAI,6BAA6B,GAEjC,EAAK,MAAM,GAAU,SAAS,GACzB,EAIH,IAAI,qCAAqC,EAAE,IAH3C,IAAI,MACJ,EAAI,MAIN,GAED,GACD,EAEA,YAAY,SAAS,GACpB,OAAO,IAAI,SAAQ,SAAS,EAAI,GAE/B,IAAI,aAEJ,IACC,IAAI,EAAM,GAAG,YAAY,EAC1B,CAAC,MAAM,GAEN,MADA,IAAI,qCAAqC,EAAG,GACtC,CACP,CAEA,IAAI,qBAAqB,EAAM,KAAK,OAEpC,IAAI,EAAO,GACX,EAAM,SAAQ,SAAS,GACtB,EAAO,KAAK,EAAQ,YAAY,EAAK,GACtC,IAEA,QAAQ,IAAI,GAAQ,MAAK,SAAS,GACjC,EAAI,EACL,IAAG,OAAM,SAAS,GACjB,IAAI,qCAAqC,EAAE,EAC5C,GAED,GACD,EAEA,YAAY,SAAS,EAAK,GACzB,OAAO,IAAI,SAAQ,SAAS,EAAI,GAE/B,IAAI,EAAS,SAAS,OAAO,OAAO,EACjC,GAAG,SAAS,GAAU,UAExB,EAAK,WAAW,EAAS,EAAU,IAAI,GAAK,SAAS,EAAE,GAClD,EAIH,IAAI,qCAAqC,EAAE,IAH3C,IAAI,iBAAiB,GACrB,EAAI,GAIN,GAIF,GACD,EAEA,MAAM,SAAS,GAuBd,OAAO,IAAI,SAAQ,SAAS,EAAI,GAE/B,IAAI,YAEJ,EAAK,QAAQ,SAAS,OAAO,YAAW,SAAS,EAAE,GAElD,GAAG,EAGF,OAFA,QAAQ,MAAM,QACd,IAAI,qCAAqC,EAAE,GAI5C,GAAc,iBAAJ,GAAiB,MAAM,QAAQ,IAKzC,GAAG,EAAE,OAAO,SAAS,OAAO,kBAAkB,CAE7C,IAAI,EAAE,GACN,EAAE,SAAQ,SAAS,GAClB,EAAE,KAAK,EAAE,YACV,IACA,EAAE,OAEF,IAAI,EAAQ,EAAE,OAAO,SAAS,OAAO,kBACjC,EAAQ,EAAE,MAAM,EAAE,GAClB,EAAQ,GAEZ,IAAI,GACJ,EAAG,SAAQ,SAAS,GAnDA,IAAS,EAoD5B,EAAQ,MApDoB,EAoDI,EAlD5B,IAAI,SAAQ,SAAS,EAAI,GAE/B,EAAK,OAAO,SAAS,OAAO,WAAW,GAAE,SAAS,EAAG,GAEjD,EACF,IAAI,4DAA4D,EAAG,IAKpE,IAAI,2BAA2B,GAC/B,EAAI,GAEL,GAED,KAoCE,IAEA,QAAQ,IAAI,GAAS,MAAK,SAAS,GAClC,EAAI,EACL,IAAG,OAAM,SAAS,GACjB,IAAI,wDAAwD,EAAG,EAChE,GAED,OA3BC,IAAI,qCAAqC,EAAE,EA6B7C,GAGD,GACD,GAID,EAAQ,gBAAgB,GAAM,MAAK,SAAS,GAE3C,EAAQ,YAAY,GAAM,MAAK,SAAS,GAEvC,EAAQ,MAAM,GAAM,MAAK,SAAS,GAEjC,IAAI,kDACJ,EAAG,EAEJ,IAAG,OAAM,SAAS,GACjB,IAAI,6BAA6B,EAAE,EACpC,GAED,IAAG,OAAM,SAAS,GACjB,IAAI,6BAA6B,EAAE,EACpC,GAED,IAAG,OAAM,SAAS,GACjB,IAAI,6BAA6B,EAAE,EACpC,GAED,IAAG,OAAM,SAAS,GACjB,IAAI,6BAA6B,EAAE,EACpC,GAED,GAED,EAEA,YAAa,SAAS,GAErB,OAAO,IAAI,SAAQ,SAAS,EAAG,GAE9B,GAAG,OAAO,GAAE,SAAS,GACpB,GAAI,EAIH,KAES,IAAI,IAEV,IACD,WAAW,SAAS,OAAO,QAAQ,IAAI,mBAAmB,GAAG,OAC7D,EACA,CACC,EAAM,SAAS,OAAO,MAAM,KAC5B,KAAM,IAQH,MAAK,WAET,IAAI,WAAW,GACf,EAAG,WAAW,EAEf,IAAG,OAAM,SAAS,GACjB,IAAI,eAAe,EAAG,EACvB,GAED,CAAC,MAAM,GACN,IAAI,eAAe,EAAK,EACzB,MA/BA,IAAI,SAAS,EAAE,iBAAiB,IAAI,MAAM,SAAS,EAAE,kBAAkB,EAkCzE,GAED,GAED,EAEA,OAAU,WAIT,OAFA,IAAI,yBAEG,IAAI,SAAQ,SAAS,EAAG,GAE9B,eAAe,MAAK,SAAS,GAE5B,IAAI,kCAAkC,KAAK,UAAU,SAAS,SAG9D,IAAI,aAAa,SAAS,OAAO,QAEjC,IAAI,EAAM,GAEV,SAAS,OAAO,cAAc,SAAQ,SAAS,GAG9C,YAAY,GAAG,MAAK,SAAS,GAE5B,EAAM,KAAK,oBAEZ,IAAG,OAAM,SAAS,GAEjB,IAAI,mBACJ,IAAI,GACJ,EAAM,KAAK,IAAI,SAAQ,SAAS,EAAI,GACnC,EAAI,EACL,IAED,GAED,IAEA,QAAQ,IAAI,GAAO,MAAK,SAAS,GAChC,EAAG,EACJ,IAAG,OAAM,SAAS,GACjB,IAAI,kDAAkD,EAAG,EAC1D,GAED,IAAG,OAAM,SAAS,GACjB,IAAI,kBAAkB,EAAE,EACzB,GAED,GAED,EAEA,QAAU,WAIT,OAFA,IAAI,0BAEG,IAAI,SAAQ,SAAS,EAAG,GAE9B,eAAe,MAAK,SAAS,GAE5B,IAAI,kCAAkC,KAAK,UAAU,SAAS,UAE9D,IACa,GAAG,YAAY,SAAS,QAAQ,QAC7C,CAAC,MAAM,GAEN,YADA,IAAI,EAEL,CAEA,GAAG,QAAQ,SAAS,QAAQ,SAAQ,SAAS,EAAK,GAE9C,EACF,IAAI,mBAAmB,EAAI,GAI5B,EAAM,SAAQ,SAAS,GACtB,IAAI,EAAS,SAAS,QAAQ,QAAQ,IAAI,EACvC,GAAG,SAAS,GAAU,WAEhB,IAAI,IACV,YACD,EACA,SAAS,QAAQ,QACjB,CACC,EAAM,SAAS,OAAO,MAAM,OAE5B,MAAK,SAAS,GACf,IAAI,aAAa,MACjB,EAAG,KACJ,IAAG,OAAM,SAAS,GACjB,IAAI,mBAAmB,EAAG,EAC3B,GAGF,GAED,GAED,GAED,GAED,EAID,OAAO,QAAQ,CACd,SAAS,SACT,OAAO,OACP,kBAAkB,kBAClB,QAAQ","file":"/npm/esf-but@0.3.28/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/esf-but@0.3.28/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","/* *\n * Author: Denis Bondarenko <bond.den@gmail.com>\n * Created: 01.04.2015 15:17\n */\n\n'use strict';\n\nvar\n\n\tfs        = require('fs'),\n\tpath      = require('path'),\n\thttp      = require('http'),\n\thttps     = require('https'),\n\turl       = require('url'),\n\ttar       = require('tar-fs'),\n\t//zlib      = require('zlib'),\n\tcrypt     = require('crypto'),\n\n\tfse       = require('fs-extra'),\n\tz7        = require('node-7z-esf'),\n\n\tclc       = require('cli-color'),\n\n\tsettings  = false,\n\tdate      = '0000-00-00-00-00-00',\n\tencrypt   = false,\n\n\tstripSlash=function(pathName){\n\t\treturn pathName.replace(/\\/+$/,'');\n\t},\n\t/**\n\t * Converts local paths in settings to absolute according butfile.json schema v.0.3.0\n\t */\n\tabsolutizePaths=function(){\n\n\t\tvar aP=function(p){\n\t\t\tif(!path.isAbsolute(p)){\n\t\t\t\tp=path.resolve(__dirname+'/../../'+p).replace(/\\\\/ig,'/');\n\t\t\t}\n\t\t\treturn p;\n\t\t};\n\n\t\tsettings.update.paths.forEach(function(p,i){\n\t\t\tsettings.update.paths[i].toInstall=aP(p.toInstall);\n\t\t});\n\n\t\tsettings.backup.pathsToBackup.forEach(function(p,i){\n\t\t\tsettings.backup.pathsToBackup[i]=aP(p);\n\t\t});\n\n\t\tsettings.backup.tmpDir=aP(settings.backup.tmpDir);\n\t\tsettings.restore.pathSrc=aP(settings.restore.pathSrc);\n\t\tsettings.restore.pathDst=aP(settings.restore.pathDst);\n\n\t\tif(settings.hasOwnProperty('zipExecutable')){\n\t\t\tsettings.zipExecutable=aP(settings.zipExecutable);\n\t\t}\n\n\t},\n\n\tsetZipExecutable=function(){\n\t\tif(settings.hasOwnProperty('zipExecutable')){\n\t\t\tglobal.gNode7zEsf=settings.zipExecutable;\n\t\t}\n\t},\n\n\tloadSettings=function(){\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tif(settings!==false){\n\t\t\t\trs(settings);\n\t\t\t}\n\n\t\t\tfs.readFile('butfile.json', {'encoding':'utf8'},function(e,settingsRaw){\n\n\t\t\t\tif(e){\n\t\t\t\t\tlog('Error loadSettings.1');\n\t\t\t\t\trj(e);\n\t\t\t\t}\n\n\t\t\t\tsettings=JSON.parse(settingsRaw);\n\t\t\t\tdate=getDateFormatted();\n\t\t\t\tif(encrypt!==false)return;\n\t\t\t\tencrypt=crypt.createCipher(settings.backup.crypt.alg, settings.backup.crypt.pass);\n\n\t\t\t\tabsolutizePaths();\n\n\t\t\t\tsetZipExecutable();\n\n\t\t\t\trs(settings);\n\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tlogFilter = function(s){\n\t\tvar\n\t\t\tcensorNote='FILTERED',\n\t\t\tcensoredKeys=[\n\t\t\t\t'pass',\n\t\t\t\t'password',\n\t\t\t\t'userPass',\n\t\t\t\t'userPassword',\n\t\t\t\t'token'\n\t\t\t]\n\t\t;\n\n\t\tfor(var i=0,l=censoredKeys.length;i<l;i++){\n\t\t\ts=(s+'').replace(\n\t\t\t\tnew RegExp('\"'+censoredKeys[i]+'\"\\s*:\\s*\"([^\"]+)\"',\"ig\"),\n\t\t\t\t'\"'+censoredKeys[i]+'\":\"'+censorNote+'\"'\n\t\t\t);\n\t\t}\n\n\t\treturn s;\n\t},\n\n\tlog       = function(s){\n\n\t\tif(!settings.log)return;\n\n\t\tvar\n\t\t\tstyles={\n\t\t\t\t'ne':clc.white,\n\t\t\t\t'er':clc.red,\n\t\t\t\t'ok':clc.green,\n\t\t\t\t'em':clc.yellow,\n\t\t\t\t'mb':clc.magentaBright,\n\t\t\t\t'sh':clc.whiteBright\n\t\t\t},\n\t\t\tstyle='ne',\n\t\t\tapx  =false\n\t\t;\n\n\t\t//set console style style\n\t\tif(s instanceof Error){\n\t\t\tstyle='er';\n\t\t\tapx='\\n'+s.stack;\n\t\t}\n\n\t\t//set log format\n\t\tif(typeof s === 'object'){\n\t\t\ts=JSON.stringify(s);\n\t\t\tif(apx){\n\t\t\t\ts+=apx;\n\t\t\t}\n\t\t}\n\n\t\ts=logFilter(s);\n\n\t\tvar d=new Date();\n\n\t\tfs.appendFile(\n\t\t\t'butlog.log',\n\t\t\td.toUTCString()+'\\t'+s+'\\n',\n\t\t\tfunction(err){\n\t\t\t\tif(err) throw err;\n\t\t\t}\n\t\t);\n\n\t\tconsole.log(styles[style]('but.log: '+s));\n\n\t},\n\n\trej =function(message,error,rejectHandler){\n\t\tlog(message);\n\t\tlog(error);\n\t\trejectHandler(error);\n\t},\n\n\tdldFile   = function(pathData,pathNum,updaterSettings){\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tvar options={\n\t\t\t\thost: url.parse(pathData.fromUrl).host,\n\t\t\t\tport: 80,\n\t\t\t\tpath: url.parse(pathData.fromUrl).pathname,\n\t\t\t\tauth: updaterSettings.basicAuth.user+':'+updaterSettings.basicAuth.pass\n\t\t\t};\n\n\t\t\ttry{\n\n\t\t\t\tvar file = fs.createWriteStream(pathData.toInstall);\n\n\t\t\t\thttp.get(options, function(r){\n\t\t\t\t\tr.on('data', function(data){\n\t\t\t\t\t\tfile.write(data);\n\t\t\t\t\t}).on('end', function(){\n\n\t\t\t\t\t\tfile.end();\n\t\t\t\t\t\tlog('downloaded '+pathData.fromUrl+' to '+pathData.toInstall);\n\t\t\t\t\t\trs(true);\n\n\t\t\t\t\t}).on('error',function(e){\n\t\t\t\t\t\trej('Error dldFile.1',e,rj);\n\t\t\t\t\t});\n\t\t\t\t});\n\n\t\t\t}catch(e){\n\t\t\t\trej('Error dldFile.2',e,rj);\n\t\t\t}\n\n\t\t});\n\n\t},\n\n\tdownload  = function(){\n\n\t\tlog('\\n\\nStarting Downloader\\n');\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tloadSettings().then(function(r){\n\t\t\t\tlog('Downloader started with settings:\\n'+JSON.stringify(settings.update));\n\n\t\t\t\tvar waiters=[];\n\t\t\t\tsettings.update.paths.forEach(function(p,i){\n\t\t\t\t\twaiters.push(dldFile(p,i,settings.update));\n\t\t\t\t});\n\n\t\t\t\tPromise.all(waiters).then(function(r){\n\t\t\t\t\tlog('Downloader ready with result:\\n'+JSON.stringify(r));\n\t\t\t\t\trs(r);\n\t\t\t\t}).catch(function(e){\n\t\t\t\t\trej('Downloader error:\\n',e,rj);\n\t\t\t\t});\n\n\t\t\t}).catch(function(e){\n\t\t\t\trej('Settings loading error:\\n',e,rj);\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tgetDateFormatted  =function(){\n\t\tvar d=new Date();\n\t\tvar a=[d.getFullYear(),d.getMonth()+1,d.getDate()+1,d.getHours(),d.getMinutes(),d.getSeconds()];\n\t\tvar b=a.map(function(v){\n\t\t\treturn v<10?'0'+v:v;\n\t\t});\n\t\treturn b.join('')\n\t},\n\n\tsendFilesToYaDisk =function(){\n\n\t\tlog('\\n\\nSending files to Yandex.Disk\\n');\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tloadSettings().then(function(r){\n\n\t\t\t\tlog('initializing Yandex.Disk');\n\n\t\t\t\ttry{\n\t\t\t\t\tvar YandexDisk=require('yandex-disk').YandexDisk;\n\t\t\t\t\tvar disk      =new YandexDisk(settings.backup.token);\n\n\t\t\t\t\tvar d        =stripSlash(settings.backup.tmpDir);\n\t\t\t\t\tvar remoteDir=settings.backup.remoteRoot+date;\n\t\t\t\t}catch(e){\n\t\t\t\t\trej('Error sendFilesToYaDisk.1:',e,rj);\n\t\t\t\t}\n\n\t\t\t\tvar actions={\n\n\t\t\t\t\tcreateRemoteDir:function(disk){\n\t\t\t\t\t\treturn new Promise(function(rs1,rj1){\n\n\t\t\t\t\t\t\tlog('creating remote directory '+remoteDir);\n\n\t\t\t\t\t\t\tdisk.mkdir(remoteDir,function(e){\n\t\t\t\t\t\t\t\tif(!e){\n\t\t\t\t\t\t\t\t\tlog('ok');\n\t\t\t\t\t\t\t\t\trs1('ok');\n\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.actions.1:',e,rj);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tuploadFiles:function(disk){\n\t\t\t\t\t\treturn new Promise(function(rs1,rj1){\n\n\t\t\t\t\t\t\tlog('uploading');\n\n\t\t\t\t\t\t\ttry{\n\t\t\t\t\t\t\t\tvar files=fs.readdirSync(d);\n\t\t\t\t\t\t\t}catch(e1){\n\t\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.actions.2:',e1,rj1);\n\t\t\t\t\t\t\t\tthrow e1;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tlog('files to upload:\\n'+files.join('\\n'));\n\n\t\t\t\t\t\t\tvar waiter=[];\n\t\t\t\t\t\t\tfiles.forEach(function(file){\n\t\t\t\t\t\t\t\twaiter.push(actions.uploadAFile(disk,file));\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\tPromise.all(waiter).then(function(r){\n\t\t\t\t\t\t\t\trs1(r);\n\t\t\t\t\t\t\t}).catch(function(e){\n\t\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.actions.3:',e,rj1);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tuploadAFile:function(disk,file){\n\t\t\t\t\t\treturn new Promise(function(rs1,rj1){\n\n\t\t\t\t\t\t\tvar filePath=settings.backup.tmpDir+file;\n\t\t\t\t\t\t\tif(fs.statSync(filePath).isFile()){\n\n\t\t\t\t\t\t\t\tdisk.uploadFile(filePath,remoteDir+'/'+file,function(e,r){\n\t\t\t\t\t\t\t\t\tif(!e){\n\t\t\t\t\t\t\t\t\t\tlog('uploaded file '+file);\n\t\t\t\t\t\t\t\t\t\trs1(file);\n\t\t\t\t\t\t\t\t\t}else{\n\t\t\t\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.actions.4:',e,rj1);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\n\t\t\t\t\tclean:function(disk){\n\n\t\t\t\t\t\tvar removeObsoletePath=function(p){\n\n\t\t\t\t\t\t\treturn new Promise(function(rs2,rj2){\n\n\t\t\t\t\t\t\t\tdisk.remove(settings.backup.remoteRoot+p,function(e2,r2){\n\n\t\t\t\t\t\t\t\t\tif(e2){\n\t\t\t\t\t\t\t\t\t\trej('Error cleaning remote directory. See but.log for details.',e2,rj2);\n\t\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\tlog('removed obsolete remote '+p);\n\t\t\t\t\t\t\t\t\trs2(r2);\n\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn new Promise(function(rs1,rj1){\n\n\t\t\t\t\t\t\tlog('cleaning');\n\n\t\t\t\t\t\t\tdisk.readdir(settings.backup.remoteRoot,function(e,r){\n\n\t\t\t\t\t\t\t\tif(e){\n\t\t\t\t\t\t\t\t\tconsole.trace(e);\n\t\t\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.actions.5:',e,rj1);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif(typeof r!=='object' || !Array.isArray(r)){\n\t\t\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.actions.6:',e,rj1);\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif(r.length>settings.backup.maxRemoteVersions){\n\n\t\t\t\t\t\t\t\t\tvar m=[];\n\t\t\t\t\t\t\t\t\tr.forEach(function(v){\n\t\t\t\t\t\t\t\t\t\tm.push(v.displayName);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tm.sort();\n\n\t\t\t\t\t\t\t\t\tvar surplus=m.length-settings.backup.maxRemoteVersions;\n\t\t\t\t\t\t\t\t\tvar ex     =m.slice(0,surplus);\n\t\t\t\t\t\t\t\t\tvar waiters=[];\n\n\t\t\t\t\t\t\t\t\tlog(ex);\n\t\t\t\t\t\t\t\t\tex.forEach(function(td){\n\t\t\t\t\t\t\t\t\t\twaiters.push(removeObsoletePath(td));\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tPromise.all(waiters).then(function(r3){\n\t\t\t\t\t\t\t\t\t\trs1(r3);\n\t\t\t\t\t\t\t\t\t}).catch(function(e3){\n\t\t\t\t\t\t\t\t\t\trej('Error cleaning remote paths. See but.log for details.',e3,rj1);\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t//fse.emptyDirSync(settings.backup.tmpDir);\n\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t};\n\n\t\t\t\tactions.createRemoteDir(disk).then(function(r){\n\n\t\t\t\t\tactions.uploadFiles(disk).then(function(r1){\n\n\t\t\t\t\t\tactions.clean(disk).then(function(r2){\n\n\t\t\t\t\t\t\tlog('remote directory has been cleaned successfully');\n\t\t\t\t\t\t\trs(r2);\n\n\t\t\t\t\t\t}).catch(function(e){\n\t\t\t\t\t\t\trej('Error sendFilesToYaDisk.3:',e,rj);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t}).catch(function(e){\n\t\t\t\t\t\trej('Error sendFilesToYaDisk.4:',e,rj);\n\t\t\t\t\t});\n\n\t\t\t\t}).catch(function(e){\n\t\t\t\t\trej('Error sendFilesToYaDisk.5:',e,rj);\n\t\t\t\t});\n\n\t\t\t}).catch(function(e){\n\t\t\t\trej('Error sendFilesToYaDisk.6:',e,rj);\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tarchivePath =function(p){\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tfs.exists(p,function(exists){\n\t\t\t\tif(!exists){\n\t\t\t\t\trej('path: '+p+' doesn`t exist',new Error('path: '+p+' doesn`t exist'),rj);\n\t\t\t\t}else{\n\n\t\t\t\t\ttry{\n\n\t\t\t\t\t\tvar z = new z7();\n\n\t\t\t\t\t\tz.add(\n\t\t\t\t\t\t\tstripSlash(settings.backup.tmpDir)+'/'+encodeURIComponent(p)+'.zip',\n\t\t\t\t\t\t\tp,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tp:    settings.backup.crypt.pass,\n\t\t\t\t\t\t\t\tssw:  true\n\t\t\t\t\t\t\t\t//m:    'he'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)/*.process(function(fls){\n\n\t\t\t\t\t\t\tconsole.log('zip process:');\n\t\t\t\t\t\t\tconsole.log(fls);\n\n\t\t\t\t\t\t})*/.then(function(){\n\n\t\t\t\t\t\t\tlog('zipped: '+p);\n\t\t\t\t\t\t\trs('zipped: '+p);\n\n\t\t\t\t\t\t}).catch(function(er){\n\t\t\t\t\t\t\trej('Error zip.1:',er,rj);\n\t\t\t\t\t\t});\n\n\t\t\t\t\t}catch(zErr){\n\t\t\t\t\t\trej('Error zip.2:',zErr,rj);\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\tbackup  = function(){\n\n\t\tlog('\\n\\nStarting backup\\n');\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tloadSettings().then(function(r){\n\n\t\t\t\tlog('Backup started with settings:\\n'+JSON.stringify(settings.backup));\n\n\t\t\t\t//1. prepare dirs\n\t\t\t\tfse.emptyDirSync(settings.backup.tmpDir);\n\n\t\t\t\tvar queue=[];\n\n\t\t\t\tsettings.backup.pathsToBackup.forEach(function(p){\n\n\t\t\t\t\t//2. pack\n\t\t\t\t\tarchivePath(p).then(function(r1){\n\t\t\t\t\t\t//3. send\n\t\t\t\t\t\tqueue.push(sendFilesToYaDisk());\n\n\t\t\t\t\t}).catch(function(e1){\n\n\t\t\t\t\t\tlog('Error backup.3:');\n\t\t\t\t\t\tlog(e1);\n\t\t\t\t\t\tqueue.push(new Promise(function(rse,rje){\n\t\t\t\t\t\t\trje(e1);\n\t\t\t\t\t\t}));\n\n\t\t\t\t\t});\n\n\t\t\t\t});\n\n\t\t\t\tPromise.all(queue).then(function(rq){\n\t\t\t\t\trs(rq);\n\t\t\t\t}).catch(function(eq){\n\t\t\t\t\trej('Error archiving and saving files to Yandex.Disk',eq,rj);\n\t\t\t\t});\n\n\t\t\t}).catch(function(e){\n\t\t\t\trej('Error backup.1:',e,rj);\n\t\t\t});\n\n\t\t});\n\n\t},\n\n\trestore = function(){\n\n\t\tlog('\\n\\nStarting restore\\n');\n\n\t\treturn new Promise(function(rs,rj){\n\n\t\t\tloadSettings().then(function(r){\n\n\t\t\t\tlog('Restore started with settings: '+JSON.stringify(settings.restore));\n\n\t\t\t\ttry{\n\t\t\t\t\tvar files = fs.readdirSync(settings.restore.pathSrc);\n\t\t\t\t}catch(e1){\n\t\t\t\t\tlog(e1);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfs.readdir(settings.restore.pathSrc,function(err, files){\n\n\t\t\t\t\tif(err){\n\t\t\t\t\t\trej('Error restore.1:',err,rj);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tfiles.forEach(function(file){\n\t\t\t\t\t\tvar filePath=settings.restore.pathSrc+'/'+file;\n\t\t\t\t\t\tif(fs.statSync(filePath).isFile()){\n\n\t\t\t\t\t\t\tvar z = new z7();\n\t\t\t\t\t\t\tz.extractFull(\n\t\t\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t\t\tsettings.restore.pathDst,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tp:    settings.backup.crypt.pass\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t).then(function(r){\n\t\t\t\t\t\t\t\tlog('unpacked: '+path);\n\t\t\t\t\t\t\t\trs(path);\n\t\t\t\t\t\t\t}).catch(function(er){\n\t\t\t\t\t\t\t\trej('Error restore.2:',er,rj);\n\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t});\n\n\t\t\t});\n\n\t\t});\n\n\t}\n\n;\n\nmodule.exports={\n\tdownload:download,\n\tbackup:backup,\n\tsendFilesToYaDisk:sendFilesToYaDisk,\n\trestore:restore\n};\n"]}