diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ec55de5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +yarn.lock +package.json.lock \ No newline at end of file diff --git a/README.md b/README.md index aaff49e..20f4471 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # ngrok-to-dotenv + +ngrok-to-dotenv is a node cli tool that you can use with projects that need ngrok. You clone it into your project's folder, and setup a package.json script to call "cd ngrok-to-dotenv && node ngrok" \ No newline at end of file diff --git a/ngrok.js b/ngrok.js new file mode 100644 index 0000000..7098798 --- /dev/null +++ b/ngrok.js @@ -0,0 +1,61 @@ +const ngrok = require('ngrok'); +const fs = require('fs'); +const { exec } = require("child_process"); + +const dotenvFile = '../.env' + +// Read the .env file +fs.readFile(dotenvFile, 'utf8', (err, data) => { + if (err) { + console.error(err); + return; + } + + // Convert string to string array, split at newlines + let lines = data.split('\n') // string[] + let token = null; // string || null + + // find the auth token + lines.forEach(element => { + const [name, value] = element.split('='); + if (name === 'NGROK_AUTHTOKEN') + token = value; + }); + + // No token found + if (!token) { + console.error("Setup NGROK_AUTHTOKEN in your .env file") + return; + } + + // Start ngrok + (async function () { + const url = await ngrok.connect({ authtoken: token, proto: 'http', addr: 3000 }); + + // Rebuild lines with the new url + lines = lines.map(element => { + const [name] = element.split('='); + if (name === 'NGROK_SERVERHOST') + return `${name}=${url}` + return element; + }) + + // convert back to string format + let writeData = '' + lines.forEach(element => { + writeData += element + '\n' + }) + writeData = writeData.slice(0, writeData.length - 1); + + // Write the new .env file + fs.writeFile(dotenvFile, writeData, (err) => { + if (err) { + console.error(err); + return; + } + console.clear(); + console.log(`Your current ngrok url is ${url}.`); + console.log(`Your .env file has been updated.`); + }); + })(); +}); diff --git a/package.json b/package.json new file mode 100644 index 0000000..5355dde --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "ngrok-to-dotenv", + "version": "1.0.0", + "description": "ngrok start-up wrapper that uses a dotenv file to get the authtoken and save the https address", + "main": "ngrok.js", + "license": "MIT", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "debug": "node --inspect ngrok.js", + "start": "node ngrok" + }, + "dependencies": { + "ngrok": "^4.2.2" + } +}