smoldot 3.5.0 → 3.7.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/dist/cjs/internals/bytecode/wasm0.js +1 -1
- package/dist/cjs/internals/bytecode/wasm1.js +1 -1
- package/dist/cjs/internals/bytecode/wasm2.js +1 -1
- package/dist/cjs/internals/bytecode/wasm3.js +1 -1
- package/dist/cjs/internals/dns-over-https.d.ts +31 -0
- package/dist/cjs/internals/dns-over-https.js +255 -0
- package/dist/cjs/internals/local-instance.d.ts +7 -1
- package/dist/cjs/internals/local-instance.js +13 -3
- package/dist/cjs/no-auto-bytecode-browser.js +65 -13
- package/dist/cjs/no-auto-bytecode-nodejs.js +27 -10
- package/dist/mjs/internals/bytecode/wasm0.js +1 -1
- package/dist/mjs/internals/bytecode/wasm1.js +1 -1
- package/dist/mjs/internals/bytecode/wasm2.js +1 -1
- package/dist/mjs/internals/bytecode/wasm3.js +1 -1
- package/dist/mjs/internals/dns-over-https.d.ts +31 -0
- package/dist/mjs/internals/dns-over-https.js +249 -0
- package/dist/mjs/internals/local-instance.d.ts +7 -1
- package/dist/mjs/internals/local-instance.js +13 -3
- package/dist/mjs/no-auto-bytecode-browser.js +65 -13
- package/dist/mjs/no-auto-bytecode-nodejs.js +27 -10
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function default_1() { return "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"; }
|
|
3
|
+
function default_1() { return "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"; }
|
|
4
4
|
exports.default = default_1;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builds the query asking for the addresses of `hostname` of the given family, base64url-encoded
|
|
3
|
+
* as the `dns` parameter of the request carries it. The identifier is `0`, as RFC 8484
|
|
4
|
+
* recommends for GET requests so that HTTP caches can serve identical queries.
|
|
5
|
+
*
|
|
6
|
+
* Throws if `hostname` isn't a valid DNS name: every label must be 1 to 63 bytes of printable
|
|
7
|
+
* ASCII, and the whole name at most 253. A trailing dot is accepted.
|
|
8
|
+
*/
|
|
9
|
+
export declare function encodeDnsQuery(hostname: string, family: 4 | 6): string;
|
|
10
|
+
/**
|
|
11
|
+
* Extracts the addresses of the given family out of a DNS response message.
|
|
12
|
+
*
|
|
13
|
+
* Only the answer section is looked at, and only its records of the wanted type (A for IPv4,
|
|
14
|
+
* AAAA for IPv6) whose data has the size of an address are kept, in the order they appear.
|
|
15
|
+
*
|
|
16
|
+
* Throws if the message isn't a well-formed response.
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseDnsMessageAnswer(message: Uint8Array, family: 4 | 6): string[];
|
|
19
|
+
/**
|
|
20
|
+
* Resolves `hostname` to an IP address over DNS-over-HTTPS.
|
|
21
|
+
*
|
|
22
|
+
* `family` restricts the address family. When it is `undefined`, A records are looked up first
|
|
23
|
+
* and AAAA records only if no A record was found.
|
|
24
|
+
*
|
|
25
|
+
* A hostname that is already an IP literal of an acceptable family is returned as is. A hostname
|
|
26
|
+
* that isn't a valid DNS name is rejected without any request.
|
|
27
|
+
*
|
|
28
|
+
* `fetchImpl` and `staggerMs` exist so that tests can run without network access and without
|
|
29
|
+
* waiting for the real stagger.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveDnsOverHttps(hostname: string, family: 4 | 6 | undefined, signal: AbortSignal, fetchImpl?: typeof fetch, staggerMs?: number): Promise<string>;
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Smoldot
|
|
3
|
+
// Copyright (C) 2019-2026 Parity Technologies (UK) Ltd.
|
|
4
|
+
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
|
|
5
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
6
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
7
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
8
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
9
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
10
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
11
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.resolveDnsOverHttps = exports.parseDnsMessageAnswer = exports.encodeDnsQuery = void 0;
|
|
16
|
+
/**
|
|
17
|
+
* Resolvers, in the order they are started. The first one is queried right away. Each following
|
|
18
|
+
* one is started `PROVIDER_STAGGER_MS` later, or immediately if the previous one has already
|
|
19
|
+
* failed. The first answer wins and the other requests are aborted.
|
|
20
|
+
*/
|
|
21
|
+
const PROVIDERS = [
|
|
22
|
+
{ host: 'cloudflare-dns.com', url: 'https://cloudflare-dns.com/dns-query' },
|
|
23
|
+
{ host: 'dns.quad9.net', url: 'https://dns.quad9.net/dns-query' },
|
|
24
|
+
{ host: 'doh.dns.sb', url: 'https://doh.dns.sb/dns-query' },
|
|
25
|
+
{ host: 'dns.google', url: 'https://dns.google/dns-query' },
|
|
26
|
+
];
|
|
27
|
+
/**
|
|
28
|
+
* Delay after which the next provider is also queried when the previous one hasn't answered yet.
|
|
29
|
+
*
|
|
30
|
+
* A warm answer from a healthy provider takes a few tens of milliseconds and arrives well before
|
|
31
|
+
* this delay, so only one provider is normally asked. A cold lookup or a slow mobile link may
|
|
32
|
+
* exceed it, which merely costs one redundant request that is aborted as soon as the first
|
|
33
|
+
* answer arrives.
|
|
34
|
+
*/
|
|
35
|
+
const PROVIDER_STAGGER_MS = 250;
|
|
36
|
+
const IPV4_REGEX = /^\d{1,3}(\.\d{1,3}){3}$/;
|
|
37
|
+
function isIpLiteral(value, family) {
|
|
38
|
+
return family === 4 ? IPV4_REGEX.test(value) : value.includes(':');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Builds the query asking for the addresses of `hostname` of the given family, base64url-encoded
|
|
42
|
+
* as the `dns` parameter of the request carries it. The identifier is `0`, as RFC 8484
|
|
43
|
+
* recommends for GET requests so that HTTP caches can serve identical queries.
|
|
44
|
+
*
|
|
45
|
+
* Throws if `hostname` isn't a valid DNS name: every label must be 1 to 63 bytes of printable
|
|
46
|
+
* ASCII, and the whole name at most 253. A trailing dot is accepted.
|
|
47
|
+
*/
|
|
48
|
+
function encodeDnsQuery(hostname, family) {
|
|
49
|
+
const name = hostname.replace(/\.$/, '');
|
|
50
|
+
const labels = name.split('.');
|
|
51
|
+
if (name.length > 253 || !labels.every((label) => /^[!-~]{1,63}$/.test(label)))
|
|
52
|
+
throw new Error('invalid hostname');
|
|
53
|
+
const header = String.fromCharCode(0, 0, // Identifier.
|
|
54
|
+
1, 0, // Flags: recursion desired.
|
|
55
|
+
0, 1, // One question.
|
|
56
|
+
0, 0, 0, 0, 0, 0);
|
|
57
|
+
const question = labels.map((label) => String.fromCharCode(label.length) + label).join('')
|
|
58
|
+
+ String.fromCharCode(0, 0, family === 4 ? 1 : 28, 0, 1); // Root label, QTYPE, QCLASS IN.
|
|
59
|
+
return btoa(header + question).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
60
|
+
}
|
|
61
|
+
exports.encodeDnsQuery = encodeDnsQuery;
|
|
62
|
+
/** Textual form of a 16-byte IPv6 address, with the first run of zero groups collapsed. */
|
|
63
|
+
function formatIpv6(bytes) {
|
|
64
|
+
const groups = [];
|
|
65
|
+
for (let i = 0; i < 16; i += 2)
|
|
66
|
+
groups.push(((bytes[i] << 8) | bytes[i + 1]).toString(16));
|
|
67
|
+
return groups.join(':').replace(/(^|:)(0:)+0(:|$)/, '::');
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extracts the addresses of the given family out of a DNS response message.
|
|
71
|
+
*
|
|
72
|
+
* Only the answer section is looked at, and only its records of the wanted type (A for IPv4,
|
|
73
|
+
* AAAA for IPv6) whose data has the size of an address are kept, in the order they appear.
|
|
74
|
+
*
|
|
75
|
+
* Throws if the message isn't a well-formed response.
|
|
76
|
+
*/
|
|
77
|
+
function parseDnsMessageAnswer(message, family) {
|
|
78
|
+
// Cursor over the message. Every read throws when it would run past the end.
|
|
79
|
+
let position = 0;
|
|
80
|
+
const malformed = () => new Error('malformed answer');
|
|
81
|
+
const take = (length) => {
|
|
82
|
+
if (position + length > message.length)
|
|
83
|
+
throw malformed();
|
|
84
|
+
position += length;
|
|
85
|
+
return message.subarray(position - length, position);
|
|
86
|
+
};
|
|
87
|
+
const u8 = () => take(1)[0];
|
|
88
|
+
const u16 = () => (u8() << 8) | u8();
|
|
89
|
+
// A name is a sequence of length-prefixed labels ended by the empty root label, or cut
|
|
90
|
+
// short by a two-byte compression pointer.
|
|
91
|
+
const skipName = () => {
|
|
92
|
+
for (let length = u8(); length !== 0; length = u8()) {
|
|
93
|
+
if (length >= 0xc0) {
|
|
94
|
+
u8(); // Second byte of the pointer.
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (length >= 0x40)
|
|
98
|
+
throw malformed(); // Reserved label types.
|
|
99
|
+
take(length);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
take(2); // Identifier.
|
|
103
|
+
const flags = u16();
|
|
104
|
+
if ((flags & 0x8000) === 0 || (flags & 0x0200) !== 0)
|
|
105
|
+
throw malformed(); // Not a response, or truncated.
|
|
106
|
+
if ((flags & 0x000f) !== 0)
|
|
107
|
+
return []; // Error code.
|
|
108
|
+
const questions = u16();
|
|
109
|
+
const answers = u16();
|
|
110
|
+
take(4); // NSCOUNT and ARCOUNT.
|
|
111
|
+
for (let i = 0; i < questions; i++) {
|
|
112
|
+
skipName();
|
|
113
|
+
take(4); // QTYPE and QCLASS.
|
|
114
|
+
}
|
|
115
|
+
const wantedType = family === 4 ? 1 : 28;
|
|
116
|
+
const wantedLength = family === 4 ? 4 : 16;
|
|
117
|
+
const addresses = [];
|
|
118
|
+
for (let i = 0; i < answers; i++) {
|
|
119
|
+
skipName();
|
|
120
|
+
const type = u16();
|
|
121
|
+
take(6); // CLASS and TTL.
|
|
122
|
+
const data = take(u16());
|
|
123
|
+
if (type === wantedType && data.length === wantedLength)
|
|
124
|
+
addresses.push(family === 4 ? data.join('.') : formatIpv6(data));
|
|
125
|
+
}
|
|
126
|
+
return addresses;
|
|
127
|
+
}
|
|
128
|
+
exports.parseDnsMessageAnswer = parseDnsMessageAnswer;
|
|
129
|
+
/**
|
|
130
|
+
* Sends the query to `provider` and returns the first address of the wanted family it answers.
|
|
131
|
+
*
|
|
132
|
+
* Rejects on any failure, with the provider's host prefixed to the reason.
|
|
133
|
+
*/
|
|
134
|
+
function queryProvider(provider, query, family, signal, fetchImpl) {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
try {
|
|
137
|
+
const response = yield fetchImpl(provider.url + '?dns=' + query, {
|
|
138
|
+
headers: { accept: 'application/dns-message' },
|
|
139
|
+
signal,
|
|
140
|
+
});
|
|
141
|
+
if (!response.ok)
|
|
142
|
+
throw new Error('HTTP status ' + response.status);
|
|
143
|
+
const addresses = parseDnsMessageAnswer(new Uint8Array(yield response.arrayBuffer()), family);
|
|
144
|
+
if (addresses.length === 0)
|
|
145
|
+
throw new Error('no ' + (family === 4 ? 'A' : 'AAAA') + ' record');
|
|
146
|
+
return addresses[0];
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new Error(provider.host + ': ' + (error instanceof Error ? error.message : String(error)));
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Races the providers for the addresses of one family.
|
|
155
|
+
*
|
|
156
|
+
* The first provider is queried immediately. Every `staggerMs`, or as soon as the previous
|
|
157
|
+
* request has failed, the next provider is started as well. The first address received is
|
|
158
|
+
* returned and the requests still pending are aborted. Rejects with the last failure once every
|
|
159
|
+
* provider has failed, with "DNS resolution aborted" as soon as `signal` fires, or right away if
|
|
160
|
+
* `hostname` isn't a valid DNS name.
|
|
161
|
+
*/
|
|
162
|
+
function raceProviders(hostname, family, signal, fetchImpl, staggerMs) {
|
|
163
|
+
return new Promise((resolve, reject) => {
|
|
164
|
+
const query = encodeDnsQuery(hostname, family);
|
|
165
|
+
// Aborting `inner` cancels every request of this race.
|
|
166
|
+
const inner = new AbortController();
|
|
167
|
+
let nextIndex = 0;
|
|
168
|
+
let failed = 0;
|
|
169
|
+
let settled = false;
|
|
170
|
+
let timer;
|
|
171
|
+
// The first outcome wins. The race is then over and the pending requests are cancelled.
|
|
172
|
+
function finish() {
|
|
173
|
+
settled = true;
|
|
174
|
+
clearTimeout(timer);
|
|
175
|
+
signal.removeEventListener('abort', onAbort);
|
|
176
|
+
inner.abort();
|
|
177
|
+
}
|
|
178
|
+
function succeed(address) {
|
|
179
|
+
if (settled)
|
|
180
|
+
return;
|
|
181
|
+
finish();
|
|
182
|
+
resolve(address);
|
|
183
|
+
}
|
|
184
|
+
function fail(error) {
|
|
185
|
+
if (settled)
|
|
186
|
+
return;
|
|
187
|
+
finish();
|
|
188
|
+
reject(error);
|
|
189
|
+
}
|
|
190
|
+
function onAbort() {
|
|
191
|
+
fail(new Error('DNS resolution aborted'));
|
|
192
|
+
}
|
|
193
|
+
// Sends the query to the next provider. Called once at the start, then again either
|
|
194
|
+
// when the stagger timer fires or when a request fails. A failure starts the next
|
|
195
|
+
// provider right away rather than after the stagger, unless every provider has failed.
|
|
196
|
+
function startNext() {
|
|
197
|
+
clearTimeout(timer);
|
|
198
|
+
const provider = PROVIDERS[nextIndex++];
|
|
199
|
+
if (provider === undefined)
|
|
200
|
+
return; // Every provider has been started already.
|
|
201
|
+
if (nextIndex < PROVIDERS.length)
|
|
202
|
+
timer = setTimeout(startNext, staggerMs);
|
|
203
|
+
queryProvider(provider, query, family, inner.signal, fetchImpl).then(succeed, (error) => {
|
|
204
|
+
// A request cancelled after the win rejects as well, and must be ignored.
|
|
205
|
+
if (settled)
|
|
206
|
+
return;
|
|
207
|
+
if (++failed === PROVIDERS.length)
|
|
208
|
+
fail(error);
|
|
209
|
+
else
|
|
210
|
+
startNext();
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
// An abort listener never fires for a signal that is already aborted.
|
|
214
|
+
if (signal.aborted) {
|
|
215
|
+
onAbort();
|
|
216
|
+
return;
|
|
217
|
+
}
|
|
218
|
+
signal.addEventListener('abort', onAbort);
|
|
219
|
+
startNext();
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Resolves `hostname` to an IP address over DNS-over-HTTPS.
|
|
224
|
+
*
|
|
225
|
+
* `family` restricts the address family. When it is `undefined`, A records are looked up first
|
|
226
|
+
* and AAAA records only if no A record was found.
|
|
227
|
+
*
|
|
228
|
+
* A hostname that is already an IP literal of an acceptable family is returned as is. A hostname
|
|
229
|
+
* that isn't a valid DNS name is rejected without any request.
|
|
230
|
+
*
|
|
231
|
+
* `fetchImpl` and `staggerMs` exist so that tests can run without network access and without
|
|
232
|
+
* waiting for the real stagger.
|
|
233
|
+
*/
|
|
234
|
+
function resolveDnsOverHttps(hostname_1, family_1, signal_1) {
|
|
235
|
+
return __awaiter(this, arguments, void 0, function* (hostname, family, signal, fetchImpl = fetch, staggerMs = PROVIDER_STAGGER_MS) {
|
|
236
|
+
const lowercase = hostname.toLowerCase();
|
|
237
|
+
if (lowercase === 'localhost' || lowercase.endsWith('.localhost'))
|
|
238
|
+
return family === 6 ? '::1' : '127.0.0.1';
|
|
239
|
+
if (family !== 6 && isIpLiteral(hostname, 4))
|
|
240
|
+
return hostname;
|
|
241
|
+
if (family !== 4 && isIpLiteral(hostname, 6))
|
|
242
|
+
return hostname;
|
|
243
|
+
if (family !== undefined)
|
|
244
|
+
return raceProviders(hostname, family, signal, fetchImpl, staggerMs);
|
|
245
|
+
// A records are preferred. AAAA records are only looked up when there is none. If the
|
|
246
|
+
// resolution was aborted meanwhile, the second race rejects right away as well.
|
|
247
|
+
try {
|
|
248
|
+
return yield raceProviders(hostname, 4, signal, fetchImpl, staggerMs);
|
|
249
|
+
}
|
|
250
|
+
catch (_a) {
|
|
251
|
+
return raceProviders(hostname, 6, signal, fetchImpl, staggerMs);
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
exports.resolveDnsOverHttps = resolveDnsOverHttps;
|
|
@@ -89,9 +89,15 @@ export type ParsedMultiaddr = {
|
|
|
89
89
|
} | {
|
|
90
90
|
ty: "webrtc";
|
|
91
91
|
targetPort: number;
|
|
92
|
-
ipVersion:
|
|
92
|
+
ipVersion: 4 | 6;
|
|
93
93
|
targetIp: string;
|
|
94
94
|
remoteTlsCertificateSha256: Uint8Array;
|
|
95
|
+
} | {
|
|
96
|
+
ty: "webrtc";
|
|
97
|
+
targetPort: number;
|
|
98
|
+
hostname: string;
|
|
99
|
+
family: 4 | 6 | undefined;
|
|
100
|
+
remoteTlsCertificateSha256: Uint8Array;
|
|
95
101
|
};
|
|
96
102
|
export interface Instance {
|
|
97
103
|
request: (request: string, chainId: number) => number;
|
|
@@ -183,7 +183,8 @@ function startLocalInstance(config, wasmModule, eventCallback) {
|
|
|
183
183
|
return config.forbidWss ? 0 : 1;
|
|
184
184
|
}
|
|
185
185
|
case 16:
|
|
186
|
-
case 17:
|
|
186
|
+
case 17:
|
|
187
|
+
case 18: {
|
|
187
188
|
return config.forbidWebRtc ? 0 : 1;
|
|
188
189
|
}
|
|
189
190
|
default:
|
|
@@ -231,14 +232,23 @@ function startLocalInstance(config, wasmModule, eventCallback) {
|
|
|
231
232
|
const targetPort = buffer.readUInt16BE(mem, addrPtr + 1);
|
|
232
233
|
const remoteTlsCertificateSha256 = mem.slice(addrPtr + 3, addrPtr + 35);
|
|
233
234
|
const targetIp = buffer.utf8BytesToString(mem, addrPtr + 35, addrLen - 35);
|
|
234
|
-
address = { ty: "webrtc", ipVersion:
|
|
235
|
+
address = { ty: "webrtc", ipVersion: 4, remoteTlsCertificateSha256, targetIp, targetPort };
|
|
235
236
|
break;
|
|
236
237
|
}
|
|
237
238
|
case 17: {
|
|
238
239
|
const targetPort = buffer.readUInt16BE(mem, addrPtr + 1);
|
|
239
240
|
const remoteTlsCertificateSha256 = mem.slice(addrPtr + 3, addrPtr + 35);
|
|
240
241
|
const targetIp = buffer.utf8BytesToString(mem, addrPtr + 35, addrLen - 35);
|
|
241
|
-
address = { ty: "webrtc", ipVersion:
|
|
242
|
+
address = { ty: "webrtc", ipVersion: 6, remoteTlsCertificateSha256, targetIp, targetPort };
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case 18: {
|
|
246
|
+
const targetPort = buffer.readUInt16BE(mem, addrPtr + 1);
|
|
247
|
+
const familyByte = buffer.readUInt8(mem, addrPtr + 3);
|
|
248
|
+
const family = familyByte === 4 ? 4 : familyByte === 6 ? 6 : undefined;
|
|
249
|
+
const remoteTlsCertificateSha256 = mem.slice(addrPtr + 4, addrPtr + 36);
|
|
250
|
+
const hostname = buffer.utf8BytesToString(mem, addrPtr + 36, addrLen - 36);
|
|
251
|
+
address = { ty: "webrtc", targetPort, hostname, family, remoteTlsCertificateSha256 };
|
|
242
252
|
break;
|
|
243
253
|
}
|
|
244
254
|
default:
|