{"version":3,"sources":["jsdelivr-header.js","/npm/ftp-transfer-watcher@1.1.4/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;OCLS,MAAO,cAAiB,oBACrB,QAAS,sBACT,OAAQ,kBACX,WAAc,qBAChB,aAAc,kBACd,UAAW,qBACT,SAAY,uBACd,YAAa,UAEpB,MAAM,OAAE,QAAW,SAEb,KAAO,MAAM,QAAQ,MAErB,aAAe,QAAQ,MAAQ,aAE/B,UAAY,UACZ,iBACF,QAAQ,IAAI,4DACd,MAAM,QAAiB,OAAO,CAC5B,CACE,KAAM,QACN,KAAM,OACN,QAAS,4DAEX,CACE,KAAM,QACN,KAAM,WACN,QAAS,gBAEX,CACE,KAAM,QACN,KAAM,WACN,QAAS,gBAEX,CACE,KAAM,SACN,KAAM,SACN,QAAS,eACT,QAAS,CAAC,OAAQ,QAEpB,CACE,KAAM,QACN,KAAM,SACN,QAAS,+DAEX,CACE,KAAM,QACN,KAAM,SACN,QAAS,iEAGP,EAA6B,SAApB,EAAS,OACxB,UACE,YACA,uCAEO,EAAS,wBACL,EAAS,4BACT,EAAS,yBACZ,kBACC,EAAS,gDACT,EAAS,uCAElB,QACA,IAAM,QAAQ,IAAI,2BACnB,EAGG,WAAa,UACjB,MAAM,EAAS,IAAI,IAAI,OACvB,EAAO,IAAI,SAAU,EACrB,UACQ,EAAO,OAAO,CAClB,KAAM,OAAO,KACb,KAAM,OAAO,SACb,SAAU,OAAO,SACjB,OAA0B,SAAlB,OAAO,eAEX,EAAO,cAAc,OAAO,OACpC,CAAE,MAAO,GACP,QAAQ,IAAI,EACd,CACA,EAAO,OAAO,EAGV,cAAgB,IAEF,KAAhB,OAAO,MACa,KAApB,OAAO,UACa,KAApB,OAAO,UACW,KAAlB,OAAO,QACW,KAAlB,OAAO,OAIL,WAAa,KACjB,QAAQ,IAAI,cACZ,MAAM,OAAO,QAAQ,gBACb,YAAW,gBACT,mBACA,GAAG,KAAK,OAAO,OAAQ,OAAO,cAC9B,GAAG,SAAS,OAAO,OAAO,GAC/B,IAAK,GACR,EAGE,KAAO,UACP,KAAK,gBACP,KACE,4FAA4F,oCAC5F,CAAC,EAAO,EAAQ,KACV,EACF,QAAQ,IAAI,UAAU,EAAM,WAG1B,EACF,QAAQ,IAAI,WAAW,KAGzB,QAAQ,IAAI,EAAO,IAKrB,KAAK,kBACP,KACE,wGAAwG,oCACxG,CAAC,EAAO,EAAQ,KACV,EACF,QAAQ,IAAI,UAAU,EAAM,WAG1B,EACF,QAAQ,IAAI,WAAW,KAGzB,QAAQ,IAAI,EAAO,MAKrB,KAAK,QAAU,wBACX,YAER,aAAY,EAGd","file":"/npm/ftp-transfer-watcher@1.1.4/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ftp-transfer-watcher@1.1.4/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","#!/usr/bin/env node\r\nimport { watch, writeFile } from \"node:fs\";\r\nimport * as ftp from \"basic-ftp\";\r\nimport * as fs from \"fs-extra\";\r\nimport { config } from \"./config.js\";\r\nimport Enquirer from \"enquirer\";\r\nimport Parse from \"args-parser\";\r\nimport { exec } from \"child_process\";\r\nimport shelljs from \"shelljs\";\r\n\r\nconst { prompt } = Enquirer;\r\n\r\nconst args = Parse(process.argv);\r\n\r\nconst file_to_exec = shelljs.pwd() + \"\\\\index.js\";\r\n\r\nconst askConfig = async () => {\r\n  if (invalidConfig())\r\n    console.log(\"Invalid configuration, check your connection information\");\r\n  const response = await prompt([\r\n    {\r\n      type: \"input\",\r\n      name: \"host\",\r\n      message: \"FTP Hostname (IP Address or domain, like ftp.domain.com)\",\r\n    },\r\n    {\r\n      type: \"input\",\r\n      name: \"username\",\r\n      message: \"FTP Username\",\r\n    },\r\n    {\r\n      type: \"input\",\r\n      name: \"password\",\r\n      message: \"FTP Password\",\r\n    },\r\n    {\r\n      type: \"select\",\r\n      name: \"secure\",\r\n      message: \"SFTP or FTP?\",\r\n      choices: [\"SFTP\", \"FTP\"],\r\n    },\r\n    {\r\n      type: \"input\",\r\n      name: \"source\",\r\n      message: \"Source Directory full path (use '/' as directory separator)\",\r\n    },\r\n    {\r\n      type: \"input\",\r\n      name: \"backup\",\r\n      message: \"Backup Directory full path (use '/' as directory separator)\",\r\n    },\r\n  ]);\r\n  const secure = response.secure === \"SFTP\";\r\n  writeFile(\r\n    \"config.js\",\r\n    `\r\nexport const config = {\r\n  host: \"${response.host}\",\r\n  username: \"${response.username}\",\r\n  password: \"${response.password}\",\r\n  secure: ${secure},\r\n  source: \"${response.source}\", // absolute source path\r\n  backup: \"${response.backup}\", // absolute backup path\r\n};`,\r\n    \"utf8\",\r\n    () => console.log(\"Created config.js file\")\r\n  );\r\n};\r\n\r\nconst send_files = async () => {\r\n  const client = new ftp.Client();\r\n  client.ftp.verbose = true;\r\n  try {\r\n    await client.access({\r\n      host: config.host,\r\n      user: config.username,\r\n      password: config.password,\r\n      secure: config.secure === \"SFTP\",\r\n    });\r\n    await client.uploadFromDir(config.source);\r\n  } catch (err) {\r\n    console.log(err);\r\n  }\r\n  client.close();\r\n};\r\n\r\nconst invalidConfig = () => {\r\n  return (\r\n    config.host === \"\" ||\r\n    config.username === \"\" ||\r\n    config.password === \"\" ||\r\n    config.source === \"\" ||\r\n    config.backup === \"\"\r\n  );\r\n};\r\n\r\nconst startWatch = () => {\r\n  console.log(\"Started...\");\r\n  watch(config.source, async () => {\r\n    await setTimeout(async () => {\r\n      await send_files();\r\n      await fs.copy(config.source, config.backup);\r\n      await fs.emptyDir(config.source);\r\n    }, 3000);\r\n  });\r\n};\r\n\r\nconst main = async () => {\r\n  if (args.install_service) {\r\n    exec(\r\n      `qckwinsvc --name \"ftp-transfer-watcher\" --description \"Sync your files to FTP\" --script \"${file_to_exec}\" --startImmediately`,\r\n      (error, stdout, stderr) => {\r\n        if (error) {\r\n          console.log(`error: ${error.message}`);\r\n          return;\r\n        }\r\n        if (stderr) {\r\n          console.log(`stderr: ${stderr}`);\r\n          return;\r\n        }\r\n        console.log(stdout);\r\n      }\r\n    );\r\n    return;\r\n  }\r\n  if (args.uninstall_service) {\r\n    exec(\r\n      `qckwinsvc --uninstall --name \"ftp-transfer-watcher\" --description \"Sync your files to FTP\" --script \"${file_to_exec}\" --startImmediately`,\r\n      (error, stdout, stderr) => {\r\n        if (error) {\r\n          console.log(`error: ${error.message}`);\r\n          return;\r\n        }\r\n        if (stderr) {\r\n          console.log(`stderr: ${stderr}`);\r\n          return;\r\n        }\r\n        console.log(stdout);\r\n      }\r\n    );\r\n    return;\r\n  }\r\n  if (args.config || invalidConfig()) {\r\n    await askConfig();\r\n  }\r\n  startWatch();\r\n};\r\n\r\nmain();\r\n"]}