@limrun/api 0.48.4 → 0.49.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/CHANGELOG.md +4 -0
- package/client.d.mts +6 -3
- package/client.d.mts.map +1 -1
- package/client.d.ts +6 -3
- package/client.d.ts.map +1 -1
- package/client.js +4 -4
- package/client.js.map +1 -1
- package/client.mjs +2 -2
- package/client.mjs.map +1 -1
- package/destination-tunnel-dialer.d.mts +30 -2
- package/destination-tunnel-dialer.d.mts.map +1 -1
- package/destination-tunnel-dialer.d.ts +30 -2
- package/destination-tunnel-dialer.d.ts.map +1 -1
- package/destination-tunnel-dialer.js +349 -65
- package/destination-tunnel-dialer.js.map +1 -1
- package/destination-tunnel-dialer.mjs +345 -64
- package/destination-tunnel-dialer.mjs.map +1 -1
- package/destination-tunnel-har.d.mts +23 -0
- package/destination-tunnel-har.d.mts.map +1 -0
- package/destination-tunnel-har.d.ts +23 -0
- package/destination-tunnel-har.d.ts.map +1 -0
- package/destination-tunnel-har.js +164 -0
- package/destination-tunnel-har.js.map +1 -0
- package/destination-tunnel-har.mjs +160 -0
- package/destination-tunnel-har.mjs.map +1 -0
- package/destination-tunnel-inspection.d.mts +71 -0
- package/destination-tunnel-inspection.d.mts.map +1 -0
- package/destination-tunnel-inspection.d.ts +71 -0
- package/destination-tunnel-inspection.d.ts.map +1 -0
- package/destination-tunnel-inspection.js +267 -0
- package/destination-tunnel-inspection.js.map +1 -0
- package/destination-tunnel-inspection.mjs +261 -0
- package/destination-tunnel-inspection.mjs.map +1 -0
- package/destination-tunnel.d.mts +119 -14
- package/destination-tunnel.d.mts.map +1 -1
- package/destination-tunnel.d.ts +119 -14
- package/destination-tunnel.d.ts.map +1 -1
- package/destination-tunnel.js +407 -98
- package/destination-tunnel.js.map +1 -1
- package/destination-tunnel.mjs +374 -73
- package/destination-tunnel.mjs.map +1 -1
- package/index.d.mts +6 -0
- package/index.d.mts.map +1 -1
- package/index.d.ts +6 -0
- package/index.d.ts.map +1 -1
- package/index.js +23 -2
- package/index.js.map +1 -1
- package/index.mjs +5 -0
- package/index.mjs.map +1 -1
- package/instance-client.d.mts +105 -1
- package/instance-client.d.mts.map +1 -1
- package/instance-client.d.ts +105 -1
- package/instance-client.d.ts.map +1 -1
- package/instance-client.js +83 -1
- package/instance-client.js.map +1 -1
- package/instance-client.mjs +83 -1
- package/instance-client.mjs.map +1 -1
- package/internal/destination-tunnel-management.d.mts +4 -3
- package/internal/destination-tunnel-management.d.mts.map +1 -1
- package/internal/destination-tunnel-management.d.ts +4 -3
- package/internal/destination-tunnel-management.d.ts.map +1 -1
- package/internal/destination-tunnel-management.js +64 -46
- package/internal/destination-tunnel-management.js.map +1 -1
- package/internal/destination-tunnel-management.mjs +55 -37
- package/internal/destination-tunnel-management.mjs.map +1 -1
- package/internal/destination-tunnel-url.d.mts +2 -0
- package/internal/destination-tunnel-url.d.mts.map +1 -1
- package/internal/destination-tunnel-url.d.ts +2 -0
- package/internal/destination-tunnel-url.d.ts.map +1 -1
- package/internal/destination-tunnel-url.js +45 -5
- package/internal/destination-tunnel-url.js.map +1 -1
- package/internal/destination-tunnel-url.mjs +44 -5
- package/internal/destination-tunnel-url.mjs.map +1 -1
- package/internal/destination-tunnel-wire-reader.d.mts +23 -0
- package/internal/destination-tunnel-wire-reader.d.mts.map +1 -0
- package/internal/destination-tunnel-wire-reader.d.ts +23 -0
- package/internal/destination-tunnel-wire-reader.d.ts.map +1 -0
- package/internal/destination-tunnel-wire-reader.js +110 -0
- package/internal/destination-tunnel-wire-reader.js.map +1 -0
- package/internal/destination-tunnel-wire-reader.mjs +93 -0
- package/internal/destination-tunnel-wire-reader.mjs.map +1 -0
- package/internal/persist-option.d.mts +14 -0
- package/internal/persist-option.d.mts.map +1 -0
- package/internal/persist-option.d.ts +14 -0
- package/internal/persist-option.d.ts.map +1 -0
- package/internal/persist-option.js +18 -0
- package/internal/persist-option.js.map +1 -0
- package/internal/persist-option.mjs +15 -0
- package/internal/persist-option.mjs.map +1 -0
- package/internal/proxy-transport.d.mts +27 -0
- package/internal/proxy-transport.d.mts.map +1 -1
- package/internal/proxy-transport.d.ts +27 -0
- package/internal/proxy-transport.d.ts.map +1 -1
- package/internal/proxy-transport.js +206 -0
- package/internal/proxy-transport.js.map +1 -1
- package/internal/proxy-transport.mjs +205 -0
- package/internal/proxy-transport.mjs.map +1 -1
- package/internal/session-stream.d.mts +39 -0
- package/internal/session-stream.d.mts.map +1 -0
- package/internal/session-stream.d.ts +39 -0
- package/internal/session-stream.d.ts.map +1 -0
- package/internal/session-stream.js +144 -0
- package/internal/session-stream.js.map +1 -0
- package/internal/session-stream.mjs +139 -0
- package/internal/session-stream.mjs.map +1 -0
- package/internal/tslib.js +4 -4
- package/ios-client.d.mts +61 -4
- package/ios-client.d.mts.map +1 -1
- package/ios-client.d.ts +61 -4
- package/ios-client.d.ts.map +1 -1
- package/ios-client.js +48 -2
- package/ios-client.js.map +1 -1
- package/ios-client.mjs +48 -2
- package/ios-client.mjs.map +1 -1
- package/package.json +22 -1
- package/resources/android-instances-helpers.d.mts +25 -0
- package/resources/android-instances-helpers.d.mts.map +1 -0
- package/resources/android-instances-helpers.d.ts +25 -0
- package/resources/android-instances-helpers.d.ts.map +1 -0
- package/resources/android-instances-helpers.js +37 -0
- package/resources/android-instances-helpers.js.map +1 -0
- package/resources/android-instances-helpers.mjs +33 -0
- package/resources/android-instances-helpers.mjs.map +1 -0
- package/resources/index.d.mts +5 -2
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +5 -2
- package/resources/index.d.ts.map +1 -1
- package/resources/index.js +5 -5
- package/resources/index.js.map +1 -1
- package/resources/index.mjs +2 -2
- package/resources/index.mjs.map +1 -1
- package/resources/ios-instances-helpers.d.mts +25 -0
- package/resources/ios-instances-helpers.d.mts.map +1 -0
- package/resources/ios-instances-helpers.d.ts +25 -0
- package/resources/ios-instances-helpers.d.ts.map +1 -0
- package/resources/ios-instances-helpers.js +37 -0
- package/resources/ios-instances-helpers.js.map +1 -0
- package/resources/ios-instances-helpers.mjs +33 -0
- package/resources/ios-instances-helpers.mjs.map +1 -0
- package/resources/session-artifacts.d.mts +70 -0
- package/resources/session-artifacts.d.mts.map +1 -0
- package/resources/session-artifacts.d.ts +70 -0
- package/resources/session-artifacts.d.ts.map +1 -0
- package/resources/session-artifacts.js +8 -0
- package/resources/session-artifacts.js.map +1 -0
- package/resources/session-artifacts.mjs +7 -0
- package/resources/session-artifacts.mjs.map +1 -0
- package/src/client.ts +4 -2
- package/src/destination-tunnel-dialer.ts +403 -64
- package/src/destination-tunnel-har.ts +200 -0
- package/src/destination-tunnel-inspection.ts +367 -0
- package/src/destination-tunnel.ts +510 -88
- package/src/index.ts +52 -0
- package/src/instance-client.ts +271 -5
- package/src/internal/destination-tunnel-management.ts +67 -43
- package/src/internal/destination-tunnel-url.ts +61 -5
- package/src/internal/destination-tunnel-wire-reader.ts +109 -0
- package/src/internal/persist-option.ts +26 -0
- package/src/internal/proxy-transport.ts +248 -0
- package/src/internal/session-stream.ts +157 -0
- package/src/ios-client.ts +127 -8
- package/src/resources/android-instances-helpers.ts +45 -0
- package/src/resources/index.ts +9 -2
- package/src/resources/ios-instances-helpers.ts +45 -0
- package/src/resources/session-artifacts.ts +95 -0
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"destination-tunnel.js","sourceRoot":"","sources":["src/destination-tunnel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"destination-tunnel.js","sourceRoot":"","sources":["src/destination-tunnel.ts"],"names":[],"mappings":"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"}
|
package/destination-tunnel.mjs
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
|
+
import crypto from 'crypto';
|
|
1
2
|
import net from 'net';
|
|
3
|
+
import { domainToASCII } from 'url';
|
|
4
|
+
import { DestinationTunnelProtocolError, readArray, readBoolean, readInteger, readOptionalNonNegativeInteger, readOptionalString, readRecord, readString, } from "./internal/destination-tunnel-wire-reader.mjs";
|
|
5
|
+
export { DestinationTunnelProtocolError } from "./internal/destination-tunnel-wire-reader.mjs";
|
|
2
6
|
export const DESTINATION_TUNNEL_VERSION = 1;
|
|
3
7
|
export const DESTINATION_TUNNEL_MAX_ROUTES = 10;
|
|
8
|
+
export const DESTINATION_TUNNEL_MAX_DOMAINS = 64;
|
|
4
9
|
export const DESTINATION_TUNNEL_CONN_ID_HEADER_BYTES = 4;
|
|
5
|
-
|
|
10
|
+
/**
|
|
11
|
+
* IPv4 range used by the device side for synthetic (fake) DNS answers of
|
|
12
|
+
* matched domain selectors.
|
|
13
|
+
*/
|
|
14
|
+
export const DESTINATION_TUNNEL_FAKE_RANGE = '198.18.0.0/15';
|
|
15
|
+
/** Upper bound for per-flow receive windows advertised in open/openOk. */
|
|
16
|
+
export const DESTINATION_TUNNEL_MAX_WINDOW = 64 * 1024 * 1024;
|
|
17
|
+
/** Default receive window advertised by generic SDK tunnel clients. */
|
|
18
|
+
export const DESTINATION_TUNNEL_DEFAULT_WINDOW = 1024 * 1024;
|
|
19
|
+
/** Upper bound for a single windowUpdate increment. */
|
|
20
|
+
export const DESTINATION_TUNNEL_MAX_WINDOW_INCREMENT = 2147483647;
|
|
21
|
+
export const DESTINATION_TUNNEL_DEFAULT_MAX_BODY_BYTES = 10 * 1024 * 1024;
|
|
22
|
+
export const DESTINATION_TUNNEL_MAX_BODY_BYTES = 64 * 1024 * 1024;
|
|
23
|
+
export const DESTINATION_TUNNEL_DEFAULT_TTL_SECONDS = 72 * 60 * 60;
|
|
24
|
+
export const DESTINATION_TUNNEL_MAX_TTL_SECONDS = 30 * 24 * 60 * 60;
|
|
25
|
+
export class DestinationTunnelSelectorError extends Error {
|
|
6
26
|
constructor(code, message) {
|
|
7
27
|
super(message);
|
|
8
28
|
this.code = code;
|
|
9
|
-
this.name = '
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export class DestinationTunnelProtocolError extends Error {
|
|
13
|
-
constructor(message) {
|
|
14
|
-
super(message);
|
|
15
|
-
this.name = 'DestinationTunnelProtocolError';
|
|
29
|
+
this.name = 'DestinationTunnelSelectorError';
|
|
16
30
|
}
|
|
17
31
|
}
|
|
18
32
|
export function encodeDestinationTunnelDataFrame(connId, payload) {
|
|
@@ -34,32 +48,176 @@ export function decodeDestinationTunnelDataFrame(frame) {
|
|
|
34
48
|
payload: frame.subarray(DESTINATION_TUNNEL_CONN_ID_HEADER_BYTES),
|
|
35
49
|
};
|
|
36
50
|
}
|
|
37
|
-
export function validateDestinationTunnelRoutes(routes) {
|
|
51
|
+
export function validateDestinationTunnelRoutes(routes, options = {}) {
|
|
38
52
|
if (routes.length === 0) {
|
|
39
|
-
throw new
|
|
53
|
+
throw new DestinationTunnelSelectorError('empty', 'at least one tunnel route is required');
|
|
40
54
|
}
|
|
41
55
|
if (routes.length > DESTINATION_TUNNEL_MAX_ROUTES) {
|
|
42
|
-
throw new
|
|
56
|
+
throw new DestinationTunnelSelectorError('too_many', `at most ${DESTINATION_TUNNEL_MAX_ROUTES} tunnel routes are allowed`);
|
|
43
57
|
}
|
|
44
58
|
const canonicalRoutes = [];
|
|
45
59
|
const seen = new Set();
|
|
46
60
|
for (const route of routes) {
|
|
47
|
-
const canonical = canonicalizeDestinationTunnelRoute(route);
|
|
61
|
+
const canonical = canonicalizeDestinationTunnelRoute(route, options.minPort);
|
|
48
62
|
const key = `${canonical.host}\0${canonical.port}`;
|
|
49
63
|
if (seen.has(key)) {
|
|
50
|
-
throw new
|
|
64
|
+
throw new DestinationTunnelSelectorError('duplicate', `duplicate tunnel route ${canonical.host}:${canonical.port}`);
|
|
51
65
|
}
|
|
52
66
|
seen.add(key);
|
|
53
67
|
canonicalRoutes.push(canonical);
|
|
54
68
|
}
|
|
55
69
|
return canonicalRoutes;
|
|
56
70
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Validate and canonicalize a full selector set. Selector policy specific to
|
|
73
|
+
* one product (such as the Android bind-listener minimum route port) is
|
|
74
|
+
* expressed via options rather than separate message shapes.
|
|
75
|
+
*/
|
|
76
|
+
export function validateDestinationTunnelSelectors(selectors, options = {}) {
|
|
77
|
+
if (!Array.isArray(selectors)) {
|
|
78
|
+
throw new DestinationTunnelSelectorError('invalid_host', 'tunnel selectors must be an array');
|
|
62
79
|
}
|
|
80
|
+
if (selectors.length === 0) {
|
|
81
|
+
throw new DestinationTunnelSelectorError('empty', 'at least one tunnel selector is required');
|
|
82
|
+
}
|
|
83
|
+
const canonical = [];
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
let routeCount = 0;
|
|
86
|
+
let domainCount = 0;
|
|
87
|
+
for (const selector of selectors) {
|
|
88
|
+
const parsed = parseDestinationTunnelSelector(selector, options.minRoutePort);
|
|
89
|
+
if (parsed.route)
|
|
90
|
+
routeCount++;
|
|
91
|
+
else
|
|
92
|
+
domainCount++;
|
|
93
|
+
if (routeCount > DESTINATION_TUNNEL_MAX_ROUTES) {
|
|
94
|
+
throw new DestinationTunnelSelectorError('too_many', `at most ${DESTINATION_TUNNEL_MAX_ROUTES} exact tunnel selectors are allowed`);
|
|
95
|
+
}
|
|
96
|
+
if (domainCount > DESTINATION_TUNNEL_MAX_DOMAINS) {
|
|
97
|
+
throw new DestinationTunnelSelectorError('too_many', `at most ${DESTINATION_TUNNEL_MAX_DOMAINS} domain tunnel selectors are allowed`);
|
|
98
|
+
}
|
|
99
|
+
if (seen.has(parsed.value)) {
|
|
100
|
+
throw new DestinationTunnelSelectorError('duplicate', `duplicate tunnel selector ${parsed.value}`);
|
|
101
|
+
}
|
|
102
|
+
seen.add(parsed.value);
|
|
103
|
+
canonical.push(parsed.value);
|
|
104
|
+
}
|
|
105
|
+
return canonical;
|
|
106
|
+
}
|
|
107
|
+
export function classifyDestinationTunnelSelectors(selectors, options = {}) {
|
|
108
|
+
const canonical = validateDestinationTunnelSelectors(selectors, options);
|
|
109
|
+
const routes = [];
|
|
110
|
+
const domains = [];
|
|
111
|
+
for (const selector of canonical) {
|
|
112
|
+
const parsed = parseDestinationTunnelSelector(selector, options.minRoutePort);
|
|
113
|
+
if (parsed.route)
|
|
114
|
+
routes.push(parsed.route);
|
|
115
|
+
else
|
|
116
|
+
domains.push(parsed.domain);
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
...(routes.length > 0 ? { routes } : {}),
|
|
120
|
+
...(domains.length > 0 ? { domains } : {}),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
export function validateDestinationTunnelDomains(domains) {
|
|
124
|
+
if (domains.length > DESTINATION_TUNNEL_MAX_DOMAINS) {
|
|
125
|
+
throw new DestinationTunnelSelectorError('too_many', `at most ${DESTINATION_TUNNEL_MAX_DOMAINS} tunnel domains are allowed`);
|
|
126
|
+
}
|
|
127
|
+
const canonical = [];
|
|
128
|
+
const seen = new Set();
|
|
129
|
+
for (const domain of domains) {
|
|
130
|
+
const normalized = canonicalizeDestinationTunnelDomain(domain);
|
|
131
|
+
if (seen.has(normalized)) {
|
|
132
|
+
throw new DestinationTunnelSelectorError('duplicate', `duplicate tunnel domain ${normalized}`);
|
|
133
|
+
}
|
|
134
|
+
seen.add(normalized);
|
|
135
|
+
canonical.push(normalized);
|
|
136
|
+
}
|
|
137
|
+
return canonical;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Deterministic hash of the canonical selector configuration. Servers echo it
|
|
141
|
+
* in `ready` so clients can detect config mismatches across reconnects. The
|
|
142
|
+
* hashed JSON has fixed key order.
|
|
143
|
+
*/
|
|
144
|
+
export function destinationTunnelConfigHash(selectors, inspection = disabledDestinationTunnelInspection()) {
|
|
145
|
+
const canonical = validateDestinationTunnelSelectors(selectors);
|
|
146
|
+
const canonicalInspection = normalizeDestinationTunnelInspection(inspection);
|
|
147
|
+
const parts = [
|
|
148
|
+
`"version":${DESTINATION_TUNNEL_VERSION}`,
|
|
149
|
+
`"selectors":[${canonical.map((selector) => JSON.stringify(selector)).join(',')}]`,
|
|
150
|
+
];
|
|
151
|
+
parts.push(`"inspection":{"enabled":${canonicalInspection.enabled},"captureBodies":${canonicalInspection.captureBodies},"maxBodyBytes":${canonicalInspection.maxBodyBytes},"persist":${canonicalInspection.persist},"ttlSeconds":${canonicalInspection.ttlSeconds}}`);
|
|
152
|
+
return crypto
|
|
153
|
+
.createHash('sha256')
|
|
154
|
+
.update(`{${parts.join(',')}}`, 'utf8')
|
|
155
|
+
.digest('hex');
|
|
156
|
+
}
|
|
157
|
+
export function normalizeDestinationTunnelInspection(inspection) {
|
|
158
|
+
const enabled = inspection.enabled ?? false;
|
|
159
|
+
const captureBodies = inspection.captureBodies ?? false;
|
|
160
|
+
const maxBodyBytes = inspection.maxBodyBytes ?? DESTINATION_TUNNEL_DEFAULT_MAX_BODY_BYTES;
|
|
161
|
+
const persist = inspection.persist ?? false;
|
|
162
|
+
const ttlSeconds = inspection.ttlSeconds ?? DESTINATION_TUNNEL_DEFAULT_TTL_SECONDS;
|
|
163
|
+
if (captureBodies && !enabled) {
|
|
164
|
+
throw new DestinationTunnelProtocolError('captureBodies requires inspection to be enabled');
|
|
165
|
+
}
|
|
166
|
+
if (persist && !enabled) {
|
|
167
|
+
throw new DestinationTunnelProtocolError('persist requires inspection to be enabled');
|
|
168
|
+
}
|
|
169
|
+
if (!Number.isInteger(maxBodyBytes) ||
|
|
170
|
+
maxBodyBytes < 1 ||
|
|
171
|
+
maxBodyBytes > DESTINATION_TUNNEL_MAX_BODY_BYTES) {
|
|
172
|
+
throw new DestinationTunnelProtocolError(`maxBodyBytes must be an integer between 1 and ${DESTINATION_TUNNEL_MAX_BODY_BYTES}`);
|
|
173
|
+
}
|
|
174
|
+
if (!Number.isInteger(ttlSeconds) || ttlSeconds < 1 || ttlSeconds > DESTINATION_TUNNEL_MAX_TTL_SECONDS) {
|
|
175
|
+
throw new DestinationTunnelProtocolError(`ttlSeconds must be an integer between 1 and ${DESTINATION_TUNNEL_MAX_TTL_SECONDS}`);
|
|
176
|
+
}
|
|
177
|
+
return { enabled, captureBodies, maxBodyBytes, persist, ttlSeconds };
|
|
178
|
+
}
|
|
179
|
+
export function disabledDestinationTunnelInspection() {
|
|
180
|
+
return normalizeDestinationTunnelInspection({ enabled: false, captureBodies: false });
|
|
181
|
+
}
|
|
182
|
+
/** Selector IDs are one-based positions in the canonical selector array. */
|
|
183
|
+
export function destinationTunnelSelectorIds(selectors) {
|
|
184
|
+
return validateDestinationTunnelSelectors(selectors).map((_, index) => `selector-${index + 1}`);
|
|
185
|
+
}
|
|
186
|
+
export function destinationTunnelDomainMatches(pattern, host) {
|
|
187
|
+
const candidate = host.toLowerCase();
|
|
188
|
+
if (pattern.startsWith('*.')) {
|
|
189
|
+
const base = pattern.slice(2);
|
|
190
|
+
return candidate.length > base.length + 1 && candidate.endsWith(`.${base}`);
|
|
191
|
+
}
|
|
192
|
+
return candidate === pattern;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Verify a server OPEN against the negotiated selectors. Every OPEN must name
|
|
196
|
+
* a known selector ID and a target that the selector actually covers.
|
|
197
|
+
*/
|
|
198
|
+
export function assertDestinationTunnelOpenAllowed(message, selectors) {
|
|
199
|
+
const canonical = validateDestinationTunnelSelectors(selectors);
|
|
200
|
+
const match = /^selector-([1-9]\d*)$/.exec(message.selectorId);
|
|
201
|
+
const index = match?.[1] ? Number(match[1]) - 1 : -1;
|
|
202
|
+
const fail = () => {
|
|
203
|
+
throw new DestinationTunnelProtocolError(`server requested undeclared selector ${message.selectorId} ${message.host}:${message.port}`);
|
|
204
|
+
};
|
|
205
|
+
if (index < 0)
|
|
206
|
+
fail();
|
|
207
|
+
if (message.port === 53)
|
|
208
|
+
fail();
|
|
209
|
+
const selector = canonical[index];
|
|
210
|
+
if (selector === undefined)
|
|
211
|
+
return fail();
|
|
212
|
+
const parsed = parseDestinationTunnelSelector(selector);
|
|
213
|
+
if (parsed.route) {
|
|
214
|
+
if (message.host !== parsed.route.host || message.port !== parsed.route.port)
|
|
215
|
+
fail();
|
|
216
|
+
return 'route';
|
|
217
|
+
}
|
|
218
|
+
if (!destinationTunnelDomainMatches(parsed.domain, message.host))
|
|
219
|
+
fail();
|
|
220
|
+
return 'domain';
|
|
63
221
|
}
|
|
64
222
|
export function assertDestinationTunnelReady(message) {
|
|
65
223
|
if (message.version !== DESTINATION_TUNNEL_VERSION) {
|
|
@@ -75,10 +233,28 @@ export function encodeDestinationTunnelClientMessage(message) {
|
|
|
75
233
|
if (version !== DESTINATION_TUNNEL_VERSION) {
|
|
76
234
|
throw new DestinationTunnelProtocolError(`unsupported tunnel version ${version}`);
|
|
77
235
|
}
|
|
78
|
-
const
|
|
79
|
-
|
|
236
|
+
const selectors = validateDestinationTunnelSelectors(readArray(record, 'selectors').map((value) => {
|
|
237
|
+
if (typeof value !== 'string') {
|
|
238
|
+
throw new DestinationTunnelProtocolError('tunnel selector must be a string');
|
|
239
|
+
}
|
|
240
|
+
return value;
|
|
241
|
+
}));
|
|
242
|
+
const inspection = readInspectionConfig(record);
|
|
243
|
+
return JSON.stringify({
|
|
244
|
+
type,
|
|
245
|
+
version,
|
|
246
|
+
selectors,
|
|
247
|
+
inspection,
|
|
248
|
+
window: readWindow(record),
|
|
249
|
+
});
|
|
80
250
|
}
|
|
81
251
|
case 'openOk':
|
|
252
|
+
return JSON.stringify({
|
|
253
|
+
type,
|
|
254
|
+
connId: readConnectionId(record),
|
|
255
|
+
transport: readTransportResult(record),
|
|
256
|
+
window: readWindow(record),
|
|
257
|
+
});
|
|
82
258
|
case 'fin':
|
|
83
259
|
return JSON.stringify({ type, connId: readConnectionId(record) });
|
|
84
260
|
case 'openFail':
|
|
@@ -89,6 +265,12 @@ export function encodeDestinationTunnelClientMessage(message) {
|
|
|
89
265
|
reason: readString(record, 'reason'),
|
|
90
266
|
...readOptionalString(record, 'osCode'),
|
|
91
267
|
});
|
|
268
|
+
case 'windowUpdate':
|
|
269
|
+
return JSON.stringify({
|
|
270
|
+
type,
|
|
271
|
+
connId: readConnectionId(record),
|
|
272
|
+
increment: readWindowIncrement(record),
|
|
273
|
+
});
|
|
92
274
|
default:
|
|
93
275
|
throw new DestinationTunnelProtocolError(`unknown tunnel control message type ${type}`);
|
|
94
276
|
}
|
|
@@ -102,15 +284,18 @@ export function decodeDestinationTunnelServerMessage(value) {
|
|
|
102
284
|
type,
|
|
103
285
|
version: readInteger(message, 'version'),
|
|
104
286
|
tunnelId: readString(message, 'tunnelId'),
|
|
287
|
+
selectors: readArray(message, 'selectors').map((value, index) => readSelectorReport(value, `selector-${index + 1}`)),
|
|
288
|
+
configHash: readString(message, 'configHash'),
|
|
105
289
|
};
|
|
106
290
|
case 'open':
|
|
107
291
|
return {
|
|
108
292
|
type,
|
|
109
293
|
connId: readConnectionId(message),
|
|
110
|
-
|
|
294
|
+
selectorId: readString(message, 'selectorId'),
|
|
111
295
|
host: readString(message, 'host'),
|
|
112
296
|
port: readPort(message, 'port'),
|
|
113
|
-
|
|
297
|
+
transport: readTransportRequest(message),
|
|
298
|
+
window: readWindow(message),
|
|
114
299
|
};
|
|
115
300
|
case 'fin':
|
|
116
301
|
return { type, connId: readConnectionId(message) };
|
|
@@ -121,15 +306,54 @@ export function decodeDestinationTunnelServerMessage(value) {
|
|
|
121
306
|
reason: readString(message, 'reason'),
|
|
122
307
|
...readOptionalString(message, 'osCode'),
|
|
123
308
|
};
|
|
309
|
+
case 'windowUpdate':
|
|
310
|
+
return {
|
|
311
|
+
type,
|
|
312
|
+
connId: readConnectionId(message),
|
|
313
|
+
increment: readWindowIncrement(message),
|
|
314
|
+
};
|
|
124
315
|
case 'error':
|
|
125
316
|
return { type, code: readString(message, 'code') };
|
|
126
317
|
default:
|
|
127
318
|
throw new DestinationTunnelProtocolError(`unknown tunnel control message type ${type}`);
|
|
128
319
|
}
|
|
129
320
|
}
|
|
130
|
-
function
|
|
131
|
-
if (
|
|
132
|
-
throw new
|
|
321
|
+
function parseDestinationTunnelSelector(selector, minRoutePort = 1) {
|
|
322
|
+
if (typeof selector !== 'string' || selector.length === 0) {
|
|
323
|
+
throw new DestinationTunnelSelectorError('empty', 'tunnel selector must not be empty');
|
|
324
|
+
}
|
|
325
|
+
if (!selector.startsWith('[') && !selector.includes(':')) {
|
|
326
|
+
const domain = canonicalizeDestinationTunnelDomain(selector);
|
|
327
|
+
return { value: domain, domain };
|
|
328
|
+
}
|
|
329
|
+
let host;
|
|
330
|
+
let portText;
|
|
331
|
+
if (selector.startsWith('[')) {
|
|
332
|
+
const match = /^\[([^\]]+)\]:(\d+)$/.exec(selector);
|
|
333
|
+
if (!match?.[1] || !match[2]) {
|
|
334
|
+
throw new DestinationTunnelSelectorError('invalid_host', `invalid tunnel selector ${selector}`);
|
|
335
|
+
}
|
|
336
|
+
host = match[1];
|
|
337
|
+
portText = match[2];
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
const separator = selector.lastIndexOf(':');
|
|
341
|
+
if (separator <= 0 || selector.indexOf(':') !== separator) {
|
|
342
|
+
throw new DestinationTunnelSelectorError('invalid_host', `invalid tunnel selector ${selector}`);
|
|
343
|
+
}
|
|
344
|
+
host = selector.slice(0, separator);
|
|
345
|
+
portText = selector.slice(separator + 1);
|
|
346
|
+
}
|
|
347
|
+
if (!/^\d+$/.test(portText)) {
|
|
348
|
+
throw new DestinationTunnelSelectorError('invalid_port', `invalid tunnel selector port ${portText}`);
|
|
349
|
+
}
|
|
350
|
+
const route = canonicalizeDestinationTunnelRoute({ host, port: Number(portText) }, minRoutePort);
|
|
351
|
+
const formattedHost = route.host.includes(':') ? `[${route.host}]` : route.host;
|
|
352
|
+
return { value: `${formattedHost}:${route.port}`, route };
|
|
353
|
+
}
|
|
354
|
+
function canonicalizeDestinationTunnelRoute(route, minPort = 1) {
|
|
355
|
+
if (!Number.isInteger(route.port) || route.port < minPort || route.port > 65535 || route.port === 53) {
|
|
356
|
+
throw new DestinationTunnelSelectorError('invalid_port', `invalid tunnel route port ${route.port}`);
|
|
133
357
|
}
|
|
134
358
|
const asciiHost = Buffer.byteLength(route.host, 'utf8') === route.host.length;
|
|
135
359
|
if (asciiHost && route.host.toLowerCase() === 'localhost') {
|
|
@@ -143,11 +367,49 @@ function canonicalizeDestinationTunnelRoute(route) {
|
|
|
143
367
|
const hostname = new URL(`http://[${route.host}]/`).hostname;
|
|
144
368
|
const canonical = hostname.slice(1, -1);
|
|
145
369
|
if (canonical !== '::1' && /^::(?:[0-9a-f]{1,4}:)?[0-9a-f]{1,4}$/.test(canonical)) {
|
|
146
|
-
throw new
|
|
370
|
+
throw new DestinationTunnelSelectorError('invalid_host', `invalid tunnel route host ${route.host}`);
|
|
147
371
|
}
|
|
148
372
|
return { host: canonicalizeIPv6(canonical), port: route.port };
|
|
149
373
|
}
|
|
150
|
-
throw new
|
|
374
|
+
throw new DestinationTunnelSelectorError('invalid_host', `invalid tunnel route host ${route.host}`);
|
|
375
|
+
}
|
|
376
|
+
function canonicalizeDestinationTunnelDomain(domain) {
|
|
377
|
+
const invalid = () => {
|
|
378
|
+
throw new DestinationTunnelSelectorError('invalid_domain', `invalid tunnel domain ${domain}`);
|
|
379
|
+
};
|
|
380
|
+
if (typeof domain !== 'string' || domain.length === 0 || domain.length > 260)
|
|
381
|
+
invalid();
|
|
382
|
+
// ASCII only: reject anything IDNA mapping would change to avoid ambiguity
|
|
383
|
+
// between implementations. Users provide punycode (xn--) names directly.
|
|
384
|
+
if (Buffer.byteLength(domain, 'utf8') !== domain.length)
|
|
385
|
+
invalid();
|
|
386
|
+
const lowered = domain.toLowerCase();
|
|
387
|
+
const wildcard = lowered.startsWith('*.');
|
|
388
|
+
const base = wildcard ? lowered.slice(2) : lowered;
|
|
389
|
+
if (base.length === 0 || base.length > 253)
|
|
390
|
+
invalid();
|
|
391
|
+
if (base.includes('*'))
|
|
392
|
+
invalid();
|
|
393
|
+
if (base.endsWith('.') || base.startsWith('.'))
|
|
394
|
+
invalid();
|
|
395
|
+
if (net.isIP(base) !== 0)
|
|
396
|
+
invalid();
|
|
397
|
+
if (base === 'localhost')
|
|
398
|
+
invalid();
|
|
399
|
+
if (domainToASCII(base) !== base)
|
|
400
|
+
invalid();
|
|
401
|
+
const labels = base.split('.');
|
|
402
|
+
for (const label of labels) {
|
|
403
|
+
if (label.length === 0 || label.length > 63)
|
|
404
|
+
invalid();
|
|
405
|
+
if (!/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(label))
|
|
406
|
+
invalid();
|
|
407
|
+
}
|
|
408
|
+
// All-numeric final labels would be ambiguous with IPv4 literals.
|
|
409
|
+
const finalLabel = labels[labels.length - 1];
|
|
410
|
+
if (finalLabel !== undefined && /^\d+$/.test(finalLabel))
|
|
411
|
+
invalid();
|
|
412
|
+
return wildcard ? `*.${base}` : base;
|
|
151
413
|
}
|
|
152
414
|
function canonicalizeIPv6(host) {
|
|
153
415
|
const mappedIPv4 = /^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(host);
|
|
@@ -158,56 +420,88 @@ function canonicalizeIPv6(host) {
|
|
|
158
420
|
const low = Number.parseInt(mappedIPv4[2], 16);
|
|
159
421
|
return `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`;
|
|
160
422
|
}
|
|
161
|
-
function
|
|
162
|
-
const
|
|
163
|
-
|
|
164
|
-
|
|
423
|
+
function readSelectorReport(value, expectedId) {
|
|
424
|
+
const report = readRecord(value, 'tunnel selector');
|
|
425
|
+
const id = readString(report, 'id');
|
|
426
|
+
if (id !== expectedId) {
|
|
427
|
+
throw new DestinationTunnelProtocolError(`invalid tunnel selector id ${id}`);
|
|
165
428
|
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
429
|
+
const kind = readString(report, 'kind');
|
|
430
|
+
if (kind !== 'route' && kind !== 'domain') {
|
|
431
|
+
throw new DestinationTunnelProtocolError(`invalid tunnel selector kind ${kind}`);
|
|
432
|
+
}
|
|
433
|
+
const result = {
|
|
434
|
+
id,
|
|
435
|
+
kind,
|
|
436
|
+
value: readString(report, 'value'),
|
|
173
437
|
};
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
177
|
-
throw new DestinationTunnelProtocolError(`${name} must be an object`);
|
|
438
|
+
if (report['binds'] !== undefined) {
|
|
439
|
+
result.binds = readArray(report, 'binds').map(readBindReport);
|
|
178
440
|
}
|
|
179
|
-
return
|
|
441
|
+
return result;
|
|
180
442
|
}
|
|
181
|
-
function
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
|
|
443
|
+
function readBindReport(value) {
|
|
444
|
+
const bind = readRecord(value, 'tunnel bind report');
|
|
445
|
+
const status = readString(bind, 'status');
|
|
446
|
+
if (status !== 'ok' && status !== 'conflict' && status !== 'error') {
|
|
447
|
+
throw new DestinationTunnelProtocolError(`invalid tunnel bind status ${status}`);
|
|
185
448
|
}
|
|
186
|
-
return
|
|
449
|
+
return {
|
|
450
|
+
address: readString(bind, 'address'),
|
|
451
|
+
status,
|
|
452
|
+
...readOptionalString(bind, 'osCode'),
|
|
453
|
+
};
|
|
187
454
|
}
|
|
188
|
-
function
|
|
189
|
-
const
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
455
|
+
function readInspectionConfig(record) {
|
|
456
|
+
const inspection = readRecord(record['inspection'], 'inspection');
|
|
457
|
+
const enabled = readBoolean(inspection, 'enabled');
|
|
458
|
+
const captureBodies = readBoolean(inspection, 'captureBodies');
|
|
459
|
+
const maxBodyBytes = readInteger(inspection, 'maxBodyBytes');
|
|
460
|
+
const persist = readBoolean(inspection, 'persist');
|
|
461
|
+
const ttlSeconds = readInteger(inspection, 'ttlSeconds');
|
|
462
|
+
return normalizeDestinationTunnelInspection({
|
|
463
|
+
enabled,
|
|
464
|
+
captureBodies,
|
|
465
|
+
maxBodyBytes,
|
|
466
|
+
persist,
|
|
467
|
+
ttlSeconds,
|
|
468
|
+
});
|
|
194
469
|
}
|
|
195
|
-
function
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
470
|
+
function readTransportRequest(record) {
|
|
471
|
+
const transport = readRecord(record['transport'], 'transport');
|
|
472
|
+
const type = readString(transport, 'type');
|
|
473
|
+
if (type === 'tcp') {
|
|
474
|
+
return { type };
|
|
199
475
|
}
|
|
200
|
-
if (
|
|
201
|
-
|
|
476
|
+
if (type === 'tls') {
|
|
477
|
+
const serverName = readString(transport, 'serverName');
|
|
478
|
+
if (serverName.length === 0) {
|
|
479
|
+
throw new DestinationTunnelProtocolError('TLS transport requires serverName');
|
|
480
|
+
}
|
|
481
|
+
const alpnProtocols = readArray(transport, 'alpnProtocols').map((protocol) => {
|
|
482
|
+
if (typeof protocol !== 'string' || protocol.length === 0) {
|
|
483
|
+
throw new DestinationTunnelProtocolError('alpnProtocols must contain non-empty strings');
|
|
484
|
+
}
|
|
485
|
+
return protocol;
|
|
486
|
+
});
|
|
487
|
+
return { type, serverName, alpnProtocols };
|
|
202
488
|
}
|
|
203
|
-
|
|
489
|
+
throw new DestinationTunnelProtocolError(`unsupported tunnel transport ${type}`);
|
|
204
490
|
}
|
|
205
|
-
function
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
491
|
+
function readTransportResult(record) {
|
|
492
|
+
const transport = readRecord(record['transport'], 'transport');
|
|
493
|
+
const type = readString(transport, 'type');
|
|
494
|
+
if (type !== 'tcp' && type !== 'tls') {
|
|
495
|
+
throw new DestinationTunnelProtocolError(`unsupported tunnel transport ${type}`);
|
|
209
496
|
}
|
|
210
|
-
return
|
|
497
|
+
return {
|
|
498
|
+
type,
|
|
499
|
+
...readOptionalString(transport, 'alpnProtocol'),
|
|
500
|
+
...readOptionalString(transport, 'remoteAddress'),
|
|
501
|
+
...readOptionalNonNegativeInteger(transport, 'dnsMs'),
|
|
502
|
+
...readOptionalNonNegativeInteger(transport, 'connectMs'),
|
|
503
|
+
...readOptionalNonNegativeInteger(transport, 'tlsMs'),
|
|
504
|
+
};
|
|
211
505
|
}
|
|
212
506
|
function readPort(record, key) {
|
|
213
507
|
const value = readInteger(record, key);
|
|
@@ -216,6 +510,20 @@ function readPort(record, key) {
|
|
|
216
510
|
}
|
|
217
511
|
return value;
|
|
218
512
|
}
|
|
513
|
+
function readWindow(record) {
|
|
514
|
+
const value = readInteger(record, 'window');
|
|
515
|
+
if (value < 1 || value > DESTINATION_TUNNEL_MAX_WINDOW) {
|
|
516
|
+
throw new DestinationTunnelProtocolError(`window must be an integer between 1 and ${DESTINATION_TUNNEL_MAX_WINDOW}`);
|
|
517
|
+
}
|
|
518
|
+
return value;
|
|
519
|
+
}
|
|
520
|
+
function readWindowIncrement(record) {
|
|
521
|
+
const value = readInteger(record, 'increment');
|
|
522
|
+
if (value < 1 || value > DESTINATION_TUNNEL_MAX_WINDOW_INCREMENT) {
|
|
523
|
+
throw new DestinationTunnelProtocolError(`increment must be an integer between 1 and ${DESTINATION_TUNNEL_MAX_WINDOW_INCREMENT}`);
|
|
524
|
+
}
|
|
525
|
+
return value;
|
|
526
|
+
}
|
|
219
527
|
function readConnectionId(record) {
|
|
220
528
|
const value = readInteger(record, 'connId');
|
|
221
529
|
validateConnectionId(value);
|
|
@@ -226,11 +534,4 @@ function validateConnectionId(value) {
|
|
|
226
534
|
throw new DestinationTunnelProtocolError('connId must be an unsigned 32-bit integer');
|
|
227
535
|
}
|
|
228
536
|
}
|
|
229
|
-
function readTCP(record) {
|
|
230
|
-
const value = readString(record, 'proto');
|
|
231
|
-
if (value !== 'tcp') {
|
|
232
|
-
throw new DestinationTunnelProtocolError(`unsupported tunnel transport ${value}`);
|
|
233
|
-
}
|
|
234
|
-
return value;
|
|
235
|
-
}
|
|
236
537
|
//# sourceMappingURL=destination-tunnel.mjs.map
|