@ai-ecoverse/slicc-kernel 1.151.1 → 1.152.1
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 +298 -74
- package/dist/kernel-worker.js.map +3 -3
- package/dist/meta.js.map +2 -2
- package/dist/node-process-worker.js +123 -19
- package/dist/node-process-worker.js.map +3 -3
- package/dist/node.js +298 -74
- package/dist/node.js.map +3 -3
- package/dist/process-worker.js +123 -19
- package/dist/process-worker.js.map +3 -3
- package/dist/types/fs/opfs.d.ts +4 -2
- package/dist/types/fs/types.d.ts +5 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/kernel/host.d.ts +1 -0
- 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/proc-info.d.ts +1 -0
- package/dist/types/kernel/socket-syscalls.d.ts +10 -0
- package/dist/types/kernel/socket.d.ts +1 -0
- package/dist/types/launcher.d.ts +1 -0
- package/dist/types/mount/mount-fs.d.ts +4 -1
- package/dist/types/process/js/js-net.d.ts +21 -0
- package/dist/types/process/wasi/wasi-fds.d.ts +2 -1
- package/dist/types/process/wasi/wasi-files.d.ts +3 -0
- package/dist/types/realm/sync-fs-token-registry.d.ts +3 -1
- 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.1" : "0.0.0-dev";
|
|
2968
2968
|
OS_RELEASE = "6.0.0-slicc";
|
|
2969
2969
|
}
|
|
2970
2970
|
});
|
|
@@ -6114,6 +6114,8 @@ var init_procfs = __esm({
|
|
|
6114
6114
|
slicc_rename_ack_busy: (listing2) => `${listing2.renameAcks?.busy ?? 0}
|
|
6115
6115
|
`,
|
|
6116
6116
|
slicc_stale_fds: (listing2) => `${listing2.staleFds ?? 0}
|
|
6117
|
+
`,
|
|
6118
|
+
slicc_file_ids: (listing2) => `${listing2.fileIds ?? 0}
|
|
6117
6119
|
`,
|
|
6118
6120
|
slicc_rename_acks: (listing2) => {
|
|
6119
6121
|
const samples = [...listing2.renameAcks?.ackMs ?? []].sort((a, b) => a - b);
|
|
@@ -7431,12 +7433,22 @@ var init_wasi_files = __esm({
|
|
|
7431
7433
|
}
|
|
7432
7434
|
return this.data;
|
|
7433
7435
|
}
|
|
7436
|
+
spoiled = false;
|
|
7437
|
+
spoil() {
|
|
7438
|
+
this.spoiled = true;
|
|
7439
|
+
this.dirty = false;
|
|
7440
|
+
}
|
|
7441
|
+
live() {
|
|
7442
|
+
if (this.spoiled) throw new WasiError("ESTALE");
|
|
7443
|
+
}
|
|
7434
7444
|
size() {
|
|
7445
|
+
this.live();
|
|
7435
7446
|
if (this.ranged) return this.ranged.size();
|
|
7436
7447
|
this.load();
|
|
7437
7448
|
return this.length;
|
|
7438
7449
|
}
|
|
7439
7450
|
pread(max, at) {
|
|
7451
|
+
this.live();
|
|
7440
7452
|
if (this.ranged) return this.ranged.read(at, max);
|
|
7441
7453
|
const bytes = this.load();
|
|
7442
7454
|
const n = Math.max(0, Math.min(max, this.length - at));
|
|
@@ -7446,6 +7458,7 @@ var init_wasi_files = __esm({
|
|
|
7446
7458
|
if (this.maxFile !== void 0 && end > this.maxFile) throw new WasiError("EFBIG");
|
|
7447
7459
|
}
|
|
7448
7460
|
pwrite(bytes, at) {
|
|
7461
|
+
this.live();
|
|
7449
7462
|
if (bytes.length === 0) return 0;
|
|
7450
7463
|
const end = at + bytes.length;
|
|
7451
7464
|
this.fits(end);
|
|
@@ -7465,6 +7478,7 @@ var init_wasi_files = __esm({
|
|
|
7465
7478
|
return bytes.length;
|
|
7466
7479
|
}
|
|
7467
7480
|
append(bytes) {
|
|
7481
|
+
this.live();
|
|
7468
7482
|
const { append } = this.fs;
|
|
7469
7483
|
if (!append || this.orphaned) return void 0;
|
|
7470
7484
|
this.moved?.(false);
|
|
@@ -7477,6 +7491,7 @@ var init_wasi_files = __esm({
|
|
|
7477
7491
|
return end;
|
|
7478
7492
|
}
|
|
7479
7493
|
truncate(size) {
|
|
7494
|
+
this.live();
|
|
7480
7495
|
this.fits(size);
|
|
7481
7496
|
this.dirty = true;
|
|
7482
7497
|
if (this.ranged) {
|
|
@@ -7512,6 +7527,7 @@ var init_wasi_files = __esm({
|
|
|
7512
7527
|
return this.dirty;
|
|
7513
7528
|
}
|
|
7514
7529
|
contents() {
|
|
7530
|
+
this.live();
|
|
7515
7531
|
if (this.ranged) return this.ranged.read(0, this.ranged.size());
|
|
7516
7532
|
return this.load().slice(0, this.length);
|
|
7517
7533
|
}
|
|
@@ -7914,7 +7930,9 @@ var init_js_kernel = __esm({
|
|
|
7914
7930
|
"sock-tls",
|
|
7915
7931
|
"sock-tls-upgrade",
|
|
7916
7932
|
"sock-tls-serve",
|
|
7917
|
-
"sock-tls-listen"
|
|
7933
|
+
"sock-tls-listen",
|
|
7934
|
+
"sock-tls-context",
|
|
7935
|
+
"sock-tls-select"
|
|
7918
7936
|
]);
|
|
7919
7937
|
JsKernel = class {
|
|
7920
7938
|
header;
|
|
@@ -9443,6 +9461,15 @@ var init_wasi_fds = __esm({
|
|
|
9443
9461
|
}
|
|
9444
9462
|
}
|
|
9445
9463
|
}
|
|
9464
|
+
synced(file) {
|
|
9465
|
+
try {
|
|
9466
|
+
file.flush();
|
|
9467
|
+
this.reported.delete(file.buffer);
|
|
9468
|
+
} catch (err) {
|
|
9469
|
+
this.reported.add(file.buffer);
|
|
9470
|
+
throw err;
|
|
9471
|
+
}
|
|
9472
|
+
}
|
|
9446
9473
|
flushEarly() {
|
|
9447
9474
|
for (const buffer of this.buffers.values()) {
|
|
9448
9475
|
try {
|
|
@@ -9469,6 +9496,7 @@ var init_wasi_fds = __esm({
|
|
|
9469
9496
|
try {
|
|
9470
9497
|
buffer.prefetch();
|
|
9471
9498
|
} catch {
|
|
9499
|
+
buffer.spoil();
|
|
9472
9500
|
}
|
|
9473
9501
|
}
|
|
9474
9502
|
}
|
|
@@ -11744,7 +11772,7 @@ var init_wasi_host = __esm({
|
|
|
11744
11772
|
}
|
|
11745
11773
|
sync(fd) {
|
|
11746
11774
|
const e = this.fds.get(fd);
|
|
11747
|
-
if (e.type === "file") e.file
|
|
11775
|
+
if (e.type === "file") this.fds.synced(e.file);
|
|
11748
11776
|
else if (e.type === "device") this.interrupted?.();
|
|
11749
11777
|
else if (e.type === "kernel") {
|
|
11750
11778
|
const kind = this.fds.kind(fd, e);
|
|
@@ -16607,10 +16635,13 @@ function keyText(key, what) {
|
|
|
16607
16635
|
}
|
|
16608
16636
|
function serveRequest(tls) {
|
|
16609
16637
|
const own = clientCert(tls, "listen").clientCert;
|
|
16610
|
-
if (
|
|
16638
|
+
if (tls.select !== void 0 && typeof tls.select !== "function")
|
|
16639
|
+
throw new JsCallError("EINVAL", "listen", "ERR_INVALID_ARG_TYPE: select must be a function");
|
|
16640
|
+
if (!own && !tls.select)
|
|
16611
16641
|
throw new JsCallError("EINVAL", "listen", "ERR_INVALID_ARG_VALUE: a server needs cert and key");
|
|
16612
16642
|
return {
|
|
16613
|
-
cert: own,
|
|
16643
|
+
...own ? { cert: own } : {},
|
|
16644
|
+
...tls.select ? { select: true } : {},
|
|
16614
16645
|
...tls.ca !== void 0 ? { ca: caList(tls.ca) } : {},
|
|
16615
16646
|
...tls.requestCert ? { requestCert: true } : {},
|
|
16616
16647
|
...tls.rejectUnauthorized === false ? { rejectUnauthorized: false } : {},
|
|
@@ -16713,12 +16744,50 @@ function port(n) {
|
|
|
16713
16744
|
if (!Number.isInteger(n) || n < 0 || n > 65535) throw new JsCallError("EINVAL", `port ${n}`);
|
|
16714
16745
|
return n;
|
|
16715
16746
|
}
|
|
16716
|
-
|
|
16717
|
-
|
|
16718
|
-
|
|
16719
|
-
|
|
16720
|
-
|
|
16721
|
-
|
|
16747
|
+
function choiceWire(choice) {
|
|
16748
|
+
if (!choice) return {};
|
|
16749
|
+
const { context, alpn, refuse: refuse2 } = choice;
|
|
16750
|
+
return {
|
|
16751
|
+
...context === void 0 ? {} : { context: typeof context === "number" ? context : context.fd },
|
|
16752
|
+
...alpn === void 0 ? {} : { alpn: String(alpn) },
|
|
16753
|
+
...refuse2 === void 0 ? {} : { refuse: ALERTS[String(refuse2)] ?? Number(refuse2) }
|
|
16754
|
+
};
|
|
16755
|
+
}
|
|
16756
|
+
function expiry(ms) {
|
|
16757
|
+
let timer;
|
|
16758
|
+
const late = new Promise((_, reject) => {
|
|
16759
|
+
timer = setTimeout(
|
|
16760
|
+
() => reject(new JsCallError("ERR_TLS_HANDSHAKE_TIMEOUT", "accept", "ERR_TLS_HANDSHAKE_TIMEOUT")),
|
|
16761
|
+
ms
|
|
16762
|
+
);
|
|
16763
|
+
});
|
|
16764
|
+
late.catch(() => void 0);
|
|
16765
|
+
return { late, clear: () => clearTimeout(timer) };
|
|
16766
|
+
}
|
|
16767
|
+
async function selected(pick, offer, ms) {
|
|
16768
|
+
const limit2 = expiry(ms);
|
|
16769
|
+
try {
|
|
16770
|
+
if (!pick) return { wire: {} };
|
|
16771
|
+
const choice = await Promise.race([pick(Object.freeze({ ...offer })), limit2.late]);
|
|
16772
|
+
return { wire: choiceWire(choice) };
|
|
16773
|
+
} catch (thrown) {
|
|
16774
|
+
return { wire: { refuse: ALERTS.handshake_failure }, thrown };
|
|
16775
|
+
} finally {
|
|
16776
|
+
limit2.clear();
|
|
16777
|
+
}
|
|
16778
|
+
}
|
|
16779
|
+
async function serveOn(kernel, conn, req, signal = NEVER, pick, ms = HANDSHAKE_TIMEOUT_MS) {
|
|
16780
|
+
const call2 = (body) => secureCall(async () => {
|
|
16781
|
+
const r = await kernel.blocking(body, signal);
|
|
16782
|
+
return r.ok && r.kind === "json" ? r.json : {};
|
|
16783
|
+
}, "accept");
|
|
16784
|
+
let wire = await call2({ op: "sock-tls-serve", fd: conn.fd, ...req });
|
|
16785
|
+
while (wire.select) {
|
|
16786
|
+
const { wire: choice, thrown } = await selected(pick, wire.select, ms);
|
|
16787
|
+
wire = await call2({ op: "sock-tls-select", fd: conn.fd, ...choice }).catch((err) => {
|
|
16788
|
+
throw thrown ?? err;
|
|
16789
|
+
});
|
|
16790
|
+
}
|
|
16722
16791
|
return Object.assign(Object.create(conn), { tls: servedOf(wire) });
|
|
16723
16792
|
}
|
|
16724
16793
|
function changeOf(waiters, signal) {
|
|
@@ -16788,7 +16857,7 @@ function securedAccepts(plain2, serve, stop, cap) {
|
|
|
16788
16857
|
}
|
|
16789
16858
|
};
|
|
16790
16859
|
}
|
|
16791
|
-
function listenerOf(ops, fd, at, handshakes) {
|
|
16860
|
+
function listenerOf(ops, fd, at, handshakes, tls) {
|
|
16792
16861
|
const { kernel, io, connection, serve } = ops;
|
|
16793
16862
|
const stop = new AbortController();
|
|
16794
16863
|
const acceptPlain = async (signal) => {
|
|
@@ -16800,7 +16869,12 @@ function listenerOf(ops, fd, at, handshakes) {
|
|
|
16800
16869
|
await kernel.blocking({ op: "fd-select", read: [fd], write: [], timeoutMs: -1 }, signal);
|
|
16801
16870
|
}
|
|
16802
16871
|
};
|
|
16803
|
-
const next2 = handshakes > 0 ? securedAccepts(
|
|
16872
|
+
const next2 = handshakes > 0 ? securedAccepts(
|
|
16873
|
+
acceptPlain,
|
|
16874
|
+
(c, s) => serve(c, { from: fd }, s, tls?.select, tls?.handshakeTimeout),
|
|
16875
|
+
stop.signal,
|
|
16876
|
+
handshakes
|
|
16877
|
+
) : acceptPlain;
|
|
16804
16878
|
const accept = (options = {}) => next2(AbortSignal.any([options.signal ?? NEVER, stop.signal]));
|
|
16805
16879
|
return {
|
|
16806
16880
|
fd,
|
|
@@ -16822,6 +16896,27 @@ function listenerOf(ops, fd, at, handshakes) {
|
|
|
16822
16896
|
}
|
|
16823
16897
|
};
|
|
16824
16898
|
}
|
|
16899
|
+
async function contextOf(kernel, io, options) {
|
|
16900
|
+
const own = clientCert(options ?? {}, "tlsContext").clientCert;
|
|
16901
|
+
if (!own)
|
|
16902
|
+
throw new JsCallError(
|
|
16903
|
+
"EINVAL",
|
|
16904
|
+
"tlsContext",
|
|
16905
|
+
"ERR_INVALID_ARG_VALUE: a context needs cert and key"
|
|
16906
|
+
);
|
|
16907
|
+
const fd = await secureCall(
|
|
16908
|
+
() => kernel.json({ op: "sock-tls-context", cert: own }),
|
|
16909
|
+
"tlsContext"
|
|
16910
|
+
);
|
|
16911
|
+
let closed;
|
|
16912
|
+
return Object.freeze({
|
|
16913
|
+
fd,
|
|
16914
|
+
close: () => {
|
|
16915
|
+
closed ??= io.close(fd);
|
|
16916
|
+
return closed;
|
|
16917
|
+
}
|
|
16918
|
+
});
|
|
16919
|
+
}
|
|
16825
16920
|
function capOf(options, tls) {
|
|
16826
16921
|
return tls ? Math.max(1, Math.min(options.backlog ?? 128, HANDSHAKES_MAX)) : 0;
|
|
16827
16922
|
}
|
|
@@ -16872,9 +16967,9 @@ function netOps(kernel, io, sync) {
|
|
|
16872
16967
|
throw err;
|
|
16873
16968
|
}
|
|
16874
16969
|
};
|
|
16875
|
-
const serve = (
|
|
16970
|
+
const serve = (...args) => serveOn(kernel, ...args);
|
|
16876
16971
|
const ops = { kernel, io, connection, serve };
|
|
16877
|
-
const listener = (fd, at, handshakes = 0) => listenerOf(ops, fd, at, handshakes);
|
|
16972
|
+
const listener = (fd, at, handshakes = 0, tls) => listenerOf(ops, fd, at, handshakes, tls);
|
|
16878
16973
|
const connect = async (options) => {
|
|
16879
16974
|
const signal = options.signal ?? NEVER;
|
|
16880
16975
|
const host = options.host ?? "127.0.0.1";
|
|
@@ -16960,7 +17055,7 @@ function netOps(kernel, io, sync) {
|
|
|
16960
17055
|
lane.call({ op: "sock-listen", fd, backlog: options.backlog ?? 128 });
|
|
16961
17056
|
if (tls) lane.call({ op: "sock-tls-listen", fd, ...tls });
|
|
16962
17057
|
const at = addressOf(lane.json({ op: "sock-name", fd, peer: false }));
|
|
16963
|
-
return listener(fd, at, capOf(options, tls));
|
|
17058
|
+
return listener(fd, at, capOf(options, tls), options.tls);
|
|
16964
17059
|
} catch (err) {
|
|
16965
17060
|
lane.raw({ op: "fd-close", fd });
|
|
16966
17061
|
throw err;
|
|
@@ -16977,20 +17072,21 @@ function netOps(kernel, io, sync) {
|
|
|
16977
17072
|
await kernel.call({ op: "sock-listen", fd, backlog: options.backlog ?? 128 });
|
|
16978
17073
|
if (tls)
|
|
16979
17074
|
await secureCall(() => kernel.call({ op: "sock-tls-listen", fd, ...tls }), "listen");
|
|
16980
|
-
return listener(fd, await name2(fd, false), capOf(options, tls));
|
|
17075
|
+
return listener(fd, await name2(fd, false), capOf(options, tls), options.tls);
|
|
16981
17076
|
});
|
|
16982
17077
|
},
|
|
16983
17078
|
secure: async (conn, tls) => {
|
|
16984
17079
|
if (tls.server !== true) return tlsConnect({ socket: conn }, tls);
|
|
16985
|
-
return serve(conn, serveRequest(tls));
|
|
17080
|
+
return serve(conn, serveRequest(tls), void 0, tls.select, tls.handshakeTimeout);
|
|
16986
17081
|
},
|
|
17082
|
+
tlsContext: (options) => contextOf(kernel, io, options),
|
|
16987
17083
|
connect: (options) => {
|
|
16988
17084
|
(options.signal ?? NEVER).throwIfAborted();
|
|
16989
17085
|
return options.tls ? tlsConnect(options, options.tls) : connect(options);
|
|
16990
17086
|
}
|
|
16991
17087
|
};
|
|
16992
17088
|
}
|
|
16993
|
-
var PEM, TLS_CODE, ALERT, SHUT_RD, SHUT_WR, LOOPBACK3, IPV4, NEVER, SOL_SOCKET2, SO_ERROR2, HANDSHAKES_MAX;
|
|
17089
|
+
var PEM, TLS_CODE, ALERT, SHUT_RD, SHUT_WR, LOOPBACK3, IPV4, NEVER, SOL_SOCKET2, SO_ERROR2, ALERTS, HANDSHAKE_TIMEOUT_MS, HANDSHAKES_MAX;
|
|
16994
17090
|
var init_js_net = __esm({
|
|
16995
17091
|
"src/process/js/js-net.ts"() {
|
|
16996
17092
|
"use strict";
|
|
@@ -17006,6 +17102,14 @@ var init_js_net = __esm({
|
|
|
17006
17102
|
NEVER = new AbortController().signal;
|
|
17007
17103
|
SOL_SOCKET2 = 1;
|
|
17008
17104
|
SO_ERROR2 = 4;
|
|
17105
|
+
ALERTS = {
|
|
17106
|
+
unrecognized_name: 112,
|
|
17107
|
+
no_application_protocol: 120,
|
|
17108
|
+
handshake_failure: 40,
|
|
17109
|
+
access_denied: 49,
|
|
17110
|
+
internal_error: 80
|
|
17111
|
+
};
|
|
17112
|
+
HANDSHAKE_TIMEOUT_MS = 12e4;
|
|
17009
17113
|
HANDSHAKES_MAX = 64;
|
|
17010
17114
|
}
|
|
17011
17115
|
});
|