@bytecodealliance/preview2-shim 0.14.2 → 0.15.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.
@@ -64,12 +64,6 @@ export const tcp = {
64
64
  },
65
65
  addressFamily() {
66
66
 
67
- },
68
- ipv6Only() {
69
-
70
- },
71
- setIpv6Only() {
72
-
73
67
  },
74
68
  setListenBacklogSize() {
75
69
 
@@ -152,14 +146,6 @@ export const udp = {
152
146
 
153
147
  },
154
148
 
155
- ipv6Only () {
156
-
157
- },
158
-
159
- setIpv6Only () {
160
-
161
- },
162
-
163
149
  unicastHopLimit () {
164
150
 
165
151
  },
package/lib/io/calls.js CHANGED
@@ -1,10 +1,21 @@
1
1
  let call_id = 0;
2
2
 
3
- // Call is a 32 bit integer, leading 16 bits are call number, trailing 16 bits allow custom call types
3
+ // Call is a 32 bit integer, leading 8 bits are call number, trailing 24 bits allow custom call types
4
4
  export const CALL_MASK = 0xff000000;
5
5
  export const CALL_TYPE_MASK = 0x00ffffff;
6
6
  export const CALL_SHIFT = 24;
7
7
 
8
+ // Type indiciator for generic Stream, Future, and Poll calls
9
+ let cnt = 0;
10
+ export const STDIN = ++cnt;
11
+ export const STDOUT = ++cnt;
12
+ export const STDERR = ++cnt;
13
+ export const FILE = ++cnt;
14
+ export const HTTP = ++cnt;
15
+ export const SOCKET_TCP = ++cnt;
16
+ export const SOCKET_UDP = ++cnt;
17
+ export const CLOCKS = ++cnt;
18
+
8
19
  // Io Input Stream
9
20
  export const INPUT_STREAM_CREATE = ++call_id << CALL_SHIFT;
10
21
  export const INPUT_STREAM_READ = ++call_id << CALL_SHIFT;
@@ -34,11 +45,13 @@ export const OUTPUT_STREAM_GET_TOTAL_BYTES = ++call_id << CALL_SHIFT;
34
45
  // Io Poll
35
46
  export const POLL_POLLABLE_READY = ++call_id << CALL_SHIFT;
36
47
  export const POLL_POLLABLE_BLOCK = ++call_id << CALL_SHIFT;
48
+ export const POLL_POLLABLE_DISPOSE = ++call_id << CALL_SHIFT;
37
49
  export const POLL_POLL_LIST = ++call_id << CALL_SHIFT;
38
50
 
39
51
  // Futures
40
- export const FUTURE_GET_VALUE_AND_DISPOSE = ++call_id << CALL_SHIFT;
41
52
  export const FUTURE_DISPOSE = ++call_id << CALL_SHIFT;
53
+ export const FUTURE_TAKE_VALUE = ++call_id << CALL_SHIFT;
54
+ export const FUTURE_SUBSCRIBE = ++call_id << CALL_SHIFT;
42
55
 
43
56
  // Http
44
57
  export const HTTP_CREATE_REQUEST = ++call_id << 24;
@@ -49,143 +62,67 @@ export const HTTP_SERVER_STOP = ++call_id << CALL_SHIFT;
49
62
  export const HTTP_SERVER_INCOMING_HANDLER = ++call_id << CALL_SHIFT;
50
63
  export const HTTP_SERVER_SET_OUTGOING_RESPONSE = ++call_id << CALL_SHIFT;
51
64
  export const HTTP_SERVER_CLEAR_OUTGOING_RESPONSE = ++call_id << CALL_SHIFT;
65
+ export const HTTP_OUTGOING_BODY_DISPOSE = ++call_id << CALL_SHIFT;
52
66
 
53
67
  // Clocks
54
- export const CLOCKS_NOW = ++call_id << 24;
55
- export const CLOCKS_DURATION_SUBSCRIBE = ++call_id << 24;
56
- export const CLOCKS_INSTANT_SUBSCRIBE = ++call_id << 24;
57
-
58
- // Sockets (TCP)
59
- export const SOCKET_TCP_CREATE_HANDLE = ++call_id << 24;
60
- export const SOCKET_TCP_BIND = ++call_id << 24;
61
- export const SOCKET_TCP_CONNECT = ++call_id << 24;
62
- export const SOCKET_TCP_LISTEN = ++call_id << 24;
63
- export const SOCKET_TCP_ACCEPT = ++call_id << 24;
64
- export const SOCKET_TCP_GET_LOCAL_ADDRESS = ++call_id << 24;
65
- export const SOCKET_TCP_GET_REMOTE_ADDRESS = ++call_id << 24;
66
- export const SOCKET_TCP_SHUTDOWN = ++call_id << 24;
67
- export const SOCKET_TCP_SET_KEEP_ALIVE = ++call_id << 24;
68
- export const SOCKET_TCP_DISPOSE = ++call_id << 24;
69
- export const SOCKET_TCP_CREATE_INPUT_STREAM = ++call_id << 24;
70
- export const SOCKET_TCP_CREATE_OUTPUT_STREAM = ++call_id << 24;
71
- // Sockets (UDP)
72
- export const SOCKET_UDP_CREATE_HANDLE = ++call_id << 24;
73
- export const SOCKET_UDP_BIND = ++call_id << 24;
74
- export const SOCKET_UDP_CONNECT = ++call_id << 24;
75
- export const SOCKET_UDP_DISCONNECT = ++call_id << 24;
76
- export const SOCKET_UDP_CHECK_SEND = ++call_id << 24;
77
- export const SOCKET_UDP_SEND = ++call_id << 24;
78
- export const SOCKET_UDP_RECEIVE = ++call_id << 24;
79
- export const SOCKET_UDP_DISPOSE = ++call_id << 24;
80
- export const SOCKET_UDP_GET_LOCAL_ADDRESS = ++call_id << 24;
81
- export const SOCKET_UDP_GET_REMOTE_ADDRESS = ++call_id << 24;
82
- export const SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE = ++call_id << 24;
83
- export const SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE = ++call_id << 24;
84
- export const SOCKET_UDP_GET_SEND_BUFFER_SIZE = ++call_id << 24;
85
- export const SOCKET_UDP_SET_SEND_BUFFER_SIZE = ++call_id << 24;
86
- export const SOCKET_UDP_SET_UNICAST_HOP_LIMIT = ++call_id << 24;
87
- export const SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST = ++call_id << 24;
88
- export const SOCKET_RESOLVE_ADDRESS_GET_AND_DISPOSE_REQUEST = ++call_id << 24;
89
- export const SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST = ++call_id << 24;
90
-
91
- // Type indiciator for generic Stream, Future, and Poll calls
92
- let cnt = 0;
93
- export const STDIN = ++cnt;
94
- export const STDOUT = ++cnt;
95
- export const STDERR = ++cnt;
96
- export const FILE = ++cnt;
97
- export const HTTP = ++cnt;
98
- export const SOCKET = ++cnt;
99
-
100
- export const callTypeMap = {
101
- [STDIN]: "STDIN",
102
- [STDOUT]: "STDOUT",
103
- [STDERR]: "STDERR",
104
- [FILE]: "FILE",
105
- [HTTP]: "HTTP",
106
- [SOCKET]: "SOCKET",
107
- };
108
-
109
- export const callMap = {
110
- [INPUT_STREAM_CREATE]: 'INPUT_STREAM_CREATE',
111
- [INPUT_STREAM_READ]: "INPUT_STREAM_READ",
112
- [INPUT_STREAM_BLOCKING_READ]: "INPUT_STREAM_BLOCKING_READ",
113
- [INPUT_STREAM_SKIP]: "INPUT_STREAM_SKIP",
114
- [INPUT_STREAM_BLOCKING_SKIP]: "INPUT_STREAM_BLOCKING_SKIP",
115
- [INPUT_STREAM_SUBSCRIBE]: "INPUT_STREAM_SUBSCRIBE",
116
- [INPUT_STREAM_DISPOSE]: "INPUT_STREAM_DISPOSE",
117
-
118
- // Io Output Stream
119
- [OUTPUT_STREAM_CREATE]: "OUTPUT_STREAM_CREATE",
120
- [OUTPUT_STREAM_CHECK_WRITE]: "OUTPUT_STREAM_CHECK_WRITE",
121
- [OUTPUT_STREAM_WRITE]: "OUTPUT_STREAM_WRITE",
122
- [OUTPUT_STREAM_BLOCKING_WRITE_AND_FLUSH]: "OUTPUT_STREAM_BLOCKING_WRITE_AND_FLUSH",
123
- [OUTPUT_STREAM_FLUSH]: "OUTPUT_STREAM_FLUSH",
124
- [OUTPUT_STREAM_BLOCKING_FLUSH]: "OUTPUT_STREAM_BLOCKING_FLUSH",
125
- [OUTPUT_STREAM_WRITE_ZEROES]: "OUTPUT_STREAM_WRITE_ZEROES",
126
- [OUTPUT_STREAM_BLOCKING_WRITE_ZEROES_AND_FLUSH]: "OUTPUT_STREAM_BLOCKING_WRITE_ZEROES_AND_FLUSH",
127
- [OUTPUT_STREAM_SPLICE]: "OUTPUT_STREAM_SPLICE",
128
- [OUTPUT_STREAM_BLOCKING_SPLICE]: "OUTPUT_STREAM_BLOCKING_SPLICE",
129
- [OUTPUT_STREAM_SUBSCRIBE]: "OUTPUT_STREAM_SUBSCRIBE",
130
- [OUTPUT_STREAM_DISPOSE]: "OUTPUT_STREAM_DISPOSE",
131
-
132
- [OUTPUT_STREAM_GET_TOTAL_BYTES]: "OUTPUT_STREAM_GET_TOTAL_BYTES",
68
+ export const CLOCKS_NOW = ++call_id << CALL_SHIFT;
69
+ export const CLOCKS_DURATION_SUBSCRIBE = ++call_id << CALL_SHIFT;
70
+ export const CLOCKS_INSTANT_SUBSCRIBE = ++call_id << CALL_SHIFT;
71
+
72
+ // Sockets
73
+ // Tcp
74
+ export const SOCKET_TCP_CREATE_HANDLE = ++call_id << CALL_SHIFT;
75
+ export const SOCKET_TCP_BIND_START = ++call_id << CALL_SHIFT;
76
+ export const SOCKET_TCP_BIND_FINISH = ++call_id << CALL_SHIFT;
77
+ export const SOCKET_TCP_CONNECT_START = ++call_id << CALL_SHIFT;
78
+ export const SOCKET_TCP_CONNECT_FINISH = ++call_id << CALL_SHIFT;
79
+ export const SOCKET_TCP_SUBSCRIBE = ++call_id << CALL_SHIFT;
80
+ export const SOCKET_TCP_LISTEN_START = ++call_id << CALL_SHIFT;
81
+ export const SOCKET_TCP_LISTEN_FINISH = ++call_id << CALL_SHIFT;
82
+ export const SOCKET_TCP_IS_LISTENING = ++call_id << CALL_SHIFT;
83
+ export const SOCKET_TCP_ACCEPT = ++call_id << CALL_SHIFT;
84
+ export const SOCKET_TCP_GET_LOCAL_ADDRESS = ++call_id << CALL_SHIFT;
85
+ export const SOCKET_TCP_GET_REMOTE_ADDRESS = ++call_id << CALL_SHIFT;
86
+ export const SOCKET_TCP_SET_KEEP_ALIVE = ++call_id << CALL_SHIFT;
87
+ export const SOCKET_TCP_SET_LISTEN_BACKLOG_SIZE = ++call_id << CALL_SHIFT;
88
+ export const SOCKET_TCP_SHUTDOWN = ++call_id << CALL_SHIFT;
89
+ export const SOCKET_TCP_DISPOSE = ++call_id << CALL_SHIFT;
90
+ // Udp
91
+ export const SOCKET_UDP_CREATE_HANDLE = ++call_id << CALL_SHIFT;
92
+ export const SOCKET_UDP_BIND_START = ++call_id << CALL_SHIFT;
93
+ export const SOCKET_UDP_BIND_FINISH = ++call_id << CALL_SHIFT;
94
+ export const SOCKET_UDP_STREAM = ++call_id << CALL_SHIFT;
95
+ export const SOCKET_UDP_SUBSCRIBE = ++call_id << CALL_SHIFT;
96
+ export const SOCKET_UDP_DISPOSE = ++call_id << CALL_SHIFT;
97
+ export const SOCKET_UDP_GET_LOCAL_ADDRESS = ++call_id << CALL_SHIFT;
98
+ export const SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE = ++call_id << CALL_SHIFT;
99
+ export const SOCKET_UDP_GET_REMOTE_ADDRESS = ++call_id << CALL_SHIFT;
100
+ export const SOCKET_UDP_GET_SEND_BUFFER_SIZE = ++call_id << CALL_SHIFT;
101
+ export const SOCKET_UDP_GET_UNICAST_HOP_LIMIT = ++call_id << CALL_SHIFT;
102
+ export const SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE = ++call_id << CALL_SHIFT;
103
+ export const SOCKET_UDP_SET_SEND_BUFFER_SIZE = ++call_id << CALL_SHIFT;
104
+ export const SOCKET_UDP_SET_UNICAST_HOP_LIMIT = ++call_id << CALL_SHIFT;
105
+ export const SOCKET_INCOMING_DATAGRAM_STREAM_RECEIVE = ++call_id << CALL_SHIFT;
106
+ export const SOCKET_OUTGOING_DATAGRAM_STREAM_CHECK_SEND =
107
+ ++call_id << CALL_SHIFT;
108
+ export const SOCKET_OUTGOING_DATAGRAM_STREAM_SEND = ++call_id << CALL_SHIFT;
109
+ export const SOCKET_DATAGRAM_STREAM_SUBSCRIBE = ++call_id << CALL_SHIFT;
110
+ export const SOCKET_DATAGRAM_STREAM_DISPOSE = ++call_id << CALL_SHIFT;
133
111
 
134
- // Io Poll
135
- [POLL_POLLABLE_READY]: "POLL_POLLABLE_READY",
136
- [POLL_POLLABLE_BLOCK]: "POLL_POLLABLE_BLOCK",
137
- [POLL_POLL_LIST]: "POLL_POLL_LIST",
112
+ export const SOCKET_GET_DEFAULT_SEND_BUFFER_SIZE = ++call_id << CALL_SHIFT;
113
+ export const SOCKET_GET_DEFAULT_RECEIVE_BUFFER_SIZE = ++call_id << CALL_SHIFT;
138
114
 
139
- // Futures
140
- [FUTURE_GET_VALUE_AND_DISPOSE]: "FUTURE_GET_VALUE_AND_DISPOSE",
141
- [FUTURE_DISPOSE]: "FUTURE_DISPOSE",
115
+ // Name lookup
116
+ export const SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST = ++call_id << CALL_SHIFT;
117
+ export const SOCKET_RESOLVE_ADDRESS_TAKE_REQUEST = ++call_id << CALL_SHIFT;
118
+ export const SOCKET_RESOLVE_ADDRESS_SUBSCRIBE_REQUEST = ++call_id << CALL_SHIFT;
119
+ export const SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST = ++call_id << CALL_SHIFT;
142
120
 
143
- // Http
144
- [HTTP_CREATE_REQUEST]: "HTTP_CREATE_REQUEST",
145
- [HTTP_OUTPUT_STREAM_FINISH]: "HTTP_OUTPUT_STREAM_FINISH",
146
- // Http server
147
- [HTTP_SERVER_START]: "HTTP_SERVER_START",
148
- [HTTP_SERVER_STOP]: "HTTP_SERVER_STOP",
149
- [HTTP_SERVER_INCOMING_HANDLER]: "HTTP_SERVER_INCOMING_HANDLER",
150
- [HTTP_SERVER_SET_OUTGOING_RESPONSE]: "HTTP_SERVER_SET_OUTGOING_RESPONSE",
151
- [HTTP_SERVER_CLEAR_OUTGOING_RESPONSE]: "HTTP_SERVER_CLEAR_OUTGOING_RESPONSE",
121
+ export const reverseMap = {};
152
122
 
153
- // Clocks
154
- [CLOCKS_NOW]: "CLOCKS_NOW",
155
- [CLOCKS_DURATION_SUBSCRIBE]: "CLOCKS_DURATION_SUBSCRIBE",
156
- [CLOCKS_INSTANT_SUBSCRIBE]: "CLOCKS_INSTANT_SUBSCRIBE",
123
+ import * as calls from "./calls.js";
157
124
 
158
- // Sockets TCP
159
- [SOCKET_TCP_CREATE_HANDLE]: "SOCKET_TCP_CREATE_HANDLE",
160
- [SOCKET_TCP_BIND]: "SOCKET_TCP_BIND",
161
- [SOCKET_TCP_CONNECT]: "SOCKET_TCP_CONNECT",
162
- [SOCKET_TCP_LISTEN]: "SOCKET_TCP_LISTEN",
163
- [SOCKET_TCP_ACCEPT]: "SOCKET_TCP_ACCEPT",
164
- [SOCKET_TCP_GET_LOCAL_ADDRESS]: "SOCKET_TCP_GET_LOCAL_ADDRESS",
165
- [SOCKET_TCP_GET_REMOTE_ADDRESS]: "SOCKET_TCP_GET_REMOTE_ADDRESS",
166
- [SOCKET_TCP_SHUTDOWN]: "SOCKET_TCP_SHUTDOWN",
167
- [SOCKET_TCP_SET_KEEP_ALIVE]: "SOCKET_TCP_SET_KEEP_ALIVE",
168
- [SOCKET_TCP_DISPOSE]: "SOCKET_TCP_DISPOSE",
169
- [SOCKET_TCP_CREATE_INPUT_STREAM]: "SOCKET_TCP_CREATE_INPUT_STREAM",
170
- [SOCKET_TCP_CREATE_OUTPUT_STREAM]: "SOCKET_TCP_CREATE_OUTPUT_STREAM",
171
- // Sockets UDP
172
- [SOCKET_UDP_CREATE_HANDLE]: "SOCKET_UDP_CREATE_HANDLE",
173
- [SOCKET_UDP_BIND]: "SOCKET_UDP_BIND",
174
- [SOCKET_UDP_CONNECT]: "SOCKET_UDP_CONNECT",
175
- [SOCKET_UDP_DISCONNECT]: "SOCKET_UDP_DISCONNECT",
176
- [SOCKET_UDP_CHECK_SEND]: "SOCKET_UDP_CHECK_SEND",
177
- [SOCKET_UDP_SEND]: "SOCKET_UDP_SEND",
178
- [SOCKET_UDP_RECEIVE]: "SOCKET_UDP_RECEIVE",
179
- [SOCKET_UDP_DISPOSE]: "SOCKET_UDP_DISPOSE",
180
- [SOCKET_UDP_GET_LOCAL_ADDRESS]: "SOCKET_UDP_GET_LOCAL_ADDRESS",
181
- [SOCKET_UDP_GET_REMOTE_ADDRESS]: "SOCKET_UDP_GET_REMOTE_ADDRESS",
182
- [SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE]: "SOCKET_UDP_GET_RECEIVE_BUFFER_SIZE",
183
- [SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE]: "SOCKET_UDP_SET_RECEIVE_BUFFER_SIZE",
184
- [SOCKET_UDP_GET_SEND_BUFFER_SIZE]: "SOCKET_UDP_GET_SEND_BUFFER_SIZE",
185
- [SOCKET_UDP_SET_SEND_BUFFER_SIZE]: "SOCKET_UDP_SET_SEND_BUFFER_SIZE",
186
- [SOCKET_UDP_SET_UNICAST_HOP_LIMIT]: "SOCKET_UDP_SET_UNICAST_HOP_LIMIT",
187
- // Socket DNS
188
- [SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST]: "SOCKET_RESOLVE_ADDRESS_CREATE_REQUEST",
189
- [SOCKET_RESOLVE_ADDRESS_GET_AND_DISPOSE_REQUEST]: "SOCKET_RESOLVE_ADDRESS_GET_AND_DISPOSE_REQUEST",
190
- [SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST]: "SOCKET_RESOLVE_ADDRESS_DISPOSE_REQUEST",
191
- };
125
+ for (const name of Object.getOwnPropertyNames(calls)) {
126
+ if (name === "reverseMap") continue;
127
+ reverseMap[calls[name]] = name;
128
+ }
@@ -1,4 +1,7 @@
1
- import { createStream, getStreamOrThrow } from "./worker-thread.js";
1
+ import {
2
+ createReadableStream,
3
+ getStreamOrThrow,
4
+ } from "./worker-thread.js";
2
5
  import {
3
6
  createServer,
4
7
  request as httpRequest,
@@ -48,7 +51,7 @@ export async function setOutgoingResponse(
48
51
  export async function startHttpServer(id, { port, host }) {
49
52
  const server = createServer((req, res) => {
50
53
  // create the streams and their ids
51
- const streamId = createStream(req);
54
+ const streamId = createReadableStream(req);
52
55
  const responseId = ++responseCnt;
53
56
  parentPort.postMessage({
54
57
  type: HTTP_SERVER_INCOMING_HANDLER,
@@ -56,9 +59,11 @@ export async function startHttpServer(id, { port, host }) {
56
59
  payload: {
57
60
  responseId,
58
61
  method: req.method,
59
- host: req.headers.host || host || 'localhost',
62
+ host: req.headers.host || host || "localhost",
60
63
  pathWithQuery: req.url,
61
- headers: Object.entries(req.headersDistinct).flatMap(([key, val]) => val.map(val => [key, val])),
64
+ headers: Object.entries(req.headersDistinct).flatMap(([key, val]) =>
65
+ val.map((val) => [key, val])
66
+ ),
62
67
  streamId,
63
68
  },
64
69
  });
@@ -109,8 +114,8 @@ export async function createHttpRequest(
109
114
  req = httpRequest({
110
115
  agent: httpAgent,
111
116
  method,
112
- host: authority.split(':')[0],
113
- port: authority.split(':')[1],
117
+ host: authority.split(":")[0],
118
+ port: authority.split(":")[1],
114
119
  path: pathWithQuery,
115
120
  timeout: connectTimeout && Number(connectTimeout),
116
121
  });
@@ -119,8 +124,8 @@ export async function createHttpRequest(
119
124
  req = httpsRequest({
120
125
  agent: httpsAgent,
121
126
  method,
122
- host: authority.split(':')[0],
123
- port: authority.split(':')[1],
127
+ host: authority.split(":")[0],
128
+ port: authority.split(":")[1],
124
129
  path: pathWithQuery,
125
130
  timeout: connectTimeout && Number(connectTimeout),
126
131
  });
@@ -138,22 +143,20 @@ export async function createHttpRequest(
138
143
  req.end();
139
144
  }
140
145
  const res = await new Promise((resolve, reject) => {
141
- req.on("response", resolve);
142
- req.on("close", () => reject);
143
- req.on("error", reject);
146
+ req.once("response", resolve);
147
+ req.once("close", () => reject);
148
+ req.once("error", reject);
144
149
  });
145
- if (firstByteTimeout)
146
- res.setTimeout(Number(firstByteTimeout));
150
+ if (firstByteTimeout) res.setTimeout(Number(firstByteTimeout));
147
151
  if (betweenBytesTimeout)
148
- res.on("readable", () => {
152
+ res.once("readable", () => {
149
153
  res.setTimeout(Number(betweenBytesTimeout));
150
154
  });
151
- res.on("end", () => void res.emit("readable"));
152
- const bodyStreamId = createStream(res);
155
+ const bodyStreamId = createReadableStream(res);
153
156
  return {
154
157
  status: res.statusCode,
155
158
  headers: Array.from(Object.entries(res.headers)),
156
- bodyStreamId: bodyStreamId,
159
+ bodyStreamId
157
160
  };
158
161
  } catch (e) {
159
162
  if (e?.tag) throw e;
@@ -166,7 +169,7 @@ export async function createHttpRequest(
166
169
  tag: "DNS-error",
167
170
  val: {
168
171
  rcode: err.code,
169
- infoCode: err.errno,
172
+ infoCode: err.errno < 0 ? -err.errno : err.errno,
170
173
  },
171
174
  };
172
175
  case "ECONNREFUSED":