Package Exports
- microtunnel-client
- microtunnel-client/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (microtunnel-client) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
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 requestappCredFile
Optional - Relative path of the credentials file - Default: enviroment varAPP_CRED
authServersFile
Optional - Relative path of the autherized clients file - Default: enviroment varAUTH_SRVS
customCa
Optional - Replace default Mozilla wellknowed CA with your custom CA as result offs.readFileSync( './ca.cert' )
Methods
authReq.get
authReq.get( serverName: String, serverPath: String )
Parameters
serverName
Required - The name of the server as written in authServers.jsonserverPath
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.jsonserverPath
Required - The path of the server you want to fetchobj
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