Skip to content

Commit 7c17d5c

Browse files
committed
feat: report package identity in requests/responses
1 parent fc5c925 commit 7c17d5c

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

lib/client.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const WebSocket = require('ws');
55
const { ExponentialStrategy } = require('backoff');
66
const {CONNECTING, OPEN, CLOSING, CLOSED} = WebSocket;
77
const { TimeoutError, UnexpectedHttpResponse, RPCFrameworkError, RPCGenericError, RPCMessageTypeNotSupportedError } = require('./errors');
8-
const { getErrorPlainObject, createRPCError } = require('./util');
8+
const { getErrorPlainObject, createRPCError, getPackageIdent } = require('./util');
99
const Queue = require('./queue');
1010
const EventBuffer = require('./event-buffer');
1111
const standardValidators = require('./standard-validators');
@@ -411,7 +411,9 @@ class RPCClient extends EventEmitter {
411411
// defaults
412412
noDelay: true,
413413
signal: this._wsAbortController.signal,
414-
headers: {},
414+
headers: {
415+
'user-agent': getPackageIdent()
416+
},
415417
}, this._options.wsOpts ?? {});
416418

417419
Object.assign(wsOpts.headers, this._options.headers);

lib/server.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const {createServer} = require('http');
44
const RPCServerClient = require('./server-client');
55
const { abortHandshake, parseSubprotocols } = require('./ws-util');
66
const standardValidators = require('./standard-validators');
7+
const { getPackageIdent } = require('./util');
78

89
class RPCServer extends EventEmitter {
910
constructor(options) {
@@ -38,6 +39,7 @@ class RPCServer extends EventEmitter {
3839
},
3940
});
4041

42+
this._wss.on('headers', h => h.push(`Server: ${getPackageIdent()}`));
4143
this._wss.on('error', err => this.emit('error', err));
4244
this._wss.on('connection', this._onConnection.bind(this));
4345
}
@@ -223,6 +225,7 @@ class RPCServer extends EventEmitter {
223225
const httpServer = createServer({
224226
noDelay: true,
225227
}, (req, res) => {
228+
res.setHeader('Server', getPackageIdent());
226229
res.statusCode = 404;
227230
res.end();
228231
});

lib/util.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const errors = require('./errors');
2+
const package = require('../package.json');
23

34
const rpcErrorLUT = {
45
'GenericError' : errors.RPCGenericError,
@@ -17,6 +18,10 @@ const rpcErrorLUT = {
1718
'RpcFrameworkError' : errors.RPCFrameworkError,
1819
};
1920

21+
function getPackageIdent() {
22+
return `${package.name}/${package.version} (${process.platform})`;
23+
}
24+
2025
function getErrorPlainObject(err) {
2126
try {
2227

@@ -44,4 +49,5 @@ function createRPCError(type, message, details) {
4449
module.exports = {
4550
getErrorPlainObject,
4651
createRPCError,
52+
getPackageIdent,
4753
};

0 commit comments

Comments
 (0)