@routr/processor 2.0.8-alpha.2 → 2.0.8-alpha.20

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.
@@ -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 addRoute: (route: Route) => (request: MessageRequest) => MessageRequest;
5
- export declare const addRouteToListeningPoint: (route: Route) => (request: MessageRequest) => MessageRequest;
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 removeRoutes: (request: MessageRequest) => MessageRequest;
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;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.decreaseMaxForwards = exports.removeTopVia = exports.removeRoutes = exports.removeAuthorization = exports.removeXEdgePortRef = exports.addXEdgePortRef = exports.addSelfRecordRoute = exports.applyXHeaders = exports.addRouteToListeningPoint = exports.addRoute = exports.addSelfVia = exports.updateRequestURI = void 0;
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("@routr/common/src/helper");
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
- // 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];
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 addRoute = (route) => (request) => {
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.addRoute = addRoute;
79
- const addRouteToListeningPoint = (route) => (request) => {
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: route.egressListeningPoint.host,
85
- port: route.egressListeningPoint.port,
86
- transportParam: route.egressListeningPoint.transport,
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.addRouteToListeningPoint = addRouteToListeningPoint;
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 !== common_1.CommonTypes.HeaderModifierAction.REMOVE);
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, helper_2.getEdgeInterface)(request, request.sender);
113
- const targetIntf = (0, helper_2.getEdgeInterface)(request, route);
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 removeRoutes = (request) => {
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 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()) ||
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 route = r.address.uri;
186
- return !((localIps.includes(route.host) ||
187
- request.externalAddrs.includes(route.host)) &&
188
- route.port === lp.port);
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.removeRoutes = removeRoutes;
195
+ exports.removeSelfRoutes = removeSelfRoutes;
193
196
  const removeTopVia = (request) => {
194
197
  const req = common_1.Helper.deepCopy(request);
195
198
  req.message.via.shift();
@@ -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: (request: MessageRequest, endpointIntf: NetInterface) => NetInterface;
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 an updated the requestUri.
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 = (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) {
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 an updated the requestUri.
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.toLowerCase(),
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
- egressListeningPoint
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.2",
3
+ "version": "2.0.8-alpha.20",
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.5.9",
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.2",
26
+ "@routr/common": "^2.0.8-alpha.20",
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": "28ab976b0ef8b5cd34e278ea6fda13c518d7d052"
46
+ "gitHead": "a22ee8342d03f5dfe46fddba89ffe3e6d0d5deb6"
47
47
  }