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

craydent-proxy

v1.2.2

Published

Proxy service in node

Downloads

1

Readme

Craydent Reverse Proxy 1.2.2

by Clark Inada

This module is a reverse proxy server implemented in node. There are 2 ways to use: global install/standalone or as a module. When used as a standalone, a config file is create in /var/craydent/config/craydent-proxy/pconfig.json and will auto update the routes if the file is changed. This happens as well when used as a module and a file is provided as a config. This eliminates the need to restart the server for a configuration and/or route update.

Standalone

$ npm install -g craydent-proxy
$ sudo cproxy

Once installed and configured, the cproxy command without arguments will restart the craydent-proxy server.

CLI

All * arguments are required.

Version

$ sudo cproxy version;
$ sudo cproxy --version;
$ sudo cproxy -v;

cproxy version takes no arguments. This will output the current verion of Craydent Proxy.

Initialize

$ sudo cproxy '{{80,443}}' '*' '{{host:port}}' {{/var/path/to/route_definition.json}} {{/var/path/to/ssl.key}} {{/var/path/to/ssl.cert}} {{/var/path/to/ssl.ca}} true

$ sudo cproxy -p '{{80,443}}' -h '*' -e '{{host:port}}' -j {{/var/path/to/route_definition.json}} -k {{/var/path/to/ssl.key}} -c {{/var/path/to/ssl.cert}} -a {{/var/path/to/ssl.ca}} -b

$ sudo cproxy --port '{{80,443}}' --host '*' --default '{{host:port}}' --route-json {{/var/path/to/route_definition.json}} --key {{/var/path/to/ssl.key}} --cert {{/var/path/to/ssl.cert}} --authority {{/var/path/to/ssl.ca}} --enable

cproxy can take up to 7 arguments: ports, hosts, default host/port, and route_definition.json (file path or json string). When arguments are missing, the CLI will ask a series of questions to obtain the missing arguments.

  1. port - Comma delimited list of ports to run proxy on. (-p,--port)
  2. host - Comma delimited list of domains able to access proxy. (-h,--host)
  3. route default - default host and port when a requested route is not found. (default is localhost:8080) (-e,--default)
  4. route definition - json file or string defining the routes to initialize proxy with. Example json is shown below: (-j,--route-json)
  5. domain - fully qualified domain name. (-d,--domain)
  6. key - private key (file path or string). (-k,--key)
  7. certificate - certificate (file path or string). (-c,--cert)
  8. certificate authority - certificate authority to check agains (file path or string). (-a,--authority)
  9. enable auto start - flag to add to boot. (-b,--enable)

Note: routes are processed/matched in order. If there are more hosts then ports (or vise versa) the last port that was provided is used.

{
    // these are the domains which the server be requested on 
    "sub.example.com": [{
        // name is the identifier of the route and must be unique (best practice would be to prefix name with project name)
        "name": "project1_websocket"
        // host is the destination to forward the request
        "host": ["localhost"],
        // port is the port to forward on the destination
        "port": ["3000"],
        // verbs are the allowable methods on the destination
        "verbs": ["get", "post", "put", "delete"],
        // refering domains allowed to use this route
        "allow": ["*"],
        // headers are used to overwrite the headers being passed iff it is passed
        "headers": {},
        // destination path prefix
        "path": "/websocket/",
        // request path for this route
        "request_path": "/websocket/*"
        // http authentication
        "http_auth": true
        "http_user": {
            "username": {
                password: "password"
            }
        }
    },{
        "name": "project1_home"
        "host": ["craydent.com"],
        "port": ["8080"],
        "verbs": ["get", "post", "put", "delete"],
        "allow": ["*"],
        "headers": {},
        "path": "/home/",
        "request_path": "/*",\
        "http_auth": false
    }],
    "example2.com": [{
        "name": "project2_root"
        "host": ["localhost"],
        "port": ["3001"],
        "verbs": ["get", "post", "put", "delete"],
        "allow": ["*"],
        "headers": {},
        "path": "/",
        "request_path": "/*",
        "http_auth": false
    }]
}

Notes: In the above example, when a request has been made to the proxy server with sub.example.com or example2.com, the proxy will forward the request. In all other cases, the proxy will respond with a 400 Bad Request. The first route configures the server to forward the request when a request is made like http://sub.example.com/websocket/index.html. http://sub.example.com/websocket/index.html will be forwarded to http://localhost:3000/websocket/index.html but will first check access via http authentication. The second route for sub.example.com configures all other requests to the server to forward to http://craydent.com:8080. http://sub.example.com/index.html will be forwarded to http://craydent.com:8080/home/index.html.

Enable auto start

$ sudo cproxy autostart -b

$ sudo cproxy autostart --enable

cproxy autostart takes 1 argument. This will enable auto start on reboot.

  1. enable auto start - flag to add to boot. (-b,--enable)

Disable auto start

$ sudo cproxy autostart -s

$ sudo cproxy autostart --disable

cproxy autostart takes 1 argument. This will enable auto start on reboot.

  1. disable auto start - flag to remove from boot. (-s,--disable)

Stop/Terminate

$ sudo cproxy stop

cproxy stop takes no arguments. This will terminate the craydent-proxy process.

Reset

$ sudo cproxy reset

cproxy reset takes no arguments. This will remove configuration/log files and reset the state to a freshly installed state.

Uninstall

$ sudo cproxy uninstall

cproxy uninstall takes no arguments. This will remove configuration/log files and and uninstalled the global module.

Add Host

$ sudo cproxy addhost  '{{host1,host2}}'

$ sudo cproxy addhost -h '{{host1,host2}}'

$ sudo cproxy addhost  --host '{{host1,host2}}'

cproxy addhost takes 1 argument. When argument is missing, the CLI will ask for the missing arguments.

  1. hosts - hosts the able to access proxy via TCP (comma delimit when multiple hosts). (-h,--host)

Remove Host

$ sudo cproxy rmhost  '{{host1,host2}}'

$ sudo cproxy rmhost -h '{{host1,host2}}'

$ sudo cproxy rmhost  --host '{{host1,host2}}'

cproxy rmhost takes 1 argument. When argument is missing, the CLI will ask for the missing arguments.

  1. hosts - hosts the able to access proxy via TCP (comma delimit when multiple hosts). (-h,--host)

Add Port & Protocol

$ sudo cproxy addlistener  '{{80,443}}' '{{http,https}}'

$ sudo cproxy addlistener -p '{{80,443}}' -o '{{http,https}}'

$ sudo cproxy addlistener  --port '{{80,443}}' --protocol '{{http,https}}'

cproxy addhost takes up to 2 arguments. When arguments are missing, the CLI will ask a series of questions to obtain the missing arguments.

  1. ports - ports the proxy will listen on (comma delimit when multiple ports). (-p,--port)
  2. protocol - protocol for these ports (comma delimit when multiple protocols). (-o,--protocol)

Remove Port & Protocol

$ sudo cproxy rmlistener  '{{80,443}}'

$ sudo cproxy rmlistener -p '{{80,443}}'

$ sudo cproxy rmlistener  --port '{{80,443}}'

cproxy rmlistener takes 1 argument. When argument is missing, the CLI will ask for the missing arguments.

  1. ports - ports the proxy to remove (comma delimit when multiple ports). (-p,--port)

Add Route

$ sudo cproxy add '{{www.example.com}}' '{{example route}}' '{{localhost,example2.com}}' '{{3000,80}}' '{{/request/path/*}}' '{{/destination path}}' '{{auth user}}' '{{auth password}}' '{{headers as json}}}' '{{allowed domains (default:*)}}' '{{allowed methods (default:get,post,put,delete)}}' '{{route index(default:adds at the end)}}' '{{access level (default:*)}}'

$ sudo cproxy add -d '{{www.example.com}}' -n '{{example route}}' -h '{{localhost,example2.com}}' -p '{{3000,80}}' -r '{{/request/path/*}}' -x '{{/destination path}}' -u '{{auth user}}' -w '{{auth password}}' -e '{{headers as json}}}' -a '{{allowed domains (default:*)}}' -m '{{allowed methods (default:get,post,put,delete)}}' -i '{{route index(default:adds at the end)}}' -l '{{access level (default:*)}}'

$ sudo cproxy add --domain '{{www.example.com}}' --name '{{example route}}' --host '{{localhost,example2.com}}' --port '{{3000,80}}' --request-path '{{/request/path/*}}' --destination-path '{{/destination path}}' --user '{{auth user}}' --password '{{auth password}}' --header '{{headers as json}}}' --allowed-domain '{{allowed domains (default:*)}}' --allowed-method '{{allowed methods (default:get,post,put,delete)}}' --index '{{route index(default:adds at the end)}}' --access '{{access level (default:*)}}'

cproxy add can take 13 arguments. When arguments are missing, the CLI will ask a series of questions to obtain the missing arguments.

  1. domain - fully qualified domain name. (-d,--domain)
  2. name - name/alias of the route. (-n,--name)
  3. hosts - hosts the request will forward to (comma delimited). (-h,--host)
  4. ports - ports the request will forward to (comma delimited). (-p,--port)
  5. request path - path being requested. (-r,--request-path)
  6. destination path - destination path to forward to. (-x,--destination-path)
  7. http auth username - username to login with to access the route (HTTP AUTH). (-u,--user)
  8. http auth password - password to login with to access the route (HTTP AUTH). (-w,--password)
  9. headers - (JSON) headers to override when the request header exists. (-e,--header)
  10. allowed domains - domains allowed to access the route. (-a,--allowed-domain)
  11. allowed http methods - http methods allowed on the route (ex: get, post, put, delete). (-m,--allowed-method)
  12. route index - precedence index to insert in routes array. (-i,--index)
  13. access level - access level to give to the user (HTTP AUTH). (-l,--access)

Remove Route(s)

$ sudo cproxy rm '{{www.example.com}}' '{{example route}}'

$ sudo cproxy rm -d '{{www.example.com}}' -n '{{example route}}'

$ sudo cproxy rm --domain '{{www.example.com}}' --name '{{example route}}'

cproxy rm takes 2 arguments.

  1. *domain - fully qualified domain name of the route. (-d,--domain)
  2. name - name/alias of the route to be removed. (-n,--name) ###**Note: If name is omitted, all routes for that domain will be removed.

View Route

$ sudo cproxy cat '{{www.example.com}}' '{{example route}}'

$ sudo cproxy cat -d '{{www.example.com}}' -n '{{example route}}'

$ sudo cproxy cat --domain '{{www.example.com}}' --name '{{example route}}'

cproxy cat takes 2 arguments.

  1. domain - fully qualified domain name of the route. (-d,--domain)
  2. name - name/alias of the route. (-n,--name)

Load Routes

$ sudo cproxy load  '{{/var/path/to/route_definition.json}}' '{{route index(default:adds at the end)}}'

$ sudo cproxy load -j '{{/var/path/to/route_definition.json}}' -i '{{route index(default:adds at the end)}}'

$ sudo cproxy load  --route-json '{{/var/path/to/route_definition.json}}' --index '{{route index(default:adds at the end)}}'

cproxy load takes up to 2 arguments. When arguments are missing, the CLI will ask a series of questions to obtain the missing arguments.

  1. route definition - json file (absolute path) or string defining the routes to initialize proxy with. Example json is shown below: (-j,--route-json)
  2. route index - precedence index to insert in routes array. (-i,--index)

Enable HTTP Authentication

$ sudo cproxy enableauth '{{www.example.com}}' '{{example route}}'

$ sudo cproxy enableauth -d '{{www.example.com}}' -n '{{example route}}'

$ sudo cproxy enableauth --domain '{{www.example.com}}' --name '{{example route}}'

cproxy enableauth takes 2 arguments.

  1. domain - fully qualified domain name of the route. (-d,--domain)
  2. name - name/alias of the route. (-n,--name) ###**Note: If domain is omitted, HTTP authentication will be enabled for all routes for all domains. ###**Note: If name is omitted, HTTP authentication will be enabled for all routes for that domain.

Disable HTTP Authentication

$ sudo cproxy disableauth '{{www.example.com}}' '{{example route}}'

$ sudo cproxy disableauth -d '{{www.example.com}}' -n '{{example route}}'

$ sudo cproxy disableauth --domain '{{www.example.com}}' --name '{{example route}}'

cproxy enableauth takes 2 arguments.

  1. domain - fully qualified domain name of the route. (-d,--domain)
  2. name - name/alias of the route. (-n,--name) ###**Note: If domain is omitted, HTTP authentication will be disabled for all routes for all domains. ###**Note: If name is omitted, HTTP authentication will be disabled for all routes for that domain.

Add HTTP User to route

$ sudo cproxy adduser '{{www.example.com}}' '{{route name}}' '{{username}}' '{{password}}'

$ sudo cproxy adduser -d '{{www.example.com}}' -n '{{route name}}' -u '{{username}}' -p '{{password}}'

$ sudo cproxy adduser --domain '{{www.example.com}}' --name '{{route name}}' --user '{{username}}' --password '{{password}}'

cproxy adduser can take up to 4 arguments.

  1. domain - domain where the user should be added. (-d,--domain)
  2. route name - name/alias of the route the user should be added to. (-n,--name)
  3. *username - username to add. (-u,--user)
  4. *password - password for the username. (-p,--password)

Remove HTTP User from route

$ sudo cproxy rmuser '{{www.example.com}}' '{{route name}}' '{{username}}'

$ sudo cproxy rmuser -d '{{www.example.com}}' -n '{{route name}}' -u '{{username}}'

$ sudo cproxy rmuser --domain '{{www.example.com}}' --name '{{route name}}' -user '{{username}}'

cproxy rmuser takes 3 arguments.

  1. domain - domain where the user should be removed. (-d,--domain)
  2. route name - name/alias of the route the user should be removed from. (-n,--name)
  3. *username - username to remove. (-u,--user)

Update HTTP User in a specific route

$ sudo cproxy updateuser '{{www.example.com}}' '{{route name}}' '{{username}}' '{{password}}'

$ sudo cproxy updateuser -d '{{www.example.com}}' -n '{{route name}}' -u '{{username}}' -p '{{password}}'

$ sudo cproxy updateuser --domain '{{www.example.com}}' --name '{{route name}}' --password '{{password}}'

cproxy rmuser takes 4 argument.

  1. domain - domain where the user should be removed. (-d,--domain)
  2. route name - name/alias of the route the user should be removed from. (-n,--name)
  3. *username - username to remove. (-u,--user)
  4. *password - the new password for the username (-p,--password)

Add SSL certificate

$ sudo cproxy addssl '{{www.example.com}}' '{{/path/to/key}}' '{{/path/to/certificate}}' '{{/path/to/ca}}'

$ sudo cproxy addssl -d '{{www.example.com}}' -k '{{/path/to/key}}' -c '{{/path/to/certificate}}' -a '{{/path/to/ca}}'

$ sudo cproxy addssl --domain '{{www.example.com}}' --key '{{/path/to/key}}' --cert '{{/path/to/certificate}}' --authority '{{/path/to/ca}}'

cproxy addssl can take up to 4 arguments.

  1. domain - domain for the certificate. (-d,--domain)
  2. key - private key (file path or string). (-k,--key)
  3. certificate - certificate (file path or string). (-c,--cert)
  4. certificate authority - certificate authority to check agains (file path or string). (-a,--authority)

Remove SSL certificate

$ sudo cproxy rmssl '{{www.example.com}}'

$ sudo cproxy rmssl -d '{{www.example.com}}'

$ sudo cproxy rmssl --domain '{{www.example.com}}'

cproxy rmssl takes 1 argument.

  1. *domain - domain for the certificate. (-d,--domain)

Node.js module

$ npm i --save craydent-proxy

pconfig.json example & structure (this is the default that is used when no config is available) Note: If there are more hosts or ports than protocols the last protocol that was provided is used for the subsequent hosts and ports.

  • Valid protocols are:
  • http
  • https
  • ssl
  • tls
{
    "port" : ["80"],
    "host" : [""],
    "routes" : {},
    "protocol": [""],
    "certs": {},
    "DEFAULT": { "host": ["localhost"], "port": ["8080"] }
}
var Proxy = require('craydent-proxy');
var config = require('pconfig.json');
var server = new Proxy(config);
var Proxy = require('craydent-proxy');
var server = new Proxy('pconfig.json');
// default location of config is /var/craydent/config/craydent-proxy/pconfig.json
var Proxy = require('craydent-proxy');
var server = new Proxy();

Download

Craydent-Proxy is released under the Dual licensed under the MIT or GPL Version 2 licenses.