@routr/processor 2.0.7-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.
@@ -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;
@@ -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
- return (request) => {
26
- const req = common_1.Helper.deepCopy(request);
27
- if (route.user) {
28
- req.message.requestUri.user = route.user;
29
- }
30
- else {
31
- req.message.requestUri.user = null;
32
- }
33
- req.message.requestUri.host = route.host;
34
- req.message.requestUri.port = route.port;
35
- req.message.requestUri.transportParam = route.transport;
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
- return (request) => {
42
- var _a;
43
- const req = common_1.Helper.deepCopy(request);
44
- // If is comming from a different edgeport we use the listening point instead
45
- // of the endpoint to ensure connectivity.
46
- const nextHopHost = request.edgePortRef === route.edgePortRef
47
- ? route.host
48
- : route.listeningPoint.host;
49
- // If the nextHopHost host is local, then use use lp to construct via
50
- // otherwise, we use the first external ip available.
51
- const via = common_1.IpUtils.isLocalnet(req.localnets, nextHopHost)
52
- ? route.listeningPoint
53
- : {
54
- // fallback to lp host if there is no external ips
55
- host: (_a = req.externalAddrs[0]) !== null && _a !== void 0 ? _a : req.listeningPoint.host,
56
- port: req.listeningPoint.port,
57
- transport: req.listeningPoint.transport
58
- };
59
- req.message.via = [via, ...req.message.via];
60
- return req;
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
- return (request) => {
66
- const req = common_1.Helper.deepCopy(request);
67
- const r = {
68
- address: {
69
- uri: {
70
- host: route.host,
71
- port: route.port,
72
- transportParam: route.transport,
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
- return (request) => {
84
- const req = common_1.Helper.deepCopy(request);
85
- const r = {
86
- address: {
87
- uri: {
88
- host: route.listeningPoint.host,
89
- port: route.listeningPoint.port,
90
- transportParam: route.listeningPoint.transport,
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
- return (request) => {
102
- const req = common_1.Helper.deepCopy(request);
103
- if (route.headers && route.headers.length > 0) {
104
- const headersToRemove = route.headers
105
- .filter((h) => h.action === "remove")
106
- .map((h) => h.name);
107
- const headersToAdd = route.headers.filter((h) => h.action !== "remove");
108
- req.message.extensions = req.message.extensions.filter((h) => !headersToRemove.includes(h.name.toLowerCase()));
109
- headersToAdd.forEach((h) => {
110
- req.message.extensions.push({ name: h.name, value: h.value });
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 lp = req.listeningPoint;
120
- const r = {
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: lp.host,
124
- port: lp.port,
125
- transportParam: lp.transport,
117
+ host: originIntf.host,
118
+ port: originIntf.port,
119
+ transportParam: originIntf.transport,
126
120
  lrParam: true
127
121
  }
128
122
  }
129
123
  };
130
- req.message.recordRoute = [r, ...req.message.recordRoute];
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
- const lp = request.listeningPoint;
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 !((route.host === lp.host || request.externalAddrs.includes(route.host)) &&
186
+ return !((localIps.includes(route.host) ||
187
+ request.externalAddrs.includes(route.host)) &&
162
188
  route.port === lp.port);
163
189
  });
164
190
  return req;
@@ -8,3 +8,4 @@ export declare const addHeader: (request: MessageRequest, header: {
8
8
  name: string;
9
9
  value: string;
10
10
  }) => MessageRequest;
11
+ export declare const removeHeader: (request: MessageRequest, name: string) => MessageRequest;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addHeader = exports.updateHeader = exports.getHeaderValue = void 0;
3
+ exports.removeHeader = exports.addHeader = exports.updateHeader = exports.getHeaderValue = void 0;
4
4
  /*
5
5
  * Copyright (C) 2022 by Fonoster Inc (https://fonoster.com)
6
6
  * http://github.com/fonoster/routr
@@ -39,3 +39,9 @@ const addHeader = (request, header) => {
39
39
  return r;
40
40
  };
41
41
  exports.addHeader = addHeader;
42
+ const removeHeader = (request, name) => {
43
+ const r = common_1.Helper.deepCopy(request);
44
+ r.message.extensions = request.message.extensions.filter((ext) => ext.name !== name);
45
+ return r;
46
+ };
47
+ exports.removeHeader = removeHeader;
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
- listeningPoint: request.listeningPoint
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.7-alpha.0",
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.7-alpha.0",
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": "1c08d04c570d1fa156729a8f61e43c3c51b68f96"
46
+ "gitHead": "0824e725362fae3df83467f0f8989a2e4fa1f794"
47
47
  }