0.1.0 • Published 3 years ago

@advanced-rest-client/arc-proxy v0.1.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 years ago

ARC proxy server

A node web server that runs on Koa that provides an API to proxy HTTP request.

The intended use is to proxy ARC/API Console requests from a web browser without CORS restrictions.

Usage

Installation

npm i @advanced-rest-client/arc-proxy

Running the server

import Server from '@advanced-rest-client/arc-proxy';

(async () => {
  const httpPort = 8080;
  const sslPort = 8081;

  const sslOptions = {
    key: fs.readFileSync('key.pem'),
    cert: fs.readFileSync('cert.pem')
  };
  
  const srv = new Server();
  srv.setupRoutes('/api/v1'); // optional prefix for the API routes.

  await srv.startHttp(httpPort);
  await srv.startSsl(sslOptions, httpPort);

  // when ready...
  await srv.stopHttp(); 
  await srv.stopSsl(); 
})();

API routes

See the API spec in spec/ folder for more details.

Notes:

  • Examples assume no API prefix and port 8080
  • Example responses are formatted for readability

Proxying a request

The proxy server uses the ARC request object definition for the request.

POST /proxy HTTP/1.1
Host: localhost:8080
Content-Type: application/json
content-length: ...

{
  "request": {
    "url": "https://httpbin.org/get",
    "method": "GET",
    "headers": "x-test: true"
  },
  "config": {
    "followRedirects": false
  }
}

Proxy response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: ...
Date: Sat, 06 Nov 2021 00:01:15 GMT
Connection: keep-alive
Keep-Alive: timeout=5

{
  "response": {
    "status": 200,
    "statusText": "OK",
    "headers: "...",
    "payload": {
      "type": "Buffer",
      "data": [102, 168, ...]
    },
    "timings": {
      "connect": 10,
      "receive": 2,
      "send": 15,
      "wait": 2,
      "blocked": 0
      "dns": 4
      "ssl": 12
    },
    "loadingTime": 123,
    "redirects": [],
    "size": {
      "request": 1234,
      "response": 5678
    }
  },
  "transport": {
    "httpMessage": {
      "type": "Buffer",
      "data": [102, 168, ...]
    },
    "startTime": 123456789,
    "endTime": 123456789
  }
}

Development

git clone https://github.com/advanced-rest-client/arc-proxy
cd arc-proxy
npm install

Running the tests

npm test

Credits and license

This library has been created by Pawel Uchida-Psztyc on his own free time. It is licensed under Apache 2 license.