@routr/processor 2.0.8-alpha.0 → 2.0.8-alpha.1
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 +1 -1
- package/dist/alterations.js +114 -88
- package/dist/helper.d.ts +2 -1
- package/dist/helper.js +22 -3
- package/package.json +3 -3
package/dist/alterations.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare const addSelfVia: (route: Route) => (request: MessageRequest) =>
|
|
|
4
4
|
export declare const addRoute: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
5
5
|
export declare const addRouteToListeningPoint: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
6
6
|
export declare const applyXHeaders: (route: Route) => (request: MessageRequest) => MessageRequest;
|
|
7
|
-
export declare const addSelfRecordRoute: (request: MessageRequest) => MessageRequest;
|
|
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;
|
package/dist/alterations.js
CHANGED
|
@@ -20,114 +20,136 @@ 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("@routr/common/src/helper");
|
|
24
|
+
const helper_2 = require("./helper");
|
|
23
25
|
// Q: Should we deprecate this method since we are not doing strict routing?
|
|
24
|
-
const updateRequestURI = (route) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return req;
|
|
37
|
-
};
|
|
26
|
+
const updateRequestURI = (route) => (request) => {
|
|
27
|
+
const req = common_1.Helper.deepCopy(request);
|
|
28
|
+
if (route.user) {
|
|
29
|
+
req.message.requestUri.user = route.user;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
req.message.requestUri.user = null;
|
|
33
|
+
}
|
|
34
|
+
req.message.requestUri.host = route.host;
|
|
35
|
+
req.message.requestUri.port = route.port;
|
|
36
|
+
req.message.requestUri.transportParam = route.transport;
|
|
37
|
+
return req;
|
|
38
38
|
};
|
|
39
39
|
exports.updateRequestURI = updateRequestURI;
|
|
40
|
-
const addSelfVia = (route) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
};
|
|
40
|
+
const addSelfVia = (route) => (request) => {
|
|
41
|
+
var _a;
|
|
42
|
+
const req = common_1.Helper.deepCopy(request);
|
|
43
|
+
// If is comming from a different edgeport we use the listening point instead
|
|
44
|
+
// of the endpoint to ensure connectivity.
|
|
45
|
+
const nextHopHost = request.edgePortRef === route.edgePortRef
|
|
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];
|
|
60
|
+
return req;
|
|
62
61
|
};
|
|
63
62
|
exports.addSelfVia = addSelfVia;
|
|
64
|
-
const addRoute = (route) => {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
lrParam: true
|
|
74
|
-
}
|
|
63
|
+
const addRoute = (route) => (request) => {
|
|
64
|
+
const req = common_1.Helper.deepCopy(request);
|
|
65
|
+
const r = {
|
|
66
|
+
address: {
|
|
67
|
+
uri: {
|
|
68
|
+
host: route.host,
|
|
69
|
+
port: route.port,
|
|
70
|
+
transportParam: route.transport,
|
|
71
|
+
lrParam: true
|
|
75
72
|
}
|
|
76
|
-
}
|
|
77
|
-
req.message.route = [r, ...req.message.route];
|
|
78
|
-
return req;
|
|
73
|
+
}
|
|
79
74
|
};
|
|
75
|
+
req.message.route = [r, ...req.message.route];
|
|
76
|
+
return req;
|
|
80
77
|
};
|
|
81
78
|
exports.addRoute = addRoute;
|
|
82
|
-
const addRouteToListeningPoint = (route) => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
lrParam: true
|
|
92
|
-
}
|
|
79
|
+
const addRouteToListeningPoint = (route) => (request) => {
|
|
80
|
+
const req = common_1.Helper.deepCopy(request);
|
|
81
|
+
const r = {
|
|
82
|
+
address: {
|
|
83
|
+
uri: {
|
|
84
|
+
host: route.egressListeningPoint.host,
|
|
85
|
+
port: route.egressListeningPoint.port,
|
|
86
|
+
transportParam: route.egressListeningPoint.transport,
|
|
87
|
+
lrParam: true
|
|
93
88
|
}
|
|
94
|
-
}
|
|
95
|
-
req.message.route = [r, ...req.message.route];
|
|
96
|
-
return req;
|
|
89
|
+
}
|
|
97
90
|
};
|
|
91
|
+
req.message.route = [r, ...req.message.route];
|
|
92
|
+
return req;
|
|
98
93
|
};
|
|
99
94
|
exports.addRouteToListeningPoint = addRouteToListeningPoint;
|
|
100
|
-
const applyXHeaders = (route) => {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return req;
|
|
114
|
-
};
|
|
95
|
+
const applyXHeaders = (route) => (request) => {
|
|
96
|
+
const req = common_1.Helper.deepCopy(request);
|
|
97
|
+
if (route.headers && route.headers.length > 0) {
|
|
98
|
+
const headersToRemove = route.headers
|
|
99
|
+
.filter((h) => h.action === common_1.CommonTypes.HeaderModifierAction.REMOVE)
|
|
100
|
+
.map((h) => h.name);
|
|
101
|
+
const headersToAdd = route.headers.filter((h) => h.action !== common_1.CommonTypes.HeaderModifierAction.REMOVE);
|
|
102
|
+
req.message.extensions = req.message.extensions.filter((h) => !headersToRemove.includes(h.name.toLowerCase()));
|
|
103
|
+
headersToAdd.forEach((h) => {
|
|
104
|
+
req.message.extensions.push({ name: h.name, value: h.value });
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
return req;
|
|
115
108
|
};
|
|
116
109
|
exports.applyXHeaders = applyXHeaders;
|
|
117
|
-
const addSelfRecordRoute = (request) => {
|
|
110
|
+
const addSelfRecordRoute = (route) => (request) => {
|
|
118
111
|
const req = common_1.Helper.deepCopy(request);
|
|
119
|
-
const
|
|
120
|
-
const
|
|
112
|
+
const originIntf = (0, helper_2.getEdgeInterface)(request, request.sender);
|
|
113
|
+
const targetIntf = (0, helper_2.getEdgeInterface)(request, route);
|
|
114
|
+
const originRoute = {
|
|
121
115
|
address: {
|
|
122
116
|
uri: {
|
|
123
|
-
host:
|
|
124
|
-
port:
|
|
125
|
-
transportParam:
|
|
117
|
+
host: originIntf.host,
|
|
118
|
+
port: originIntf.port,
|
|
119
|
+
transportParam: originIntf.transport,
|
|
126
120
|
lrParam: true
|
|
127
121
|
}
|
|
128
122
|
}
|
|
129
123
|
};
|
|
130
|
-
|
|
124
|
+
if (originIntf.host !== targetIntf.host ||
|
|
125
|
+
originIntf.port !== targetIntf.port ||
|
|
126
|
+
originIntf.transport !== targetIntf.transport) {
|
|
127
|
+
const targetRoute = {
|
|
128
|
+
address: {
|
|
129
|
+
uri: {
|
|
130
|
+
host: targetIntf.host,
|
|
131
|
+
port: targetIntf.port,
|
|
132
|
+
transportParam: targetIntf.transport,
|
|
133
|
+
lrParam: true
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
parameters: {
|
|
137
|
+
r2: "on"
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
// Add r2 on to origin route
|
|
141
|
+
originRoute.parameters = {
|
|
142
|
+
r2: "on"
|
|
143
|
+
};
|
|
144
|
+
req.message.recordRoute = [
|
|
145
|
+
targetRoute,
|
|
146
|
+
originRoute,
|
|
147
|
+
...req.message.recordRoute
|
|
148
|
+
];
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
req.message.recordRoute = [originRoute, ...req.message.recordRoute];
|
|
152
|
+
}
|
|
131
153
|
return req;
|
|
132
154
|
};
|
|
133
155
|
exports.addSelfRecordRoute = addSelfRecordRoute;
|
|
@@ -156,9 +178,13 @@ exports.removeAuthorization = removeAuthorization;
|
|
|
156
178
|
const removeRoutes = (request) => {
|
|
157
179
|
const req = common_1.Helper.deepCopy(request);
|
|
158
180
|
req.message.route = req.message.route.filter((r) => {
|
|
159
|
-
|
|
181
|
+
var _a;
|
|
182
|
+
const localIps = request.localnets.map((ln) => ln.split("/")[0]);
|
|
183
|
+
const lp = (0, helper_1.getListeningPoint)(request, ((_a = r.address.uri.transportParam) === null || _a === void 0 ? void 0 : _a.toLowerCase()) ||
|
|
184
|
+
common_1.Transport.UDP);
|
|
160
185
|
const route = r.address.uri;
|
|
161
|
-
return !((
|
|
186
|
+
return !((localIps.includes(route.host) ||
|
|
187
|
+
request.externalAddrs.includes(route.host)) &&
|
|
162
188
|
route.port === lp.port);
|
|
163
189
|
});
|
|
164
190
|
return req;
|
package/dist/helper.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { MessageRequest, Route } from "@routr/common";
|
|
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: (request: MessageRequest, endpointIntf: NetInterface) => NetInterface;
|
|
4
5
|
/**
|
|
5
6
|
* A request traversing a second EdgePort would have an updated the requestUri.
|
|
6
7
|
* Therefore, we are able to re-construct the Route from the request.
|
package/dist/helper.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createRouteFromLastMessage = exports.isTypeRequest = exports.isTypeResponse = void 0;
|
|
3
|
+
exports.createRouteFromLastMessage = exports.getEdgeInterface = exports.isTypeRequest = exports.isTypeResponse = void 0;
|
|
4
4
|
/*
|
|
5
5
|
* Copyright (C) 2022 by Fonoster Inc (https://fonoster.com)
|
|
6
6
|
* http://github.com/fonoster/routr
|
|
@@ -20,11 +20,29 @@ exports.createRouteFromLastMessage = exports.isTypeRequest = exports.isTypeRespo
|
|
|
20
20
|
* limitations under the License.
|
|
21
21
|
*/
|
|
22
22
|
const common_1 = require("@routr/common");
|
|
23
|
+
const common_2 = require("@routr/common");
|
|
23
24
|
const index_1 = require("./index");
|
|
24
25
|
const isTypeResponse = (request) => request.message.messageType === common_1.CommonTypes.MessageType.RESPONSE;
|
|
25
26
|
exports.isTypeResponse = isTypeResponse;
|
|
26
27
|
const isTypeRequest = (request) => !(0, exports.isTypeResponse)(request);
|
|
27
28
|
exports.isTypeRequest = isTypeRequest;
|
|
29
|
+
const getEdgeInterface = (request, endpointIntf) => {
|
|
30
|
+
const localnetIp = common_2.IpUtils.getLocalnetIp(request.localnets, endpointIntf.host);
|
|
31
|
+
const host = localnetIp !== null && localnetIp !== void 0 ? localnetIp : request.externalAddrs[0];
|
|
32
|
+
const lp = common_1.Helper.getListeningPoint(request, endpointIntf.transport);
|
|
33
|
+
if (!localnetIp && request.externalAddrs.length === 0) {
|
|
34
|
+
throw new Error(`unable to find a valid interface for host ${endpointIntf.host} and transport ${lp.transport}`);
|
|
35
|
+
}
|
|
36
|
+
if (localnetIp && lp.host !== "0.0.0.0" && lp.host !== host) {
|
|
37
|
+
throw new Error(`listening point host ${lp.host} does not match interface host ${host}`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
host,
|
|
41
|
+
port: lp.port,
|
|
42
|
+
transport: lp.transport
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
exports.getEdgeInterface = getEdgeInterface;
|
|
28
46
|
/**
|
|
29
47
|
* A request traversing a second EdgePort would have an updated the requestUri.
|
|
30
48
|
* Therefore, we are able to re-construct the Route from the request.
|
|
@@ -37,16 +55,17 @@ function createRouteFromLastMessage(request) {
|
|
|
37
55
|
const sessionCount = index_1.Extensions.getHeaderValue(request, common_1.CommonTypes.ExtraHeader.SESSION_COUNT)
|
|
38
56
|
? parseInt(index_1.Extensions.getHeaderValue(request, common_1.CommonTypes.ExtraHeader.SESSION_COUNT))
|
|
39
57
|
: -1;
|
|
58
|
+
const egressListeningPoint = common_1.Helper.getListeningPoint(request, uri.transportParam.toLowerCase());
|
|
40
59
|
return {
|
|
41
60
|
edgePortRef: request.edgePortRef,
|
|
42
61
|
user: uri.user,
|
|
43
62
|
host: uri.host,
|
|
44
63
|
port: uri.port,
|
|
45
|
-
transport: uri.transportParam,
|
|
64
|
+
transport: uri.transportParam.toLowerCase(),
|
|
46
65
|
registeredOn: Date.now(),
|
|
47
66
|
sessionCount,
|
|
48
67
|
expires: index_1.Target.getTargetExpires(request),
|
|
49
|
-
|
|
68
|
+
egressListeningPoint
|
|
50
69
|
};
|
|
51
70
|
}
|
|
52
71
|
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.1",
|
|
4
4
|
"description": "Processor server and API",
|
|
5
5
|
"author": "Pedro Sanders <psanders@fonoster.com>",
|
|
6
6
|
"homepage": "https://github.com/fonoster/routr#readme",
|
|
@@ -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.1",
|
|
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": "0824e725362fae3df83467f0f8989a2e4fa1f794"
|
|
47
47
|
}
|