@routr/processor 2.0.8-alpha.2 → 2.0.8-alpha.21
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/alterations.d.ts +3 -3
- package/dist/alterations.js +43 -40
- package/dist/extensions.js +1 -1
- package/dist/helper.d.ts +7 -2
- package/dist/helper.js +12 -9
- package/package.json +4 -4
package/dist/alterations.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { MessageRequest, Route } from "@routr/common";
|
|
2
2
|
export declare const updateRequestURI: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
3
3
|
export declare const addSelfVia: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
4
|
+
export declare const addRouteToNextHop: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
5
|
+
export declare const addRouteToPeerEdgePort: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
6
6
|
export declare const applyXHeaders: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
7
7
|
export declare const addSelfRecordRoute: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
8
8
|
export declare const addXEdgePortRef: (request: MessageRequest) => MessageRequest;
|
|
9
9
|
export declare const removeXEdgePortRef: (request: MessageRequest) => MessageRequest;
|
|
10
10
|
export declare const removeAuthorization: (request: MessageRequest) => MessageRequest;
|
|
11
|
-
export declare const
|
|
11
|
+
export declare const removeSelfRoutes: (request: MessageRequest) => MessageRequest;
|
|
12
12
|
export declare const removeTopVia: (request: MessageRequest) => MessageRequest;
|
|
13
13
|
export declare const decreaseMaxForwards: (request: MessageRequest) => MessageRequest;
|
package/dist/alterations.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.decreaseMaxForwards = exports.removeTopVia = exports.
|
|
3
|
+
exports.decreaseMaxForwards = exports.removeTopVia = exports.removeSelfRoutes = exports.removeAuthorization = exports.removeXEdgePortRef = exports.addXEdgePortRef = exports.addSelfRecordRoute = exports.applyXHeaders = exports.addRouteToPeerEdgePort = exports.addRouteToNextHop = exports.addSelfVia = exports.updateRequestURI = void 0;
|
|
4
4
|
/*
|
|
5
5
|
* Copyright (C) 2022 by Fonoster Inc (https://fonoster.com)
|
|
6
6
|
* http://github.com/fonoster/routr
|
|
@@ -20,8 +20,7 @@ exports.decreaseMaxForwards = exports.removeTopVia = exports.removeRoutes = expo
|
|
|
20
20
|
* limitations under the License.
|
|
21
21
|
*/
|
|
22
22
|
const common_1 = require("@routr/common");
|
|
23
|
-
const helper_1 = require("
|
|
24
|
-
const helper_2 = require("./helper");
|
|
23
|
+
const helper_1 = require("./helper");
|
|
25
24
|
// Q: Should we deprecate this method since we are not doing strict routing?
|
|
26
25
|
const updateRequestURI = (route) => (request) => {
|
|
27
26
|
const req = common_1.Helper.deepCopy(request);
|
|
@@ -38,29 +37,17 @@ const updateRequestURI = (route) => (request) => {
|
|
|
38
37
|
};
|
|
39
38
|
exports.updateRequestURI = updateRequestURI;
|
|
40
39
|
const addSelfVia = (route) => (request) => {
|
|
41
|
-
var _a;
|
|
42
40
|
const req = common_1.Helper.deepCopy(request);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
? route.host
|
|
47
|
-
: route.egressListeningPoint.host;
|
|
48
|
-
const egressListeningPoint = common_1.Helper.getListeningPoint(request, route.transport);
|
|
49
|
-
// If the nextHopHost host is local, then use use lp to construct via
|
|
50
|
-
// otherwise, we use the first available external ip.
|
|
51
|
-
const via = common_1.IpUtils.isLocalnet(req.localnets, nextHopHost)
|
|
52
|
-
? route.egressListeningPoint
|
|
53
|
-
: {
|
|
54
|
-
// fallback to lp host if there is no external ips
|
|
55
|
-
host: (_a = req.externalAddrs[0]) !== null && _a !== void 0 ? _a : egressListeningPoint.host,
|
|
56
|
-
port: egressListeningPoint.port,
|
|
57
|
-
transport: egressListeningPoint.transport
|
|
58
|
-
};
|
|
59
|
-
req.message.via = [via, ...req.message.via];
|
|
41
|
+
const routingObjects = request.edgePortRef === route.edgePortRef ? route : request;
|
|
42
|
+
const targetIntf = (0, helper_1.getEdgeInterface)(Object.assign(Object.assign({}, routingObjects), { endpointIntf: route }));
|
|
43
|
+
req.message.via = [Object.assign({}, targetIntf), ...req.message.via];
|
|
60
44
|
return req;
|
|
61
45
|
};
|
|
62
46
|
exports.addSelfVia = addSelfVia;
|
|
63
|
-
const
|
|
47
|
+
const addRouteToNextHop = (route) => (request) => {
|
|
48
|
+
if (request.message.requestUri.host === route.host) {
|
|
49
|
+
return request;
|
|
50
|
+
}
|
|
64
51
|
const req = common_1.Helper.deepCopy(request);
|
|
65
52
|
const r = {
|
|
66
53
|
address: {
|
|
@@ -75,15 +62,21 @@ const addRoute = (route) => (request) => {
|
|
|
75
62
|
req.message.route = [r, ...req.message.route];
|
|
76
63
|
return req;
|
|
77
64
|
};
|
|
78
|
-
exports.
|
|
79
|
-
const
|
|
65
|
+
exports.addRouteToNextHop = addRouteToNextHop;
|
|
66
|
+
const addRouteToPeerEdgePort = (route) => (request) => {
|
|
80
67
|
const req = common_1.Helper.deepCopy(request);
|
|
68
|
+
const targetIntf = (0, helper_1.getEdgeInterface)({
|
|
69
|
+
listeningPoints: route.listeningPoints,
|
|
70
|
+
localnets: route.localnets,
|
|
71
|
+
externalAddrs: route.externalAddrs,
|
|
72
|
+
endpointIntf: route
|
|
73
|
+
});
|
|
81
74
|
const r = {
|
|
82
75
|
address: {
|
|
83
76
|
uri: {
|
|
84
|
-
host:
|
|
85
|
-
port:
|
|
86
|
-
transportParam:
|
|
77
|
+
host: targetIntf.host,
|
|
78
|
+
port: targetIntf.port,
|
|
79
|
+
transportParam: targetIntf.transport,
|
|
87
80
|
lrParam: true
|
|
88
81
|
}
|
|
89
82
|
}
|
|
@@ -91,14 +84,14 @@ const addRouteToListeningPoint = (route) => (request) => {
|
|
|
91
84
|
req.message.route = [r, ...req.message.route];
|
|
92
85
|
return req;
|
|
93
86
|
};
|
|
94
|
-
exports.
|
|
87
|
+
exports.addRouteToPeerEdgePort = addRouteToPeerEdgePort;
|
|
95
88
|
const applyXHeaders = (route) => (request) => {
|
|
96
89
|
const req = common_1.Helper.deepCopy(request);
|
|
97
90
|
if (route.headers && route.headers.length > 0) {
|
|
98
91
|
const headersToRemove = route.headers
|
|
99
92
|
.filter((h) => h.action === common_1.CommonTypes.HeaderModifierAction.REMOVE)
|
|
100
|
-
.map((h) => h.name);
|
|
101
|
-
const headersToAdd = route.headers.filter((h) => h.action
|
|
93
|
+
.map((h) => h.name.toLowerCase());
|
|
94
|
+
const headersToAdd = route.headers.filter((h) => h.action === common_1.CommonTypes.HeaderModifierAction.ADD);
|
|
102
95
|
req.message.extensions = req.message.extensions.filter((h) => !headersToRemove.includes(h.name.toLowerCase()));
|
|
103
96
|
headersToAdd.forEach((h) => {
|
|
104
97
|
req.message.extensions.push({ name: h.name, value: h.value });
|
|
@@ -109,8 +102,18 @@ const applyXHeaders = (route) => (request) => {
|
|
|
109
102
|
exports.applyXHeaders = applyXHeaders;
|
|
110
103
|
const addSelfRecordRoute = (route) => (request) => {
|
|
111
104
|
const req = common_1.Helper.deepCopy(request);
|
|
112
|
-
const originIntf = (0,
|
|
113
|
-
|
|
105
|
+
const originIntf = (0, helper_1.getEdgeInterface)({
|
|
106
|
+
listeningPoints: request.listeningPoints,
|
|
107
|
+
localnets: request.localnets,
|
|
108
|
+
externalAddrs: request.externalAddrs,
|
|
109
|
+
endpointIntf: request.sender
|
|
110
|
+
});
|
|
111
|
+
const targetIntf = (0, helper_1.getEdgeInterface)({
|
|
112
|
+
listeningPoints: request.listeningPoints,
|
|
113
|
+
localnets: request.localnets,
|
|
114
|
+
externalAddrs: request.externalAddrs,
|
|
115
|
+
endpointIntf: route
|
|
116
|
+
});
|
|
114
117
|
const originRoute = {
|
|
115
118
|
address: {
|
|
116
119
|
uri: {
|
|
@@ -175,21 +178,21 @@ const removeAuthorization = (request) => {
|
|
|
175
178
|
return req;
|
|
176
179
|
};
|
|
177
180
|
exports.removeAuthorization = removeAuthorization;
|
|
178
|
-
const
|
|
181
|
+
const removeSelfRoutes = (request) => {
|
|
179
182
|
const req = common_1.Helper.deepCopy(request);
|
|
183
|
+
const localIps = request.localnets.map((ln) => ln.split("/")[0]);
|
|
180
184
|
req.message.route = req.message.route.filter((r) => {
|
|
181
185
|
var _a;
|
|
182
|
-
const
|
|
183
|
-
const lp = (0, helper_1.getListeningPoint)(request, ((_a = r.address.uri.transportParam) === null || _a === void 0 ? void 0 : _a.toLowerCase()) ||
|
|
186
|
+
const lp = common_1.Helper.getListeningPoint(request.listeningPoints, ((_a = r.address.uri.transportParam) === null || _a === void 0 ? void 0 : _a.toUpperCase()) ||
|
|
184
187
|
common_1.Transport.UDP);
|
|
185
|
-
const
|
|
186
|
-
return !((localIps.includes(
|
|
187
|
-
request.externalAddrs.includes(
|
|
188
|
-
|
|
188
|
+
const routeUri = r.address.uri;
|
|
189
|
+
return !((localIps.includes(routeUri.host) ||
|
|
190
|
+
request.externalAddrs.includes(routeUri.host)) &&
|
|
191
|
+
routeUri.port === lp.port);
|
|
189
192
|
});
|
|
190
193
|
return req;
|
|
191
194
|
};
|
|
192
|
-
exports.
|
|
195
|
+
exports.removeSelfRoutes = removeSelfRoutes;
|
|
193
196
|
const removeTopVia = (request) => {
|
|
194
197
|
const req = common_1.Helper.deepCopy(request);
|
|
195
198
|
req.message.via.shift();
|
package/dist/extensions.js
CHANGED
|
@@ -22,7 +22,7 @@ exports.removeHeader = exports.addHeader = exports.updateHeader = exports.getHea
|
|
|
22
22
|
const common_1 = require("@routr/common");
|
|
23
23
|
const getHeaderValue = (request, name) => {
|
|
24
24
|
var _a;
|
|
25
|
-
return (_a = request.message.extensions.find((ext) => ext.name.toLowerCase() === name.toLowerCase())) === null || _a === void 0 ? void 0 : _a.value;
|
|
25
|
+
return ((_a = request.message.extensions.find((ext) => ext.name.toLowerCase() === (name === null || name === void 0 ? void 0 : name.toLowerCase()))) === null || _a === void 0 ? void 0 : _a.value) || null;
|
|
26
26
|
};
|
|
27
27
|
exports.getHeaderValue = getHeaderValue;
|
|
28
28
|
const updateHeader = (request, header) => {
|
package/dist/helper.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { MessageRequest, Route, NetInterface } from "@routr/common";
|
|
2
2
|
export declare const isTypeResponse: (request: MessageRequest) => boolean;
|
|
3
3
|
export declare const isTypeRequest: (request: MessageRequest) => boolean;
|
|
4
|
-
export declare const getEdgeInterface: (
|
|
4
|
+
export declare const getEdgeInterface: (nets: {
|
|
5
|
+
listeningPoints: NetInterface[];
|
|
6
|
+
endpointIntf: NetInterface;
|
|
7
|
+
localnets: string[];
|
|
8
|
+
externalAddrs: string[];
|
|
9
|
+
}) => NetInterface;
|
|
5
10
|
/**
|
|
6
|
-
* A request traversing a second EdgePort would have
|
|
11
|
+
* A request traversing a second EdgePort would have updated the requestUri.
|
|
7
12
|
* Therefore, we are able to re-construct the Route from the request.
|
|
8
13
|
*
|
|
9
14
|
* @param {MessageRequest} request - the request
|
package/dist/helper.js
CHANGED
|
@@ -26,11 +26,12 @@ const isTypeResponse = (request) => request.message.messageType === common_1.Com
|
|
|
26
26
|
exports.isTypeResponse = isTypeResponse;
|
|
27
27
|
const isTypeRequest = (request) => !(0, exports.isTypeResponse)(request);
|
|
28
28
|
exports.isTypeRequest = isTypeRequest;
|
|
29
|
-
const getEdgeInterface = (
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
29
|
+
const getEdgeInterface = (nets) => {
|
|
30
|
+
const { listeningPoints, endpointIntf, localnets, externalAddrs } = nets;
|
|
31
|
+
const localnetIp = common_2.IpUtils.getLocalnetIp(localnets, endpointIntf.host);
|
|
32
|
+
const host = localnetIp !== null && localnetIp !== void 0 ? localnetIp : externalAddrs[0];
|
|
33
|
+
const lp = common_1.Helper.getListeningPoint(listeningPoints, endpointIntf.transport);
|
|
34
|
+
if (!localnetIp && externalAddrs.length === 0) {
|
|
34
35
|
throw new Error(`unable to find a valid interface for host ${endpointIntf.host} and transport ${lp.transport}`);
|
|
35
36
|
}
|
|
36
37
|
if (localnetIp && lp.host !== "0.0.0.0" && lp.host !== host) {
|
|
@@ -44,28 +45,30 @@ const getEdgeInterface = (request, endpointIntf) => {
|
|
|
44
45
|
};
|
|
45
46
|
exports.getEdgeInterface = getEdgeInterface;
|
|
46
47
|
/**
|
|
47
|
-
* A request traversing a second EdgePort would have
|
|
48
|
+
* A request traversing a second EdgePort would have updated the requestUri.
|
|
48
49
|
* Therefore, we are able to re-construct the Route from the request.
|
|
49
50
|
*
|
|
50
51
|
* @param {MessageRequest} request - the request
|
|
51
52
|
* @return {Route} the route
|
|
52
53
|
*/
|
|
53
54
|
function createRouteFromLastMessage(request) {
|
|
55
|
+
var _a;
|
|
54
56
|
const uri = request.message.requestUri;
|
|
55
57
|
const sessionCount = index_1.Extensions.getHeaderValue(request, common_1.CommonTypes.ExtraHeader.SESSION_COUNT)
|
|
56
58
|
? parseInt(index_1.Extensions.getHeaderValue(request, common_1.CommonTypes.ExtraHeader.SESSION_COUNT))
|
|
57
59
|
: -1;
|
|
58
|
-
const egressListeningPoint = common_1.Helper.getListeningPoint(request, uri.transportParam.toLowerCase());
|
|
59
60
|
return {
|
|
60
61
|
edgePortRef: request.edgePortRef,
|
|
61
62
|
user: uri.user,
|
|
62
63
|
host: uri.host,
|
|
63
64
|
port: uri.port,
|
|
64
|
-
transport: uri.transportParam.
|
|
65
|
+
transport: (_a = uri.transportParam) === null || _a === void 0 ? void 0 : _a.toUpperCase(),
|
|
65
66
|
registeredOn: Date.now(),
|
|
66
67
|
sessionCount,
|
|
67
68
|
expires: index_1.Target.getTargetExpires(request),
|
|
68
|
-
|
|
69
|
+
listeningPoints: request.listeningPoints,
|
|
70
|
+
localnets: request.localnets,
|
|
71
|
+
externalAddrs: request.externalAddrs
|
|
69
72
|
};
|
|
70
73
|
}
|
|
71
74
|
exports.createRouteFromLastMessage = createRouteFromLastMessage;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@routr/processor",
|
|
3
|
-
"version": "2.0.8-alpha.
|
|
3
|
+
"version": "2.0.8-alpha.21",
|
|
4
4
|
"description": "Processor server and API",
|
|
5
5
|
"author": "Pedro Sanders <psanders@fonoster.com>",
|
|
6
6
|
"homepage": "https://github.com/fonoster/routr#readme",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@fonoster/logger": "0.3.18",
|
|
16
|
-
"@grpc/grpc-js": "^1.
|
|
16
|
+
"@grpc/grpc-js": "^1.8.4",
|
|
17
17
|
"@grpc/proto-loader": "^0.6.9",
|
|
18
18
|
"@opentelemetry/api": "^1.0.4",
|
|
19
19
|
"@opentelemetry/exporter-jaeger": "^1.0.4",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@opentelemetry/sdk-trace-base": "^1.0.4",
|
|
24
24
|
"@opentelemetry/sdk-trace-node": "^1.0.4",
|
|
25
25
|
"@opentelemetry/semantic-conventions": "^1.0.4",
|
|
26
|
-
"@routr/common": "^2.0.8-alpha.
|
|
26
|
+
"@routr/common": "^2.0.8-alpha.21",
|
|
27
27
|
"fp-ts": "^2.11.8"
|
|
28
28
|
},
|
|
29
29
|
"directories": {
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"bugs": {
|
|
44
44
|
"url": "https://github.com/fonoster/routr/issues"
|
|
45
45
|
},
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "1841d2d8d51bebfdc3af7e81435064e81b176449"
|
|
47
47
|
}
|