microtunnel-client
TypeScript icon, indicating that this package has built-in type declarations

1.0.8 • Public • Published

microtunnel-client

microtunnel-client is an axios based library to enable post-quantum protected communication between apps (it must be used with microtunnel-server). You can send any JSON-serializable data. It also uses supersphincs for app authentication, kyber-crystals for asymmetric encryption and symcryptor for symmetric encryption.

Installation

npm i microtunnel-client

Usage

First, you have to create app credentials and save them in a json file. Enter in module path typing cd path-to-your-project/node-modules/microtunnel-client and then run npm run -s cred-generate > ../../appCred.json to save the credentials in your project root.

// appCred.json
{
    // Supersphincs keys base-64 encoded
    "publicKey": "rPyoqSZrNNUVpjKdhGLDD4sjXd8lgIgnRBY2NP5n8PDDLSvoLoD5n4GjaxbAfSDjagBjN8zztUQTNG1EKO9IgpgTLkfkTkhWqdgkC/K3EQLh6AMCZ8snlnles2QrbHAy",
    "privateKey": "FKQ243eKoZ1zAdfXfGkzjcONsFwXbb2YliwoFSMFjNSs/KipJms01RWmMp2EYsMPiyNd3yWAiCdEFjY0/mfw8MkQY9Orp5MsbUAf54jM1iUhvEhaUJceqTG92ibMdu914IaJsN5+3hKHhAZ1o+dtspIY09zuZKNe48hEjlLwjg3DLSvoLoD5n4GjaxbAfSDjagBjN8zztUQTNG1EKO9IgpgTLkfkTkhWqdgkC/K3EQLh6AMCZ8snlnles2QrbHAy",

    // Random bytes base-64 encoded for ID
    "agent": "vwoA1JzkT6d7SXjIBoZ2egYlSn6Ajzge"
}

Then you have to create a JSON file containing servers info. In this example we have two apps named backEnd and sessions:

// authServers.json
{
    "backEnd": {
        "url": "http://127.0.0.1:3000",
        "publicKey": "X67kzs9zrKfbayvF5SIsulZzfUYHeTm6BoFTD/BWiryIcOWcaR8d6M4LpaOylCi4DqY59ABNt1nNnfFZjG4akE4hcKaMyx5ar9Uds2Op687uecLGWb0n6W+voSDKzMS8",
        "agent": "285gWsTqj3Gza+3AxJn1qrWzAvf/Lf5i"
    },
    "sessions": [
        {
            "url": "http://192.168.0.3:3000",
            "publicKey": "rPyoqSZrNNUVpjKdhGLDD4sjXd8lgIgnRBY2NP5n8PDDLSvoLoD5n4GjaxbAfSDjagBjN8zztUQTNG1EKO9IgpgTLkfkTkhWqdgkC/K3EQLh6AMCZ8snlnles2QrbHAy",
            "agent": "vwoA1JzkT6d7SXjIBoZ2egYlSn6Ajzge"
        },
        {
            "url": "http://192.168.0.4:3000",
            "publicKey": "UFOrl4Rtp/4sLvwsHG9bTBGQ9vf95L8WQJRvueRHKbOs+Hf2vRlVw/ZIF18vf1EV+q2voXYBAwE/uhPlH2IiAkFDC8p4vEr/4xQMl45U6Y8wfgJwjGNnUorD8z/AAyR2",
            "agent": "zzgU2bYvR0mRREkDz+sqAMOGNDBX7XrW"
        }
    ]
}

Then you can use it in your code:

const authReq = require( 'microtunnel-client' )( { appCredFile: './appCred.json', authServersFile: './authServers.json' } );
( async () => {
    try {
        let resp = await authReq.get( 'backEnd', '/page/2' );
        console.log( resp );
        resp = await authReq.post( 'sessions', '/another-route', { data: 'mydata' } );
        console.log( resp );
    } catch ( err ) {
        console.log( err );
    }
} )();

Configuration

require( 'microtunnel-client' )( options )

options

  • api Optional - Root path for microtunnel (note: must be the same for servers) - Default '/microtunnel'
  • timeout Optional - Axios timeout for each request
  • appCredFile Optional - Relative path of the credentials file - Default: enviroment var APP_CRED
  • authServersFile Optional - Relative path of the autherized clients file - Default: enviroment var AUTH_SRVS
  • customCa Optional - Replace default Mozilla wellknowed CA with your custom CA as result of fs.readFileSync( './ca.cert' )

Methods

authReq.get

authReq.get( serverName: String, serverPath: String )

Parameters

  • serverName Required - The name of the server as written in authServers.json
  • serverPath Required - The path of the server you want to fetch

Return

Decrypted JSON parsed data from server when Promise resolved else throw an Error

authReq.post

authReq.post( serverName: String, serverPath: String, obj )

Parameters

  • serverName Required - The name of the server as written in authServers.json
  • serverPath Required - The path of the server you want to fetch
  • obj Required - The data you want to send. It must be JSON serializable

Return

Decrypted JSON parsed data from server when Promise resolved else throw an Error

Dependencies (6)

Dev Dependencies (1)

Package Sidebar

Install

npm i microtunnel-client

Weekly Downloads

4

Version

1.0.8

License

GPL-3.0-or-later

Unpacked Size

51.6 kB

Total Files

5

Last publish

Collaborators

  • angy91m