@ai-ecoverse/slicc-kernel 1.151.1 → 1.152.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/README.md +4 -0
- package/dist/index.js.map +2 -2
- package/dist/kernel-worker.js +232 -49
- package/dist/kernel-worker.js.map +3 -3
- package/dist/node-process-worker.js +96 -18
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +232 -49
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +96 -18
- package/dist/process-worker.js.map +3 -3
- package/dist/types/index.d.ts +1 -1
- package/dist/types/kernel/net/tls-client.d.ts +13 -2
- package/dist/types/kernel/net/tls-engine.d.ts +9 -2
- package/dist/types/kernel/net/tls-server.d.ts +17 -2
- package/dist/types/kernel/socket-syscalls.d.ts +10 -0
- package/dist/types/kernel/socket.d.ts +1 -0
- package/dist/types/process/js/js-net.d.ts +21 -0
- package/package.json +1 -1
package/dist/process-worker.js
CHANGED
|
@@ -2964,7 +2964,7 @@ var KERNEL_VERSION, OS_RELEASE;
|
|
|
2964
2964
|
var init_version = __esm({
|
|
2965
2965
|
"src/version.ts"() {
|
|
2966
2966
|
"use strict";
|
|
2967
|
-
KERNEL_VERSION = true ? "1.
|
|
2967
|
+
KERNEL_VERSION = true ? "1.152.0" : "0.0.0-dev";
|
|
2968
2968
|
OS_RELEASE = "6.0.0-slicc";
|
|
2969
2969
|
}
|
|
2970
2970
|
});
|
|
@@ -7914,7 +7914,9 @@ var init_js_kernel = __esm({
|
|
|
7914
7914
|
"sock-tls",
|
|
7915
7915
|
"sock-tls-upgrade",
|
|
7916
7916
|
"sock-tls-serve",
|
|
7917
|
-
"sock-tls-listen"
|
|
7917
|
+
"sock-tls-listen",
|
|
7918
|
+
"sock-tls-context",
|
|
7919
|
+
"sock-tls-select"
|
|
7918
7920
|
]);
|
|
7919
7921
|
JsKernel = class {
|
|
7920
7922
|
header;
|
|
@@ -16607,10 +16609,13 @@ function keyText(key, what) {
|
|
|
16607
16609
|
}
|
|
16608
16610
|
function serveRequest(tls) {
|
|
16609
16611
|
const own = clientCert(tls, "listen").clientCert;
|
|
16610
|
-
if (
|
|
16612
|
+
if (tls.select !== void 0 && typeof tls.select !== "function")
|
|
16613
|
+
throw new JsCallError("EINVAL", "listen", "ERR_INVALID_ARG_TYPE: select must be a function");
|
|
16614
|
+
if (!own && !tls.select)
|
|
16611
16615
|
throw new JsCallError("EINVAL", "listen", "ERR_INVALID_ARG_VALUE: a server needs cert and key");
|
|
16612
16616
|
return {
|
|
16613
|
-
cert: own,
|
|
16617
|
+
...own ? { cert: own } : {},
|
|
16618
|
+
...tls.select ? { select: true } : {},
|
|
16614
16619
|
...tls.ca !== void 0 ? { ca: caList(tls.ca) } : {},
|
|
16615
16620
|
...tls.requestCert ? { requestCert: true } : {},
|
|
16616
16621
|
...tls.rejectUnauthorized === false ? { rejectUnauthorized: false } : {},
|
|
@@ -16713,12 +16718,50 @@ function port(n) {
|
|
|
16713
16718
|
if (!Number.isInteger(n) || n < 0 || n > 65535) throw new JsCallError("EINVAL", `port ${n}`);
|
|
16714
16719
|
return n;
|
|
16715
16720
|
}
|
|
16716
|
-
|
|
16717
|
-
|
|
16718
|
-
|
|
16719
|
-
|
|
16720
|
-
|
|
16721
|
-
|
|
16721
|
+
function choiceWire(choice) {
|
|
16722
|
+
if (!choice) return {};
|
|
16723
|
+
const { context, alpn, refuse: refuse2 } = choice;
|
|
16724
|
+
return {
|
|
16725
|
+
...context === void 0 ? {} : { context: typeof context === "number" ? context : context.fd },
|
|
16726
|
+
...alpn === void 0 ? {} : { alpn: String(alpn) },
|
|
16727
|
+
...refuse2 === void 0 ? {} : { refuse: ALERTS[String(refuse2)] ?? Number(refuse2) }
|
|
16728
|
+
};
|
|
16729
|
+
}
|
|
16730
|
+
function expiry(ms) {
|
|
16731
|
+
let timer;
|
|
16732
|
+
const late = new Promise((_, reject) => {
|
|
16733
|
+
timer = setTimeout(
|
|
16734
|
+
() => reject(new JsCallError("ERR_TLS_HANDSHAKE_TIMEOUT", "accept", "ERR_TLS_HANDSHAKE_TIMEOUT")),
|
|
16735
|
+
ms
|
|
16736
|
+
);
|
|
16737
|
+
});
|
|
16738
|
+
late.catch(() => void 0);
|
|
16739
|
+
return { late, clear: () => clearTimeout(timer) };
|
|
16740
|
+
}
|
|
16741
|
+
async function selected(pick, offer, ms) {
|
|
16742
|
+
const limit2 = expiry(ms);
|
|
16743
|
+
try {
|
|
16744
|
+
if (!pick) return { wire: {} };
|
|
16745
|
+
const choice = await Promise.race([pick(Object.freeze({ ...offer })), limit2.late]);
|
|
16746
|
+
return { wire: choiceWire(choice) };
|
|
16747
|
+
} catch (thrown) {
|
|
16748
|
+
return { wire: { refuse: ALERTS.handshake_failure }, thrown };
|
|
16749
|
+
} finally {
|
|
16750
|
+
limit2.clear();
|
|
16751
|
+
}
|
|
16752
|
+
}
|
|
16753
|
+
async function serveOn(kernel, conn, req, signal = NEVER, pick, ms = HANDSHAKE_TIMEOUT_MS) {
|
|
16754
|
+
const call2 = (body) => secureCall(async () => {
|
|
16755
|
+
const r = await kernel.blocking(body, signal);
|
|
16756
|
+
return r.ok && r.kind === "json" ? r.json : {};
|
|
16757
|
+
}, "accept");
|
|
16758
|
+
let wire = await call2({ op: "sock-tls-serve", fd: conn.fd, ...req });
|
|
16759
|
+
while (wire.select) {
|
|
16760
|
+
const { wire: choice, thrown } = await selected(pick, wire.select, ms);
|
|
16761
|
+
wire = await call2({ op: "sock-tls-select", fd: conn.fd, ...choice }).catch((err) => {
|
|
16762
|
+
throw thrown ?? err;
|
|
16763
|
+
});
|
|
16764
|
+
}
|
|
16722
16765
|
return Object.assign(Object.create(conn), { tls: servedOf(wire) });
|
|
16723
16766
|
}
|
|
16724
16767
|
function changeOf(waiters, signal) {
|
|
@@ -16788,7 +16831,7 @@ function securedAccepts(plain2, serve, stop, cap) {
|
|
|
16788
16831
|
}
|
|
16789
16832
|
};
|
|
16790
16833
|
}
|
|
16791
|
-
function listenerOf(ops, fd, at, handshakes) {
|
|
16834
|
+
function listenerOf(ops, fd, at, handshakes, tls) {
|
|
16792
16835
|
const { kernel, io, connection, serve } = ops;
|
|
16793
16836
|
const stop = new AbortController();
|
|
16794
16837
|
const acceptPlain = async (signal) => {
|
|
@@ -16800,7 +16843,12 @@ function listenerOf(ops, fd, at, handshakes) {
|
|
|
16800
16843
|
await kernel.blocking({ op: "fd-select", read: [fd], write: [], timeoutMs: -1 }, signal);
|
|
16801
16844
|
}
|
|
16802
16845
|
};
|
|
16803
|
-
const next2 = handshakes > 0 ? securedAccepts(
|
|
16846
|
+
const next2 = handshakes > 0 ? securedAccepts(
|
|
16847
|
+
acceptPlain,
|
|
16848
|
+
(c, s) => serve(c, { from: fd }, s, tls?.select, tls?.handshakeTimeout),
|
|
16849
|
+
stop.signal,
|
|
16850
|
+
handshakes
|
|
16851
|
+
) : acceptPlain;
|
|
16804
16852
|
const accept = (options = {}) => next2(AbortSignal.any([options.signal ?? NEVER, stop.signal]));
|
|
16805
16853
|
return {
|
|
16806
16854
|
fd,
|
|
@@ -16822,6 +16870,27 @@ function listenerOf(ops, fd, at, handshakes) {
|
|
|
16822
16870
|
}
|
|
16823
16871
|
};
|
|
16824
16872
|
}
|
|
16873
|
+
async function contextOf(kernel, io, options) {
|
|
16874
|
+
const own = clientCert(options ?? {}, "tlsContext").clientCert;
|
|
16875
|
+
if (!own)
|
|
16876
|
+
throw new JsCallError(
|
|
16877
|
+
"EINVAL",
|
|
16878
|
+
"tlsContext",
|
|
16879
|
+
"ERR_INVALID_ARG_VALUE: a context needs cert and key"
|
|
16880
|
+
);
|
|
16881
|
+
const fd = await secureCall(
|
|
16882
|
+
() => kernel.json({ op: "sock-tls-context", cert: own }),
|
|
16883
|
+
"tlsContext"
|
|
16884
|
+
);
|
|
16885
|
+
let closed;
|
|
16886
|
+
return Object.freeze({
|
|
16887
|
+
fd,
|
|
16888
|
+
close: () => {
|
|
16889
|
+
closed ??= io.close(fd);
|
|
16890
|
+
return closed;
|
|
16891
|
+
}
|
|
16892
|
+
});
|
|
16893
|
+
}
|
|
16825
16894
|
function capOf(options, tls) {
|
|
16826
16895
|
return tls ? Math.max(1, Math.min(options.backlog ?? 128, HANDSHAKES_MAX)) : 0;
|
|
16827
16896
|
}
|
|
@@ -16872,9 +16941,9 @@ function netOps(kernel, io, sync) {
|
|
|
16872
16941
|
throw err;
|
|
16873
16942
|
}
|
|
16874
16943
|
};
|
|
16875
|
-
const serve = (
|
|
16944
|
+
const serve = (...args) => serveOn(kernel, ...args);
|
|
16876
16945
|
const ops = { kernel, io, connection, serve };
|
|
16877
|
-
const listener = (fd, at, handshakes = 0) => listenerOf(ops, fd, at, handshakes);
|
|
16946
|
+
const listener = (fd, at, handshakes = 0, tls) => listenerOf(ops, fd, at, handshakes, tls);
|
|
16878
16947
|
const connect = async (options) => {
|
|
16879
16948
|
const signal = options.signal ?? NEVER;
|
|
16880
16949
|
const host = options.host ?? "127.0.0.1";
|
|
@@ -16960,7 +17029,7 @@ function netOps(kernel, io, sync) {
|
|
|
16960
17029
|
lane.call({ op: "sock-listen", fd, backlog: options.backlog ?? 128 });
|
|
16961
17030
|
if (tls) lane.call({ op: "sock-tls-listen", fd, ...tls });
|
|
16962
17031
|
const at = addressOf(lane.json({ op: "sock-name", fd, peer: false }));
|
|
16963
|
-
return listener(fd, at, capOf(options, tls));
|
|
17032
|
+
return listener(fd, at, capOf(options, tls), options.tls);
|
|
16964
17033
|
} catch (err) {
|
|
16965
17034
|
lane.raw({ op: "fd-close", fd });
|
|
16966
17035
|
throw err;
|
|
@@ -16977,20 +17046,21 @@ function netOps(kernel, io, sync) {
|
|
|
16977
17046
|
await kernel.call({ op: "sock-listen", fd, backlog: options.backlog ?? 128 });
|
|
16978
17047
|
if (tls)
|
|
16979
17048
|
await secureCall(() => kernel.call({ op: "sock-tls-listen", fd, ...tls }), "listen");
|
|
16980
|
-
return listener(fd, await name2(fd, false), capOf(options, tls));
|
|
17049
|
+
return listener(fd, await name2(fd, false), capOf(options, tls), options.tls);
|
|
16981
17050
|
});
|
|
16982
17051
|
},
|
|
16983
17052
|
secure: async (conn, tls) => {
|
|
16984
17053
|
if (tls.server !== true) return tlsConnect({ socket: conn }, tls);
|
|
16985
|
-
return serve(conn, serveRequest(tls));
|
|
17054
|
+
return serve(conn, serveRequest(tls), void 0, tls.select, tls.handshakeTimeout);
|
|
16986
17055
|
},
|
|
17056
|
+
tlsContext: (options) => contextOf(kernel, io, options),
|
|
16987
17057
|
connect: (options) => {
|
|
16988
17058
|
(options.signal ?? NEVER).throwIfAborted();
|
|
16989
17059
|
return options.tls ? tlsConnect(options, options.tls) : connect(options);
|
|
16990
17060
|
}
|
|
16991
17061
|
};
|
|
16992
17062
|
}
|
|
16993
|
-
var PEM, TLS_CODE, ALERT, SHUT_RD, SHUT_WR, LOOPBACK3, IPV4, NEVER, SOL_SOCKET2, SO_ERROR2, HANDSHAKES_MAX;
|
|
17063
|
+
var PEM, TLS_CODE, ALERT, SHUT_RD, SHUT_WR, LOOPBACK3, IPV4, NEVER, SOL_SOCKET2, SO_ERROR2, ALERTS, HANDSHAKE_TIMEOUT_MS, HANDSHAKES_MAX;
|
|
16994
17064
|
var init_js_net = __esm({
|
|
16995
17065
|
"src/process/js/js-net.ts"() {
|
|
16996
17066
|
"use strict";
|
|
@@ -17006,6 +17076,14 @@ var init_js_net = __esm({
|
|
|
17006
17076
|
NEVER = new AbortController().signal;
|
|
17007
17077
|
SOL_SOCKET2 = 1;
|
|
17008
17078
|
SO_ERROR2 = 4;
|
|
17079
|
+
ALERTS = {
|
|
17080
|
+
unrecognized_name: 112,
|
|
17081
|
+
no_application_protocol: 120,
|
|
17082
|
+
handshake_failure: 40,
|
|
17083
|
+
access_denied: 49,
|
|
17084
|
+
internal_error: 80
|
|
17085
|
+
};
|
|
17086
|
+
HANDSHAKE_TIMEOUT_MS = 12e4;
|
|
17009
17087
|
HANDSHAKES_MAX = 64;
|
|
17010
17088
|
}
|
|
17011
17089
|
});
|