npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

miner

v1.0.1

Published

Localhost tunelling service wrappers

Downloads

1,094

Readme

Miner

Build Status Greenkeeper badge

Miner wraps localhost tunelling services to easily expose your Node server to the web. As always installation is as easy as

npm install miner

The Miner service interface looks like this:

var miner = require('miner');
miner.<servicename>(configuration, function(error, url, process) {
  error // -> An Error instance on errors
  url // -> The tunnel URL
  process // -> The ChildProcess object if applicable
});

See the ChildProcess documentation for more information about the process object.

Quick Start

Lets create the basic NodeJS HTTP server example and make it available to the web via Localtunnel:

var http = require('http');
var miner = require('miner');
var port = 1337;

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(port, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

miner.localtunnel({
  port: port
}, function(error, url, process) {
  if(error) {
    console.log('ERROR', error);
    return;
  }
  console.log('Your server is now available to the world at:');
  console.log(url);
});

Just visit the url to see the server output.

Tunneling services

Default tunnel

The default tunnel is a dummy tunelling service that returns the URL for a given hostname and port. That way you can use the miner interface even when just connecting to a local server.

  • port - The port to share (default: none 80)
  • hostname - The hostname to use (default: localhost)
  • useOsHostname - Use the system hostname if set to true and hostname is not set
var miner = require('miner');
miner.local({
  port : 8080
}, function(error, url) {
  url // -> http://localhost:8080
});

Localtunnel

Localtunnel allows you to easily share a web service on your local development machine without messing with DNS and firewall settings. The following options are available:

  • subdomain A string value requesting a specific subdomain on the proxy server. Note You may not actually receive this name depending on availablily.
  • local_host Proxy to this hostname instead of localhost. This will also cause the Host header to be re-written to this value in proxied requests.
var miner = require('miner');
miner.localtunnel({
  port : 8080
}, function(error, url, tunnel) {
  tunnel.close();
});

The tunnel instance returned to your callback emits the following events

|event|args|description| |----|----|----| |error|err|fires when an error happens on the tunnel| |close||fires when the tunnel has closed|

The `tunnel instance has the following methods

|method|args|description| |----|----|----| |close||close the tunnel|

Browserstack

BrowserStack is a cross browser testing tool. You need a Browserstack account with API access and have to provide your private key to the miner service. Unlike other services it will not provide a publicly acessible URL but the given URL will be accessible on your BrowserStack instances. The configuration is almost identical with the BrowserStackTunnel module which is used internally, additionally you can pass simply a port to tunnel.

  • key - Your browserstack command line tunnel key
  • hosts - An array of hosts to tunnel
  • port - The port to share (default: 80)
  • osxBin - optionally override the default bin directory for the OSX binary
  • linux32Bin - optionally override the default bin directory for the Linux 32 bit binary
  • linux64Bin - optionally override the default bin directory for the Linux 64 bit binary
  • jarFile - on other platforms, optionally override the default path to the BrowserStackTunnel.jar file
  • tunnelIdentifier - optionally set the -tunnelIdentifier option
  • skipCheck - optionally set the -skipCheck option
  • `vtrue, optionally set the -v (verbose) option
  • proxyUser - optionally set the proxy user
  • proxyPass - optionally set the proxy password
  • proxyPort - optionally set the proxy port
  • proxyHost - optionally set the proxy host
var miner = require('miner');
miner.browserstack({
  port : 8080,
  key: '<your API key>'
}, function(error, url, tunnel) {
  tunnel.kill();
});

Pagekite

Pagekite is a reliable way to make localhost part of the Web. Sign up for the free one month trial here. To use the wrapper Pagekite needs to be installed and initialized with your user information. After that it can be initializedwith these optiosn:

  • name - Your pagekite username
  • domain - Your pagekite domain (default: .pagekite.me)
  • port - The port to share (default: 80)
  • timeout - The timeout (in ms) after which the process will be killed if it hasn't reported back a valid URL (default: 30000)
  • executable - The pagekite executable (default: pagekite.py)
var miner = require('miner');
miner.pagekite({
  name : 'myname',
  port : 8080
}, function(error, url, tunnel) {
  tunnel.kill();
});