
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
jsonscript-proxy
Advanced tools
Proxy server for scripted processing of other services using JSONScript
Proxy server for batch processing of other services using JSONScript.
To run proxy server from command line using configuration file:
npm install -g jsonscript-proxy
To add proxy to the existing express app
npm install jsonscript-proxy
jsproxy config.json
The parameter passed to proxy cli is the name of the config file that should be valid according to the config schema. See sample config file.
Options:
3000 by default/js by defaultSample proxy:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var jsonscriptProxy = require('jsonscript-proxy');
// app needs body parser for JSON even if no endpoint uses it.
// it is needed for JSONScript middleware
app.use(bodyParser.json());
/**
* The code below adds JSONScript proxy on the endpoint '/js'
* that allows processing any scripts combining existing services
*/
app.post('/js', jsonscriptProxy({
services: {
service1: { basePath: 'http://localhost:3001' },
service2: { basePath: 'http://localhost:3002' },
}
}));
app.listen(3000);
Now you can send POST requests to /js endpoint with the body containing the script and an optional data instance that will be processed by JSONScript interpreter. For example, with this request:
{
"script": {
"res1": { "$$service1.get": { "path": "/resource/1" } },
"res2": { "$$service2.get": { "path": "/resource/2" } }
}
}
the response will be a combination of two responses (both requests are processed in parallel):
{
"res1": {
"statusCode": 200,
"headers": { /* response headers for the 1st request */ },
"service": { "name": "service1", "basePath": "http://localhost:3001" },
"request": { "method": "get", "path": "/resource/1" },
"body": { /* response body 1 */ }
},
"res2": {
"statusCode": 200,
"headers": { /* response headers for the 2nd request */ },
"service": { "name": "service2", "basePath": "http://localhost:3002" },
"request": { "method": "get", "path": "/resource/2" },
"body": { /* response body 2 */ }
}
}
If option processResponse: "body" were used the result would have been:
{
"res1": { /* response body 1 */ },
"res2": { /* response body 2 */ }
}
Options passed to proxy middleware should be valid according to the options schema.
JSONScript also supports sequential evaluation, conditionals, data manipulation, functions etc. So you can implement an advanced logic in your script and it will be executed in the server without sending responses of individual requests to the client.
See JSONScript Language for more information.
Create express route handling function to process JSONScript. The second optional parameter is the existing instance of JSONScript interpreter, if it is not passed a new one will be created.
Both the script and the data instance should be properties of the request body:
{
"script": {
// JSONScript, can be an array
},
"data": {
// data instance that can be used from the script,
// can be array
}
}
See options schema.
Defaults:
{
services: {}, // must be specified and have at least one property
processResponse: undefined,
jsonscript: { strict: true },
Promise: undefined
}
"body" - return only response body if status code is < 300, throw an exception otherwise.services properties in options object should contain a map of services:
{
service1: {
basePath: '...',
processResponce: undefined
},
service2: {
// ...
},
// ...
}
basePath will be prepended for the path in the call to the service, processResponse, if specified, will be used to process responses from the service.
FAQs
Proxy server for scripted processing of other services using JSONScript
We found that jsonscript-proxy demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.