snyk-broker 4.136.0 → 4.137.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client-templates/jira/accept.json.sample +22 -0
- package/dist/lib/client/index.js +16 -9
- package/dist/lib/client/index.js.map +1 -1
- package/dist/lib/client/socket.js +24 -16
- package/dist/lib/client/socket.js.map +1 -1
- package/dist/lib/config.js +8 -7
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/filters.js +29 -5
- package/dist/lib/filters.js.map +1 -1
- package/dist/lib/relay.js +118 -38
- package/dist/lib/relay.js.map +1 -1
- package/dist/lib/replace-vars.js +6 -6
- package/dist/lib/replace-vars.js.map +1 -1
- package/dist/lib/server/index.js +84 -0
- package/dist/lib/server/index.js.map +1 -1
- package/dist/lib/server/socket.js +9 -1
- package/dist/lib/server/socket.js.map +1 -1
- package/dist/lib/stream-posts.js +107 -0
- package/dist/lib/stream-posts.js.map +1 -0
- package/dist/lib/webserver.js +5 -1
- package/dist/lib/webserver.js.map +1 -1
- package/dist/package.json +2 -2
- package/dist/tsconfig.tsbuildinfo +665 -13
- package/package.json +2 -2
|
@@ -66,6 +66,28 @@
|
|
|
66
66
|
"password": "${JIRA_PASSWORD}"
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
|
+
{
|
|
70
|
+
"//": "used to get createmeta for a jira project & issueType version 9 and above",
|
|
71
|
+
"method": "GET",
|
|
72
|
+
"path": "/rest/api/2/issue/createmeta/:project/issuetypes/:issue",
|
|
73
|
+
"origin": "https://${JIRA_HOSTNAME}",
|
|
74
|
+
"auth": {
|
|
75
|
+
"scheme": "basic",
|
|
76
|
+
"username": "${JIRA_USERNAME}",
|
|
77
|
+
"password": "${JIRA_PASSWORD}"
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"//": "used to get issue type information for version 9 or above",
|
|
82
|
+
"method": "GET",
|
|
83
|
+
"path": "/rest/api/2/issuetype/:issuetype",
|
|
84
|
+
"origin": "https://${JIRA_HOSTNAME}",
|
|
85
|
+
"auth": {
|
|
86
|
+
"scheme": "basic",
|
|
87
|
+
"username": "${JIRA_USERNAME}",
|
|
88
|
+
"password": "${JIRA_PASSWORD}"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
69
91
|
{
|
|
70
92
|
"//": "used to get jira issue",
|
|
71
93
|
"method": "GET",
|
package/dist/lib/client/index.js
CHANGED
|
@@ -9,6 +9,7 @@ module.exports = ({ port = null, config = {}, filters = {} }) => {
|
|
|
9
9
|
const identifyingMetadata = {
|
|
10
10
|
version,
|
|
11
11
|
filters,
|
|
12
|
+
capabilities: ['post-streams'],
|
|
12
13
|
};
|
|
13
14
|
const io = socket({
|
|
14
15
|
token: config.brokerToken,
|
|
@@ -52,14 +53,17 @@ module.exports = ({ port = null, config = {}, filters = {} }) => {
|
|
|
52
53
|
const auth = auths[i];
|
|
53
54
|
const rawCred = rawCreds[i];
|
|
54
55
|
let { data, errorOccurred: err } = await checkCredentials(auth, config, brokerClientValidationMethod, brokerClientValidationTimeoutMs, isJsonResponse);
|
|
55
|
-
data.maskedCredentials =
|
|
56
|
+
data.maskedCredentials =
|
|
57
|
+
rawCred.length <= 6
|
|
58
|
+
? '***'
|
|
59
|
+
: `${rawCred.substring(0, 3)}***${rawCred.substring(rawCred.length - 3)}`;
|
|
56
60
|
validationResults.push(data);
|
|
57
61
|
errorOccurred = err;
|
|
58
|
-
logger.info(
|
|
62
|
+
logger.info('Credentials checked');
|
|
59
63
|
}
|
|
60
64
|
}
|
|
61
65
|
else {
|
|
62
|
-
logger.info(
|
|
66
|
+
logger.info('No credentials specified - checking if target can be accessed without credentials');
|
|
63
67
|
let { data, errorOccurred: err } = await checkCredentials(null, config, brokerClientValidationMethod, brokerClientValidationTimeoutMs, isJsonResponse);
|
|
64
68
|
data.maskedCredentials = null;
|
|
65
69
|
validationResults.push(data);
|
|
@@ -92,8 +96,8 @@ module.exports = ({ port = null, config = {}, filters = {} }) => {
|
|
|
92
96
|
};
|
|
93
97
|
};
|
|
94
98
|
function credsFromHeader(s) {
|
|
95
|
-
if (s.indexOf(
|
|
96
|
-
return s.substring(s.indexOf(
|
|
99
|
+
if (s.indexOf(' ') >= 0) {
|
|
100
|
+
return s.substring(s.indexOf(' ') + 1);
|
|
97
101
|
}
|
|
98
102
|
else {
|
|
99
103
|
return s;
|
|
@@ -104,10 +108,11 @@ function loadCredentialsFromConfig(config) {
|
|
|
104
108
|
let rawCreds = [];
|
|
105
109
|
if (config.brokerClientValidationAuthorizationHeaderPool) {
|
|
106
110
|
auths = config.brokerClientValidationAuthorizationHeaderPool;
|
|
107
|
-
rawCreds =
|
|
111
|
+
rawCreds =
|
|
112
|
+
config.brokerClientValidationAuthorizationHeaderPool.map(credsFromHeader);
|
|
108
113
|
}
|
|
109
114
|
else if (config.brokerClientValidationBasicAuthPool) {
|
|
110
|
-
auths = config.brokerClientValidationBasicAuthPool.map(s => `Basic ${Buffer.from(s).toString('base64')}`);
|
|
115
|
+
auths = config.brokerClientValidationBasicAuthPool.map((s) => `Basic ${Buffer.from(s).toString('base64')}`);
|
|
111
116
|
rawCreds = config.brokerClientValidationBasicAuthPool;
|
|
112
117
|
}
|
|
113
118
|
else if (config.brokerClientValidationAuthorizationHeader) {
|
|
@@ -145,7 +150,8 @@ async function checkCredentials(auth, config, brokerClientValidationMethod, brok
|
|
|
145
150
|
agentOptions: {
|
|
146
151
|
ca: config.caCert,
|
|
147
152
|
},
|
|
148
|
-
})
|
|
153
|
+
})
|
|
154
|
+
.then((response) => {
|
|
149
155
|
// test logic requires to surface internal data
|
|
150
156
|
// which is best not exposed in production
|
|
151
157
|
if (process.env.TAP) {
|
|
@@ -166,7 +172,8 @@ async function checkCredentials(auth, config, brokerClientValidationMethod, brok
|
|
|
166
172
|
}
|
|
167
173
|
errorOccurred = false;
|
|
168
174
|
data.ok = true;
|
|
169
|
-
})
|
|
175
|
+
})
|
|
176
|
+
.catch((error) => {
|
|
170
177
|
// test logic requires to surface internal data
|
|
171
178
|
// which is best not exposed in production
|
|
172
179
|
if (process.env.TAP) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/client/index.js"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,EAAE,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACnC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAEtC,MAAM,CAAC,OAAO,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/client/index.js"],"names":[],"mappings":"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"}
|
|
@@ -2,21 +2,7 @@ require('../patch-https-request-for-proxying');
|
|
|
2
2
|
const Primus = require('primus');
|
|
3
3
|
const relay = require('../relay');
|
|
4
4
|
const logger = require('../log');
|
|
5
|
-
|
|
6
|
-
if (!token) {
|
|
7
|
-
// null, undefined, empty, etc.
|
|
8
|
-
logger.error({ token }, 'missing client token');
|
|
9
|
-
const error = new ReferenceError('BROKER_TOKEN is required to successfully identify itself to the server');
|
|
10
|
-
error.code = 'MISSING_BROKER_TOKEN';
|
|
11
|
-
throw error;
|
|
12
|
-
}
|
|
13
|
-
if (!url) {
|
|
14
|
-
// null, undefined, empty, etc.
|
|
15
|
-
logger.error({ url }, 'missing broker url');
|
|
16
|
-
const error = new ReferenceError('BROKER_SERVER_URL is required to connect to the broker server');
|
|
17
|
-
error.code = 'MISSING_BROKER_SERVER_URL';
|
|
18
|
-
throw error;
|
|
19
|
-
}
|
|
5
|
+
function createWebSocket(token, url, config, filters, identifyingMetadata) {
|
|
20
6
|
const Socket = Primus.createSocket({
|
|
21
7
|
transformer: 'engine.io',
|
|
22
8
|
parser: 'EJSON',
|
|
@@ -37,6 +23,9 @@ module.exports = ({ url, token, filters, config, identifyingMetadata }) => {
|
|
|
37
23
|
pong: parseInt(config.socketPongTimeout) || 10000,
|
|
38
24
|
timeout: parseInt(config.socketConnectTimeout) || 10000,
|
|
39
25
|
});
|
|
26
|
+
io.on('identify', (serverData) => {
|
|
27
|
+
io.capabilities = serverData.capabilities;
|
|
28
|
+
});
|
|
40
29
|
io.on('reconnect scheduled', (opts) => {
|
|
41
30
|
const attemptIn = Math.floor(opts.scheduled / 1000);
|
|
42
31
|
logger.warn(`Reconnect retry #${opts.attempt} of ${opts.retries} in about ${attemptIn}s`);
|
|
@@ -52,7 +41,7 @@ module.exports = ({ url, token, filters, config, identifyingMetadata }) => {
|
|
|
52
41
|
// RS note: this bind doesn't feel right, it feels like a sloppy way of
|
|
53
42
|
// getting the filters into the request function.
|
|
54
43
|
io.on('chunk', streamingResponse(token));
|
|
55
|
-
io.on('request', response());
|
|
44
|
+
io.on('request', response(token));
|
|
56
45
|
io.on('error', ({ type, description }) => {
|
|
57
46
|
if (type === 'TransportError') {
|
|
58
47
|
logger.error({ type, description }, 'Failed to connect to broker server');
|
|
@@ -69,8 +58,27 @@ module.exports = ({ url, token, filters, config, identifyingMetadata }) => {
|
|
|
69
58
|
io.on('close', () => {
|
|
70
59
|
logger.warn({ url, token }, 'websocket connection to the broker server was closed');
|
|
71
60
|
});
|
|
61
|
+
io.socketVersion = 1;
|
|
62
|
+
io.socketType = 'client';
|
|
72
63
|
// only required if we're manually opening the connection
|
|
73
64
|
// io.open();
|
|
74
65
|
return io;
|
|
66
|
+
}
|
|
67
|
+
module.exports = ({ url, token, filters, config, identifyingMetadata }) => {
|
|
68
|
+
if (!token) {
|
|
69
|
+
// null, undefined, empty, etc.
|
|
70
|
+
logger.error({ token }, 'missing client token');
|
|
71
|
+
const error = new ReferenceError('BROKER_TOKEN is required to successfully identify itself to the server');
|
|
72
|
+
error.code = 'MISSING_BROKER_TOKEN';
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
if (!url) {
|
|
76
|
+
// null, undefined, empty, etc.
|
|
77
|
+
logger.error({ url }, 'missing broker url');
|
|
78
|
+
const error = new ReferenceError('BROKER_SERVER_URL is required to connect to the broker server');
|
|
79
|
+
error.code = 'MISSING_BROKER_SERVER_URL';
|
|
80
|
+
throw error;
|
|
81
|
+
}
|
|
82
|
+
return createWebSocket(token, url, config, filters, identifyingMetadata);
|
|
75
83
|
};
|
|
76
84
|
//# sourceMappingURL=socket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../lib/client/socket.js"],"names":[],"mappings":"AAAA,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAE/C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACjC,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEjC,
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../../lib/client/socket.js"],"names":[],"mappings":"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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -17,9 +17,9 @@ function expandValue(obj, value) {
|
|
|
17
17
|
const variableMatcher = value.match(variableRegex);
|
|
18
18
|
if (variableMatcher) {
|
|
19
19
|
for (const key of variableMatcher) {
|
|
20
|
-
if (key[0] ===
|
|
20
|
+
if (key[0] === '$' && obj[key.slice(1) + '_POOL']) {
|
|
21
21
|
keyWithPool = key.slice(1);
|
|
22
|
-
poolFound =
|
|
22
|
+
poolFound = key.slice(1) + '_POOL';
|
|
23
23
|
break;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -31,14 +31,14 @@ function expandValue(obj, value) {
|
|
|
31
31
|
pool = obj[poolFound];
|
|
32
32
|
}
|
|
33
33
|
else {
|
|
34
|
-
pool = obj[poolFound].split(
|
|
34
|
+
pool = obj[poolFound].split(',').map((s) => s.trim());
|
|
35
35
|
obj[poolFound] = pool;
|
|
36
36
|
}
|
|
37
37
|
for (const o of pool) {
|
|
38
38
|
values.push(value.replace(variableRegex, (all, key) => {
|
|
39
39
|
if (key[0] === '$') {
|
|
40
40
|
const keyToReplace = key.slice(1);
|
|
41
|
-
return keyToReplace === keyWithPool ? o :
|
|
41
|
+
return keyToReplace === keyWithPool ? o : obj[keyToReplace] || key;
|
|
42
42
|
}
|
|
43
43
|
return key;
|
|
44
44
|
}));
|
|
@@ -61,7 +61,7 @@ function expand(obj) {
|
|
|
61
61
|
const value = expandValue(obj, obj[key]);
|
|
62
62
|
if (value && Array.isArray(value)) {
|
|
63
63
|
// This will get camel-cased later on
|
|
64
|
-
obj[
|
|
64
|
+
obj[key + '_POOL'] = value;
|
|
65
65
|
}
|
|
66
66
|
else if (value !== obj[key]) {
|
|
67
67
|
obj[key] = value;
|
|
@@ -81,8 +81,9 @@ if (res.caCert) {
|
|
|
81
81
|
res.caCert = fs.readFileSync(path.resolve(process.cwd(), res.caCert));
|
|
82
82
|
}
|
|
83
83
|
for (const [key, value] of Object.entries(res)) {
|
|
84
|
-
if ((key.endsWith(
|
|
85
|
-
|
|
84
|
+
if ((key.endsWith('Pool') || key.endsWith('_POOL')) &&
|
|
85
|
+
!Array.isArray(value)) {
|
|
86
|
+
res[key] = value.split(',').map((s) => s.trim());
|
|
86
87
|
}
|
|
87
88
|
}
|
|
88
89
|
module.exports = res;
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.js"],"names":[],"mappings":"AAAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAEvC,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../lib/config.js"],"names":[],"mappings":"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"}
|
package/dist/lib/filters.js
CHANGED
|
@@ -42,7 +42,7 @@ module.exports = (ruleSource) => {
|
|
|
42
42
|
// array of entries with
|
|
43
43
|
const tests = rules.map((entry) => {
|
|
44
44
|
const keys = [];
|
|
45
|
-
let { method, origin, path: entryPath, valid } = entry;
|
|
45
|
+
let { method, origin, path: entryPath, valid, requiredCapabilities, } = entry;
|
|
46
46
|
const baseOrigin = origin;
|
|
47
47
|
const { stream } = entry;
|
|
48
48
|
method = (method || 'get').toLowerCase();
|
|
@@ -65,6 +65,7 @@ module.exports = (ruleSource) => {
|
|
|
65
65
|
logger.info({ method, path: entryPath }, 'adding new filter rule');
|
|
66
66
|
const regexp = pathRegexp(entryPath, keys);
|
|
67
67
|
return (req) => {
|
|
68
|
+
var _a, _b;
|
|
68
69
|
// check the request method
|
|
69
70
|
if (req.method.toLowerCase() !== method && method !== 'any') {
|
|
70
71
|
return false;
|
|
@@ -136,6 +137,23 @@ module.exports = (ruleSource) => {
|
|
|
136
137
|
return false;
|
|
137
138
|
}
|
|
138
139
|
}
|
|
140
|
+
if (requiredCapabilities) {
|
|
141
|
+
let matchedAll = true;
|
|
142
|
+
for (const c of requiredCapabilities) {
|
|
143
|
+
if (!((_a = req === null || req === void 0 ? void 0 : req.locals) === null || _a === void 0 ? void 0 : _a.capabilities.includes(c))) {
|
|
144
|
+
matchedAll = false;
|
|
145
|
+
logger.warn({
|
|
146
|
+
path: entryPath,
|
|
147
|
+
capability: c,
|
|
148
|
+
clientCapabilities: (_b = req === null || req === void 0 ? void 0 : req.locals) === null || _b === void 0 ? void 0 : _b.capabilities,
|
|
149
|
+
}, 'client does not report support for capability');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (!matchedAll) {
|
|
153
|
+
// We have to throw to avoid it getting approved by a generic matcher later on
|
|
154
|
+
throw new Error('client does not support all required capabilities for endpoint');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
139
157
|
const origin = replace(baseOrigin, config);
|
|
140
158
|
logger.debug({ path: entryPath, origin, url, querystring }, 'rule matched');
|
|
141
159
|
querystring = querystring ? `?${querystring}` : '';
|
|
@@ -149,12 +167,18 @@ module.exports = (ruleSource) => {
|
|
|
149
167
|
return (payload, callback) => {
|
|
150
168
|
let res = false;
|
|
151
169
|
logger.debug({ rulesCount: tests.length }, 'looking for a rule match');
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
170
|
+
try {
|
|
171
|
+
for (const test of tests) {
|
|
172
|
+
res = test(payload);
|
|
173
|
+
if (res) {
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
156
176
|
}
|
|
157
177
|
}
|
|
178
|
+
catch (e) {
|
|
179
|
+
logger.warn({ error: e }, 'caught error checking request against rules');
|
|
180
|
+
res = false;
|
|
181
|
+
}
|
|
158
182
|
if (!res) {
|
|
159
183
|
return callback(Error('blocked'));
|
|
160
184
|
}
|
package/dist/lib/filters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../lib/filters.js"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACvC,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC7C,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACvC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAC9C,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;AACjD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEhC,MAAM,eAAe,GAAG,CAAC,aAAa,EAAE,cAAc,GAAG,EAAE,EAAE,EAAE;IAC7D,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;QAClC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAElD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACxC,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,CAAC,OAAO,GAAG,CAAC,UAAU,EAAE,EAAE;IAC9B,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEnC,sBAAsB;IACtB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7B,KAAK,GAAG,UAAU,CAAC;KACpB;SAAM,IAAI,UAAU,EAAE;QACrB,IAAI;YACF,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;SAC7B;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,CAAC,IAAI,CACT,EAAE,UAAU,EAAE,KAAK,EAAE,EACrB,uCAAuC,CACxC,CAAC;SACH;KACF;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,IAAI,KAAK,CACb,wCAAwC,OAAO,KAAK,YAAY,CACjE,CAAC;KACH;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAE/D,wBAAwB;IACxB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,IAAI,
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../lib/filters.js"],"names":[],"mappings":"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"}
|
package/dist/lib/relay.js
CHANGED
|
@@ -13,16 +13,53 @@ const stream = require('stream');
|
|
|
13
13
|
const NodeCache = require('node-cache');
|
|
14
14
|
const metrics = require('./metrics');
|
|
15
15
|
const config = require('./config');
|
|
16
|
+
const { initStream, pipeStream } = require('./stream-posts');
|
|
17
|
+
class StreamResponseHandler {
|
|
18
|
+
constructor(streamingID, streamBuffer, response) {
|
|
19
|
+
this.streamSize = 0;
|
|
20
|
+
this.writeStatusAndHeaders = (statusAndHeaders) => {
|
|
21
|
+
this.response.status(statusAndHeaders.status).set(statusAndHeaders.headers);
|
|
22
|
+
};
|
|
23
|
+
this.writeChunk = (chunk, waitForDrainCb) => {
|
|
24
|
+
this.streamSize += chunk.length;
|
|
25
|
+
if (!this.streamBuffer.write(chunk) && waitForDrainCb) {
|
|
26
|
+
waitForDrainCb(this.streamBuffer);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
this.finished = () => {
|
|
30
|
+
this.streamBuffer.end();
|
|
31
|
+
streams.del(this.streamingID);
|
|
32
|
+
metrics.observeResponseSize({
|
|
33
|
+
bytes: this.streamSize,
|
|
34
|
+
isStreaming: true,
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
this.streamingID = streamingID;
|
|
38
|
+
this.streamBuffer = streamBuffer;
|
|
39
|
+
this.response = response;
|
|
40
|
+
}
|
|
41
|
+
static create(streamingID) {
|
|
42
|
+
const stream = streams.get(streamingID);
|
|
43
|
+
if (!stream) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const { streamBuffer, response } = stream;
|
|
47
|
+
return new StreamResponseHandler(streamingID, streamBuffer, response);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
16
50
|
module.exports = {
|
|
17
|
-
request:
|
|
18
|
-
response:
|
|
51
|
+
request: forwardHttpRequest,
|
|
52
|
+
response: forwardWebSocketRequest,
|
|
19
53
|
streamingResponse: streamResponseHandler,
|
|
54
|
+
StreamResponseHandler: StreamResponseHandler,
|
|
20
55
|
};
|
|
21
56
|
const streams = new NodeCache({
|
|
22
57
|
stdTTL: parseInt(config.cacheExpiry) || 3600,
|
|
23
58
|
checkperiod: parseInt(config.cacheCheckPeriod) || 60,
|
|
24
59
|
useClones: false,
|
|
25
60
|
});
|
|
61
|
+
/**
|
|
62
|
+
* @deprecated Deprecated in favour of {@link StreamResponseHandler} */
|
|
26
63
|
function streamResponseHandler(token) {
|
|
27
64
|
return (streamingID, chunk, finished, ioResponse) => {
|
|
28
65
|
const streamFromId = streams.get(streamingID);
|
|
@@ -61,7 +98,7 @@ function streamResponseHandler(token) {
|
|
|
61
98
|
// 3. Relay over websocket conn (logged)
|
|
62
99
|
// 4. Get response over websocket conn (logged)
|
|
63
100
|
// 5. Send response over HTTP conn
|
|
64
|
-
function
|
|
101
|
+
function forwardHttpRequest(filterRules) {
|
|
65
102
|
const filters = Filters(filterRules);
|
|
66
103
|
return (req, res) => {
|
|
67
104
|
const logContext = {
|
|
@@ -73,6 +110,7 @@ function requestHandler(filterRules) {
|
|
|
73
110
|
};
|
|
74
111
|
logger.debug(logContext, 'received request over HTTP connection');
|
|
75
112
|
filters(req, (error, result) => {
|
|
113
|
+
var _a, _b;
|
|
76
114
|
if (error) {
|
|
77
115
|
const reason = 'Request does not match any accept rule, blocking HTTP request';
|
|
78
116
|
error.reason = reason;
|
|
@@ -86,9 +124,9 @@ function requestHandler(filterRules) {
|
|
|
86
124
|
req.url = result.url;
|
|
87
125
|
logContext.ioUrl = result.url;
|
|
88
126
|
// check if this is a streaming request for binary data
|
|
89
|
-
if (result.stream) {
|
|
127
|
+
if (result.stream || ((_b = (_a = res === null || res === void 0 ? void 0 : res.locals) === null || _a === void 0 ? void 0 : _a.capabilities) === null || _b === void 0 ? void 0 : _b.includes('post-streams'))) {
|
|
90
128
|
const streamingID = uuid();
|
|
91
|
-
const streamBuffer = new stream.PassThrough();
|
|
129
|
+
const streamBuffer = new stream.PassThrough({ highWaterMark: 1048576 });
|
|
92
130
|
logContext.streamingID = streamingID;
|
|
93
131
|
logger.debug(logContext, 'sending stream request over websocket connection');
|
|
94
132
|
streams.set(streamingID, {
|
|
@@ -178,7 +216,7 @@ function requestHandler(filterRules) {
|
|
|
178
216
|
// 3. Relay over HTTP conn (logged)
|
|
179
217
|
// 4. Get response over HTTP conn (logged)
|
|
180
218
|
// 5. Send response over websocket conn
|
|
181
|
-
function
|
|
219
|
+
function forwardWebSocketRequest(filterRules, config, io) {
|
|
182
220
|
const filters = Filters(filterRules);
|
|
183
221
|
return (brokerToken) => ({ url, headers = {}, method, body = null, streamingID = '' } = {}, emit) => {
|
|
184
222
|
var _a, _b, _c;
|
|
@@ -191,8 +229,29 @@ function responseHandler(filterRules, config, io) {
|
|
|
191
229
|
maskedToken: maskToken(brokerToken),
|
|
192
230
|
transport: (_c = (_b = (_a = io === null || io === void 0 ? void 0 : io.socket) === null || _a === void 0 ? void 0 : _a.transport) === null || _b === void 0 ? void 0 : _b.name) !== null && _c !== void 0 ? _c : 'unknown',
|
|
193
231
|
};
|
|
232
|
+
const realEmit = emit;
|
|
233
|
+
emit = (responseData) => {
|
|
234
|
+
if (responseData instanceof request.Request) {
|
|
235
|
+
logger.trace(logContext, 'posting streaming response back to Broker Server');
|
|
236
|
+
pipeStream(responseData, logContext, config, brokerToken, streamingID);
|
|
237
|
+
}
|
|
238
|
+
else if (streamingID) {
|
|
239
|
+
// Only for responses generated internally in the Broker Client/Server
|
|
240
|
+
const body = responseData.body;
|
|
241
|
+
delete responseData.body;
|
|
242
|
+
logger.trace({ ...logContext, responseData, body }, "posting internal response back to Broker Server as it's expecting streaming response");
|
|
243
|
+
const buffer = initStream(config, brokerToken, streamingID, JSON.stringify(responseData));
|
|
244
|
+
buffer.write(JSON.stringify(body));
|
|
245
|
+
buffer.end();
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
logger.trace({ ...logContext, responseData }, 'sending fixed response over WebSocket connection');
|
|
249
|
+
realEmit(responseData);
|
|
250
|
+
}
|
|
251
|
+
};
|
|
194
252
|
logger.debug(logContext, 'received request over websocket connection');
|
|
195
253
|
filters({ url, method, body, headers }, (filterError, result) => {
|
|
254
|
+
var _a;
|
|
196
255
|
if (filterError) {
|
|
197
256
|
const reason = 'Response does not match any accept rule, blocking websocket request';
|
|
198
257
|
logContext.error = filterError;
|
|
@@ -277,12 +336,20 @@ function responseHandler(filterRules, config, io) {
|
|
|
277
336
|
'content-length',
|
|
278
337
|
'host',
|
|
279
338
|
'accept-encoding',
|
|
280
|
-
'content-encoding'
|
|
339
|
+
'content-encoding',
|
|
281
340
|
].map((_) => delete headers[_]);
|
|
282
|
-
if (brokerToken) {
|
|
341
|
+
if (brokerToken && (io === null || io === void 0 ? void 0 : io.socketType) === 'server') {
|
|
283
342
|
Object.assign(headers, { 'X-Broker-Token': brokerToken });
|
|
284
343
|
}
|
|
285
344
|
logger.debug(logContext, 'sending websocket request over HTTP connection');
|
|
345
|
+
// Sometimes we receive the body as a {type, data} object
|
|
346
|
+
// Unsure why - possibly Primus?
|
|
347
|
+
if ((body === null || body === void 0 ? void 0 : body.type) === 'Buffer')
|
|
348
|
+
body = Buffer.of(body.data);
|
|
349
|
+
// Request library is buggy and will throw an error if we're POST'ing an empty body without an explicit Content-Length header
|
|
350
|
+
if (!body || body.length === 0) {
|
|
351
|
+
headers['Content-Length'] = '0';
|
|
352
|
+
}
|
|
286
353
|
const req = {
|
|
287
354
|
url: result.url,
|
|
288
355
|
headers: headers,
|
|
@@ -295,36 +362,49 @@ function responseHandler(filterRules, config, io) {
|
|
|
295
362
|
// check if this is a streaming request for binary data
|
|
296
363
|
if (streamingID) {
|
|
297
364
|
logger.debug(logContext, 'serving stream request');
|
|
298
|
-
req.encoding = null; // no encoding for binary data
|
|
299
365
|
let prevPartialChunk;
|
|
300
366
|
let isResponseJson;
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
io.send('chunk', streamingID, '', false, {
|
|
307
|
-
status,
|
|
308
|
-
headers: response.headers,
|
|
309
|
-
});
|
|
310
|
-
})
|
|
311
|
-
.on('data', (chunk) => {
|
|
312
|
-
if (config.RES_BODY_URL_SUB && isResponseJson) {
|
|
313
|
-
const { newChunk, partial } = replaceUrlPartialChunk(Buffer.from(chunk).toString(), prevPartialChunk, config);
|
|
314
|
-
prevPartialChunk = partial;
|
|
315
|
-
chunk = newChunk;
|
|
367
|
+
try {
|
|
368
|
+
const rqst = request(req);
|
|
369
|
+
// This only works client -> server, it's not possible to post data server -> client
|
|
370
|
+
if ((_a = io.capabilities) === null || _a === void 0 ? void 0 : _a.includes('receive-post-streams')) {
|
|
371
|
+
emit(rqst);
|
|
316
372
|
}
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
373
|
+
else {
|
|
374
|
+
logger.warn(logContext, 'server did not advertise receive-post-streams capability - falling back to legacy streaming');
|
|
375
|
+
// Fall back to older streaming method if somehow connected to older server version
|
|
376
|
+
rqst
|
|
377
|
+
.on('response', (response) => {
|
|
378
|
+
const status = (response && response.statusCode) || 500;
|
|
379
|
+
logResponse(logContext, status, response, config);
|
|
380
|
+
isResponseJson = isJson(response.headers);
|
|
381
|
+
io.send('chunk', streamingID, '', false, {
|
|
382
|
+
status,
|
|
383
|
+
headers: response.headers,
|
|
384
|
+
});
|
|
385
|
+
})
|
|
386
|
+
.on('data', (chunk) => {
|
|
387
|
+
if (config.RES_BODY_URL_SUB && isResponseJson) {
|
|
388
|
+
const { newChunk, partial } = replaceUrlPartialChunk(Buffer.from(chunk).toString(), prevPartialChunk, config);
|
|
389
|
+
prevPartialChunk = partial;
|
|
390
|
+
chunk = newChunk;
|
|
391
|
+
}
|
|
392
|
+
io.send('chunk', streamingID, chunk, false);
|
|
393
|
+
})
|
|
394
|
+
.on('end', () => {
|
|
395
|
+
io.send('chunk', streamingID, '', true);
|
|
396
|
+
})
|
|
397
|
+
.on('error', (error) => {
|
|
398
|
+
logError(logContext, error);
|
|
399
|
+
io.send('chunk', streamingID, error.message, true, {
|
|
400
|
+
status: 500,
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
catch (e) {
|
|
406
|
+
logger.error({ ...logContext, error: e }, 'caught error sending HTTP response back to caller');
|
|
407
|
+
}
|
|
328
408
|
return;
|
|
329
409
|
}
|
|
330
410
|
request(req, (error, response, responseBody) => {
|
|
@@ -343,15 +423,15 @@ function responseHandler(filterRules, config, io) {
|
|
|
343
423
|
if (contentLength && contentLength > maxLength) {
|
|
344
424
|
const errorMessage = `body size of ${contentLength} is greater than max allowed of ${maxLength} bytes`;
|
|
345
425
|
logError(logContext, {
|
|
346
|
-
errorMessage
|
|
426
|
+
errorMessage,
|
|
347
427
|
});
|
|
348
428
|
return emit({
|
|
349
429
|
status: 502,
|
|
350
430
|
errorType: 'BODY_TOO_LARGE',
|
|
351
431
|
originalBodySize: contentLength,
|
|
352
432
|
body: {
|
|
353
|
-
message: errorMessage
|
|
354
|
-
}
|
|
433
|
+
message: errorMessage,
|
|
434
|
+
},
|
|
355
435
|
});
|
|
356
436
|
}
|
|
357
437
|
const status = (response && response.statusCode) || 500;
|