@bytecodealliance/preview2-shim 0.18.1 → 0.19.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.
Files changed (81) hide show
  1. package/dist/browser/cli.d.ts +16 -0
  2. package/dist/browser/cli.js +109 -0
  3. package/dist/browser/clocks.d.ts +3 -0
  4. package/dist/browser/clocks.js +36 -0
  5. package/dist/browser/config.d.ts +2 -0
  6. package/{lib → dist}/browser/config.js +2 -4
  7. package/dist/browser/environment.d.ts +5 -0
  8. package/dist/browser/environment.js +24 -0
  9. package/dist/browser/filesystem.d.ts +132 -0
  10. package/dist/browser/filesystem.js +464 -0
  11. package/dist/browser/http.d.ts +4 -0
  12. package/dist/browser/http.js +643 -0
  13. package/dist/browser/index.d.ts +7 -0
  14. package/dist/browser/index.js +7 -0
  15. package/dist/browser/io.d.ts +58 -0
  16. package/dist/browser/io.js +205 -0
  17. package/dist/browser/random.d.ts +4 -0
  18. package/dist/browser/random.js +49 -0
  19. package/dist/browser/sockets.d.ts +8 -0
  20. package/dist/browser/sockets.js +66 -0
  21. package/dist/common/instantiation.d.ts +97 -0
  22. package/dist/common/instantiation.js +227 -0
  23. package/dist/io/calls.d.ts +91 -0
  24. package/{lib → dist}/io/calls.js +4 -19
  25. package/dist/io/worker-http.d.ts +17 -0
  26. package/dist/io/worker-http.js +192 -0
  27. package/dist/io/worker-io.d.ts +84 -0
  28. package/dist/io/worker-io.js +375 -0
  29. package/dist/io/worker-socket-tcp.d.ts +34 -0
  30. package/dist/io/worker-socket-tcp.js +251 -0
  31. package/dist/io/worker-socket-udp.d.ts +54 -0
  32. package/dist/io/worker-socket-udp.js +492 -0
  33. package/dist/io/worker-sockets.d.ts +32 -0
  34. package/dist/io/worker-sockets.js +265 -0
  35. package/dist/io/worker-thread.d.ts +73 -0
  36. package/dist/io/worker-thread.js +791 -0
  37. package/dist/nodejs/cli.d.ts +30 -0
  38. package/dist/nodejs/cli.js +86 -0
  39. package/dist/nodejs/clocks.d.ts +3 -0
  40. package/dist/nodejs/clocks.js +61 -0
  41. package/dist/nodejs/filesystem.d.ts +113 -0
  42. package/dist/nodejs/filesystem.js +758 -0
  43. package/dist/nodejs/http.d.ts +82 -0
  44. package/dist/nodejs/http.js +674 -0
  45. package/dist/nodejs/index.d.ts +7 -0
  46. package/dist/nodejs/index.js +7 -0
  47. package/dist/nodejs/io.d.ts +1 -0
  48. package/dist/nodejs/io.js +1 -0
  49. package/dist/nodejs/random.d.ts +4 -0
  50. package/dist/nodejs/random.js +42 -0
  51. package/dist/nodejs/sockets.d.ts +21 -0
  52. package/dist/nodejs/sockets.js +482 -0
  53. package/dist/synckit/index.d.ts +2 -0
  54. package/dist/synckit/index.js +117 -0
  55. package/package.json +26 -13
  56. package/types/instantiation.d.ts +7 -7
  57. package/lib/browser/cli.js +0 -135
  58. package/lib/browser/clocks.js +0 -39
  59. package/lib/browser/environment.js +0 -29
  60. package/lib/browser/filesystem.js +0 -503
  61. package/lib/browser/http.js +0 -707
  62. package/lib/browser/index.js +0 -9
  63. package/lib/browser/io.js +0 -262
  64. package/lib/browser/random.js +0 -56
  65. package/lib/browser/sockets.js +0 -88
  66. package/lib/common/instantiation.js +0 -253
  67. package/lib/io/worker-http.js +0 -206
  68. package/lib/io/worker-io.js +0 -468
  69. package/lib/io/worker-socket-tcp.js +0 -331
  70. package/lib/io/worker-socket-udp.js +0 -587
  71. package/lib/io/worker-sockets.js +0 -364
  72. package/lib/io/worker-thread.js +0 -1051
  73. package/lib/nodejs/cli.js +0 -109
  74. package/lib/nodejs/clocks.js +0 -67
  75. package/lib/nodejs/filesystem.js +0 -829
  76. package/lib/nodejs/http.js +0 -764
  77. package/lib/nodejs/index.js +0 -9
  78. package/lib/nodejs/io.js +0 -1
  79. package/lib/nodejs/random.js +0 -49
  80. package/lib/nodejs/sockets.js +0 -565
  81. package/lib/synckit/index.js +0 -127
@@ -0,0 +1,492 @@
1
+ import { createSocket } from "node:dgram";
2
+ import { createFuture, futureDispose, futureTakeValue, pollStateReady, verifyPollsDroppedForDrop, } from "./worker-thread.js";
3
+ import { convertSocketError, convertSocketErrorCode, getDefaultReceiveBufferSize, getDefaultSendBufferSize, ipSocketAddress, isIPv4MappedAddress, isWildcardAddress, noLookup, serializeIpAddress, SOCKET_STATE_BIND, SOCKET_STATE_BOUND, SOCKET_STATE_CLOSED, SOCKET_STATE_CONNECTION, SOCKET_STATE_INIT, } from "./worker-sockets.js";
4
+ // Experimental support for batched UDP sends. Set this to true to enable.
5
+ // This is not enabled by default because we need to figure out how to know
6
+ // how many datagrams were sent when there is an error in a batch.
7
+ // See the err path in "handler" in the "doSendBatch" of socketOutgoingDatagramStreamSend.
8
+ const UDP_BATCH_SENDS = false;
9
+ let udpSocketCnt = 0, datagramStreamCnt = 0;
10
+ export const udpSockets = new Map();
11
+ export const datagramStreams = new Map();
12
+ export function createUdpSocket({ family, unicastHopLimit, }) {
13
+ const udpSocket = createSocket({
14
+ type: family === "ipv6" ? "udp6" : "udp4",
15
+ reuseAddr: false,
16
+ ipv6Only: family === "ipv6",
17
+ lookup: noLookup,
18
+ });
19
+ udpSockets.set(++udpSocketCnt, {
20
+ state: SOCKET_STATE_INIT,
21
+ remoteAddress: null,
22
+ remotePort: null,
23
+ sendBufferSize: null,
24
+ receiveBufferSize: null,
25
+ unicastHopLimit,
26
+ udpSocket,
27
+ future: null,
28
+ serializedLocalAddress: null,
29
+ pollState: {
30
+ ready: true,
31
+ listener: () => null,
32
+ polls: [],
33
+ parentStream: null,
34
+ },
35
+ incomingDatagramStream: null,
36
+ outgoingDatagramStream: null,
37
+ });
38
+ return udpSocketCnt;
39
+ }
40
+ function createIncomingDatagramStream(socket) {
41
+ const id = ++datagramStreamCnt;
42
+ const pollState = {
43
+ ready: false,
44
+ listener: null,
45
+ polls: [],
46
+ parentStream: null,
47
+ };
48
+ const datagramStream = {
49
+ id,
50
+ active: true,
51
+ error: null,
52
+ socket,
53
+ queue: [],
54
+ cleanup,
55
+ pollState,
56
+ };
57
+ const { udpSocket } = socket;
58
+ datagramStreams.set(id, datagramStream);
59
+ function cleanup() {
60
+ udpSocket.off("message", onMessage);
61
+ udpSocket.off("error", onError);
62
+ }
63
+ function onMessage(data, rinfo) {
64
+ const family = rinfo.family.toLowerCase();
65
+ datagramStream.queue?.push({
66
+ data,
67
+ remoteAddress: ipSocketAddress(family, rinfo.address, rinfo.port),
68
+ });
69
+ if (!pollState.ready) {
70
+ pollStateReady(pollState);
71
+ }
72
+ }
73
+ function onError(err) {
74
+ datagramStream.error = err;
75
+ pollStateReady(datagramStream.pollState);
76
+ }
77
+ udpSocket.on("message", onMessage);
78
+ udpSocket.once("error", onError);
79
+ return datagramStream;
80
+ }
81
+ function createOutgoingDatagramStream(socket) {
82
+ const id = ++datagramStreamCnt;
83
+ const datagramStream = {
84
+ id,
85
+ active: true,
86
+ error: null,
87
+ socket,
88
+ cleanup,
89
+ pollState: {
90
+ ready: true,
91
+ listener: null,
92
+ polls: [],
93
+ parentStream: null,
94
+ },
95
+ };
96
+ const { udpSocket } = socket;
97
+ datagramStreams.set(id, datagramStream);
98
+ udpSocket.on("error", onError);
99
+ function onError(err) {
100
+ datagramStream.error = err;
101
+ pollStateReady(datagramStream.pollState);
102
+ }
103
+ function cleanup() {
104
+ udpSocket.off("error", onError);
105
+ }
106
+ return datagramStream;
107
+ }
108
+ export function socketUdpBindStart(id, localAddress, family) {
109
+ const socket = udpSockets.get(id);
110
+ if (family !== localAddress.tag || isIPv4MappedAddress(localAddress)) {
111
+ throw "invalid-argument";
112
+ }
113
+ const serializedLocalAddress = serializeIpAddress(localAddress);
114
+ if (socket.state !== SOCKET_STATE_INIT) {
115
+ throw "invalid-state";
116
+ }
117
+ socket.state = SOCKET_STATE_BIND;
118
+ const { udpSocket } = socket;
119
+ socket.future = createFuture(new Promise((resolve, reject) => {
120
+ function bindOk() {
121
+ resolve();
122
+ udpSocket.off("error", bindErr);
123
+ }
124
+ function bindErr(err) {
125
+ reject(convertSocketError(err));
126
+ udpSocket.off("listening", bindOk);
127
+ }
128
+ udpSocket.once("listening", bindOk);
129
+ udpSocket.once("error", bindErr);
130
+ udpSocket.bind(localAddress.val.port, serializedLocalAddress ?? undefined);
131
+ }), socket.pollState);
132
+ }
133
+ export function socketUdpBindFinish(id) {
134
+ const socket = udpSockets.get(id);
135
+ if (socket.state !== SOCKET_STATE_BIND) {
136
+ throw "not-in-progress";
137
+ }
138
+ if (!socket.pollState.ready) {
139
+ throw "would-block";
140
+ }
141
+ const { tag, val } = futureTakeValue(socket.future)?.val ?? {};
142
+ futureDispose(socket.future, false);
143
+ socket.future = null;
144
+ if (tag === "err") {
145
+ socket.state = SOCKET_STATE_CLOSED;
146
+ throw val;
147
+ }
148
+ else {
149
+ // once bound, we can now set the options
150
+ // since Node.js doesn't support setting them until bound
151
+ socket.udpSocket.setTTL(socket.unicastHopLimit);
152
+ if (socket.sendBufferSize) {
153
+ socket.udpSocket.setRecvBufferSize(socket.sendBufferSize);
154
+ }
155
+ if (socket.receiveBufferSize) {
156
+ socket.udpSocket.setSendBufferSize(socket.receiveBufferSize);
157
+ }
158
+ socket.state = SOCKET_STATE_BOUND;
159
+ return val;
160
+ }
161
+ }
162
+ export function socketUdpGetLocalAddress(id) {
163
+ const { udpSocket } = udpSockets.get(id);
164
+ let address, family, port;
165
+ try {
166
+ ({ address, family, port } = udpSocket.address());
167
+ }
168
+ catch (err) {
169
+ throw convertSocketError(err);
170
+ }
171
+ return ipSocketAddress(family.toLowerCase(), address, port);
172
+ }
173
+ /**
174
+ * @param {number} id
175
+ * @returns {IpSocketAddress}
176
+ */
177
+ export function socketUdpGetRemoteAddress(id) {
178
+ const { udpSocket } = udpSockets.get(id);
179
+ let address, family, port;
180
+ try {
181
+ ({ address, family, port } = udpSocket.remoteAddress());
182
+ }
183
+ catch (err) {
184
+ throw convertSocketError(err);
185
+ }
186
+ return ipSocketAddress(family.toLowerCase(), address, port);
187
+ }
188
+ export function socketUdpStream(id, remoteAddress) {
189
+ const socket = udpSockets.get(id);
190
+ const { udpSocket } = socket;
191
+ if (socket.state !== SOCKET_STATE_BOUND && socket.state !== SOCKET_STATE_CONNECTION) {
192
+ throw "invalid-state";
193
+ }
194
+ if (socket.state === SOCKET_STATE_INIT && !remoteAddress) {
195
+ throw "invalid-state";
196
+ }
197
+ if (remoteAddress &&
198
+ (remoteAddress.val.port === 0 ||
199
+ isWildcardAddress(remoteAddress) ||
200
+ (remoteAddress.tag === "ipv6" && isIPv4MappedAddress(remoteAddress)))) {
201
+ throw "invalid-argument";
202
+ }
203
+ if (socket.state === SOCKET_STATE_CONNECTION) {
204
+ socketDatagramStreamClear(socket.incomingDatagramStream);
205
+ socketDatagramStreamClear(socket.outgoingDatagramStream);
206
+ try {
207
+ udpSocket.disconnect();
208
+ }
209
+ catch (e) {
210
+ throw convertSocketErrorCode(e);
211
+ }
212
+ }
213
+ if (remoteAddress) {
214
+ const serializedRemoteAddress = serializeIpAddress(remoteAddress);
215
+ socket.remoteAddress = serializedRemoteAddress;
216
+ socket.remotePort = remoteAddress.val.port;
217
+ return new Promise((resolve, reject) => {
218
+ function connectOk() {
219
+ if (socket.state === SOCKET_STATE_INIT) {
220
+ socket.udpSocket.setTTL(socket.unicastHopLimit);
221
+ socket.udpSocket.setRecvBufferSize(socket.sendBufferSize);
222
+ socket.udpSocket.setSendBufferSize(socket.receiveBufferSize);
223
+ }
224
+ udpSocket.off("error", connectErr);
225
+ socket.state = SOCKET_STATE_CONNECTION;
226
+ resolve([
227
+ (socket.incomingDatagramStream = createIncomingDatagramStream(socket)).id,
228
+ (socket.outgoingDatagramStream = createOutgoingDatagramStream(socket)).id,
229
+ ]);
230
+ }
231
+ function connectErr(err) {
232
+ udpSocket.off("connect", connectOk);
233
+ reject(convertSocketError(err));
234
+ }
235
+ udpSocket.once("connect", connectOk);
236
+ udpSocket.once("error", connectErr);
237
+ udpSocket.connect(remoteAddress.val.port, serializedRemoteAddress ?? undefined);
238
+ });
239
+ }
240
+ else {
241
+ socket.state = SOCKET_STATE_BOUND;
242
+ socket.remoteAddress = null;
243
+ socket.remotePort = null;
244
+ return [
245
+ (socket.incomingDatagramStream = createIncomingDatagramStream(socket)).id,
246
+ (socket.outgoingDatagramStream = createOutgoingDatagramStream(socket)).id,
247
+ ];
248
+ }
249
+ }
250
+ export function socketUdpSetReceiveBufferSize(id, bufferSize) {
251
+ const socket = udpSockets.get(id);
252
+ const buf = Number(bufferSize);
253
+ if (socket.state !== SOCKET_STATE_INIT && socket.state !== SOCKET_STATE_BIND) {
254
+ try {
255
+ socket.udpSocket.setRecvBufferSize(buf);
256
+ }
257
+ catch (err) {
258
+ throw convertSocketError(err);
259
+ }
260
+ }
261
+ socket.receiveBufferSize = buf;
262
+ }
263
+ export function socketUdpSetSendBufferSize(id, bufferSize) {
264
+ const socket = udpSockets.get(id);
265
+ const buf = Number(bufferSize);
266
+ if (socket.state !== SOCKET_STATE_INIT && socket.state !== SOCKET_STATE_BIND) {
267
+ try {
268
+ socket.udpSocket.setSendBufferSize(buf);
269
+ }
270
+ catch (err) {
271
+ throw convertSocketError(err);
272
+ }
273
+ }
274
+ socket.sendBufferSize = buf;
275
+ }
276
+ export function socketUdpSetUnicastHopLimit(id, hopLimit) {
277
+ const socket = udpSockets.get(id);
278
+ if (socket.state !== SOCKET_STATE_INIT && socket.state !== SOCKET_STATE_BIND) {
279
+ try {
280
+ socket.udpSocket.setTTL(hopLimit);
281
+ }
282
+ catch (err) {
283
+ throw convertSocketError(err);
284
+ }
285
+ }
286
+ socket.unicastHopLimit = hopLimit;
287
+ }
288
+ export async function socketUdpGetReceiveBufferSize(id) {
289
+ const socket = udpSockets.get(id);
290
+ if (socket.receiveBufferSize) {
291
+ return BigInt(socket.receiveBufferSize);
292
+ }
293
+ if (socket.state !== SOCKET_STATE_INIT && socket.state !== SOCKET_STATE_BIND) {
294
+ try {
295
+ return BigInt((socket.receiveBufferSize = socket.udpSocket.getRecvBufferSize()));
296
+ }
297
+ catch (err) {
298
+ throw convertSocketError(err);
299
+ }
300
+ }
301
+ else {
302
+ const receiveBufferSize = await getDefaultReceiveBufferSize();
303
+ socket.receiveBufferSize = Number(receiveBufferSize);
304
+ return receiveBufferSize;
305
+ }
306
+ }
307
+ export async function socketUdpGetSendBufferSize(id) {
308
+ const socket = udpSockets.get(id);
309
+ if (socket.sendBufferSize) {
310
+ return BigInt(socket.sendBufferSize);
311
+ }
312
+ if (socket.state !== SOCKET_STATE_INIT && socket.state !== SOCKET_STATE_BIND) {
313
+ try {
314
+ return BigInt((socket.sendBufferSize = socket.udpSocket.getSendBufferSize()));
315
+ }
316
+ catch (err) {
317
+ throw convertSocketError(err);
318
+ }
319
+ }
320
+ else {
321
+ const sendBufferSize = await getDefaultSendBufferSize();
322
+ socket.sendBufferSize = Number(sendBufferSize);
323
+ return sendBufferSize;
324
+ }
325
+ }
326
+ export function socketUdpGetUnicastHopLimit(id) {
327
+ const { unicastHopLimit } = udpSockets.get(id);
328
+ return unicastHopLimit;
329
+ }
330
+ export function socketUdpDispose(id) {
331
+ const { udpSocket } = udpSockets.get(id);
332
+ return new Promise((resolve) => {
333
+ udpSocket.close(() => {
334
+ udpSockets.delete(id);
335
+ resolve(0);
336
+ });
337
+ });
338
+ }
339
+ export function socketIncomingDatagramStreamReceive(id, maxResults) {
340
+ const datagramStream = datagramStreams.get(id);
341
+ if (!datagramStream.active) {
342
+ throw new Error("wasi-io trap: attempt to receive on inactive incoming datagram stream");
343
+ }
344
+ if (maxResults === 0n || datagramStream.queue?.length === 0) {
345
+ return [];
346
+ }
347
+ if (datagramStream.error) {
348
+ throw convertSocketError(datagramStream.error);
349
+ }
350
+ return datagramStream.queue?.splice(0, Number(maxResults));
351
+ }
352
+ export async function socketOutgoingDatagramStreamSend(id, datagrams) {
353
+ const { active, socket } = datagramStreams.get(id);
354
+ if (!active) {
355
+ throw new Error("wasi-io trap: writing to inactive outgoing datagram stream");
356
+ }
357
+ const { udpSocket } = socket;
358
+ let sendQueue = [];
359
+ let sendQueueAddress = null;
360
+ let sendQueuePort = null;
361
+ let datagramsSent = 0;
362
+ for (const { data, remoteAddress } of datagrams) {
363
+ const address = remoteAddress ? serializeIpAddress(remoteAddress) : socket.remoteAddress;
364
+ const port = remoteAddress?.val.port ?? socket.remotePort;
365
+ let sendLastBatch = !UDP_BATCH_SENDS;
366
+ if (sendQueue.length > 0) {
367
+ if (sendQueueAddress === address && sendQueuePort === port) {
368
+ sendQueue.push(data);
369
+ }
370
+ else {
371
+ sendLastBatch = true;
372
+ }
373
+ }
374
+ else {
375
+ sendQueueAddress = address;
376
+ sendQueuePort = port;
377
+ sendQueue.push(data);
378
+ }
379
+ if (sendLastBatch) {
380
+ const err = await doSendBatch();
381
+ if (err) {
382
+ return BigInt(datagramsSent);
383
+ }
384
+ if (UDP_BATCH_SENDS) {
385
+ sendQueue = [data];
386
+ sendQueuePort = port;
387
+ sendQueueAddress = address;
388
+ }
389
+ else {
390
+ sendQueue = [];
391
+ sendQueuePort = port;
392
+ sendQueueAddress = address;
393
+ }
394
+ }
395
+ }
396
+ if (sendQueue.length) {
397
+ const err = await doSendBatch();
398
+ if (err) {
399
+ return BigInt(datagramsSent);
400
+ }
401
+ }
402
+ if (datagramsSent !== datagrams.length) {
403
+ throw new Error("wasi-io trap: expected to have sent all the datagrams");
404
+ }
405
+ return BigInt(datagramsSent);
406
+ function doSendBatch() {
407
+ return new Promise((resolve, reject) => {
408
+ if (socket.remoteAddress) {
409
+ if (sendQueueAddress !== socket.remoteAddress || sendQueuePort !== socket.remotePort) {
410
+ return void reject("invalid-argument");
411
+ }
412
+ udpSocket.send(sendQueue, handler);
413
+ }
414
+ else {
415
+ if (!sendQueueAddress) {
416
+ return void reject("invalid-argument");
417
+ }
418
+ // @ts-expect-error Proper function overload is not being recognized
419
+ udpSocket.send(sendQueue, sendQueuePort, sendQueueAddress, handler);
420
+ }
421
+ function handler(err, _sentBytes) {
422
+ if (err) {
423
+ // TODO: update datagramsSent properly on error for multiple sends
424
+ // to enable send batching. Perhaps a Node.js PR could
425
+ // still set the second sendBytes arg?
426
+ if (datagramsSent > 0) {
427
+ resolve(datagramsSent);
428
+ }
429
+ else {
430
+ reject(convertSocketError(err));
431
+ }
432
+ return;
433
+ }
434
+ datagramsSent += sendQueue.length;
435
+ resolve(false);
436
+ }
437
+ });
438
+ }
439
+ }
440
+ function checkSend(socket) {
441
+ try {
442
+ return Math.floor((socket.udpSocket.getSendBufferSize() - socket.udpSocket.getSendQueueSize()) / 1500);
443
+ }
444
+ catch (err) {
445
+ throw convertSocketError(err);
446
+ }
447
+ }
448
+ function pollSend(socket) {
449
+ socket.pollState.ready = false;
450
+ // The only way we have of dealing with getting a backpressure
451
+ // ready signal in Node.js is to just poll on the queue reducing.
452
+ // Ideally this should implement backoff on the poll interval,
453
+ // but that work should be done alongside careful benchmarking
454
+ // in due course.
455
+ setTimeout(() => {
456
+ const remaining = checkSend(socket);
457
+ if (remaining > 0) {
458
+ pollStateReady(socket.pollState);
459
+ }
460
+ else {
461
+ pollSend(socket);
462
+ }
463
+ });
464
+ }
465
+ export function socketOutgoingDatagramStreamCheckSend(id) {
466
+ const { active, socket } = datagramStreams.get(id);
467
+ if (!active) {
468
+ throw new Error("wasi-io trap: check send on inactive outgoing datagram stream");
469
+ }
470
+ const remaining = checkSend(socket);
471
+ if (remaining <= 0) {
472
+ pollSend(socket);
473
+ }
474
+ return BigInt(remaining);
475
+ }
476
+ function socketDatagramStreamClear(datagramStream) {
477
+ datagramStream.active = false;
478
+ if (datagramStream.cleanup) {
479
+ datagramStream.cleanup();
480
+ datagramStream.cleanup = null;
481
+ }
482
+ }
483
+ export function socketDatagramStreamDispose(id) {
484
+ const datagramStream = datagramStreams.get(id);
485
+ datagramStream.active = false;
486
+ if (datagramStream.cleanup) {
487
+ datagramStream.cleanup();
488
+ datagramStream.cleanup = () => null;
489
+ }
490
+ verifyPollsDroppedForDrop(datagramStream.pollState, "datagram stream");
491
+ datagramStreams.delete(id);
492
+ }
@@ -0,0 +1,32 @@
1
+ import { IpAddressFamily, IpSocketAddress, Ipv4Address, Ipv6Address } from "../../types/interfaces/wasi-sockets-network.js";
2
+ export declare const SOCKET_STATE_INIT: number;
3
+ export declare const SOCKET_STATE_BIND: number;
4
+ export declare const SOCKET_STATE_BOUND: number;
5
+ export declare const SOCKET_STATE_LISTEN: number;
6
+ export declare const SOCKET_STATE_LISTENER: number;
7
+ export declare const SOCKET_STATE_CONNECT: number;
8
+ export declare const SOCKET_STATE_CONNECTION: number;
9
+ export declare const SOCKET_STATE_CLOSED: number;
10
+ export declare function noLookup(ip: any, _opts: any, cb: any): void;
11
+ export declare function socketResolveAddress(name: string): Promise<{
12
+ tag: string;
13
+ val: Ipv4Address | Ipv6Address;
14
+ }[]> | Promise<{
15
+ tag: string;
16
+ val: Ipv4Address | Ipv6Address;
17
+ }[][]>;
18
+ export declare function convertSocketError(err: any): "unknown" | "would-block" | "connection-refused" | "invalid-argument" | "invalid-state" | "access-denied" | "not-supported" | "out-of-memory" | "concurrency-conflict" | "address-not-bindable" | "address-in-use" | "connection-reset" | "connection-aborted";
19
+ export declare function convertSocketErrorCode(code: any): "unknown" | "would-block" | "connection-refused" | "invalid-argument" | "invalid-state" | "access-denied" | "not-supported" | "out-of-memory" | "concurrency-conflict" | "address-not-bindable" | "address-in-use" | "connection-reset" | "connection-aborted";
20
+ export declare function tupleToIPv6(arr: Ipv6Address): string | null;
21
+ export declare function tupleToIpv4(arr: Ipv4Address): string | null;
22
+ export declare function isMulticastIpAddress(ipSocketAddress: IpSocketAddress): boolean;
23
+ export declare function isIPv4MappedAddress(ipSocketAddress: IpSocketAddress): boolean;
24
+ export declare function isUnicastIpAddress(ipSocketAddress: IpSocketAddress): boolean;
25
+ export declare function isWildcardAddress(ipSocketAddress: IpSocketAddress): boolean;
26
+ export declare function isBroadcastIpAddress(ipSocketAddress: IpSocketAddress): boolean;
27
+ export declare function serializeIpAddress(addr: IpSocketAddress): string | null;
28
+ export declare function ipv6ToTuple(ipv6: string): Ipv6Address;
29
+ export declare function ipv4ToTuple(ipv4: string): Ipv4Address;
30
+ export declare function ipSocketAddress(family: IpAddressFamily, addr: string, port: number): IpSocketAddress;
31
+ export declare function getDefaultSendBufferSize(): Promise<bigint>;
32
+ export declare function getDefaultReceiveBufferSize(): Promise<bigint>;