@ai-ecoverse/slicc-kernel 1.102.5 → 1.103.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 +10 -2
- package/dist/kernel-worker.js +18 -3
- package/dist/kernel-worker.js.map +2 -2
- package/dist/node-process-worker.js +1 -1
- package/dist/node.js +18 -3
- package/dist/node.js.map +2 -2
- package/dist/process-worker.js +1 -1
- package/dist/types/body-idle.d.ts +3 -0
- package/dist/types/bytes.d.ts +1 -0
- package/dist/types/cdp/facade.d.ts +27 -0
- package/dist/types/cdp/hosts.d.ts +14 -0
- package/dist/types/cdp/port.d.ts +24 -0
- package/dist/types/cdp/types.d.ts +12 -0
- package/dist/types/cdp/websocket.d.ts +61 -0
- package/dist/types/client/attach.d.ts +132 -0
- package/dist/types/client/dial-stream.d.ts +23 -0
- package/dist/types/client/loopback-fetch.d.ts +5 -0
- package/dist/types/client/protocol.d.ts +153 -0
- package/dist/types/client/serve-client.d.ts +18 -0
- package/dist/types/clipboard-relay.d.ts +25 -0
- package/dist/types/commands.d.ts +38 -0
- package/dist/types/cron/clock.d.ts +13 -0
- package/dist/types/driver.d.ts +3 -0
- package/dist/types/facade/hosts.d.ts +12 -0
- package/dist/types/facade/port.d.ts +16 -0
- package/dist/types/facade/types.d.ts +23 -0
- package/dist/types/fs/access.d.ts +29 -0
- package/dist/types/fs/attest.d.ts +41 -0
- package/dist/types/fs/changes.d.ts +19 -0
- package/dist/types/fs/commands.d.ts +4 -0
- package/dist/types/fs/dac.d.ts +64 -0
- package/dist/types/fs/dev-removal.d.ts +9 -0
- package/dist/types/fs/fresh-modules.d.ts +9 -0
- package/dist/types/fs/integrity.d.ts +53 -0
- package/dist/types/fs/meta.d.ts +85 -0
- package/dist/types/fs/opfs.d.ts +141 -0
- package/dist/types/fs/owners.d.ts +17 -0
- package/dist/types/fs/pages.d.ts +41 -0
- package/dist/types/fs/path-map.d.ts +16 -0
- package/dist/types/fs/physical-path.d.ts +14 -0
- package/dist/types/fs/protect.d.ts +27 -0
- package/dist/types/fs/ranged.d.ts +73 -0
- package/dist/types/fs/remote.d.ts +45 -0
- package/dist/types/fs/types.d.ts +115 -0
- package/dist/types/fs/unlinked.d.ts +75 -0
- package/dist/types/fs/view.d.ts +1 -0
- package/dist/types/fs/walk.d.ts +12 -0
- package/dist/types/fs/watch.d.ts +23 -0
- package/dist/types/index.d.ts +159 -0
- package/dist/types/integrity-relay.d.ts +18 -0
- package/dist/types/kernel/children.d.ts +90 -0
- package/dist/types/kernel/clipboard.d.ts +49 -0
- package/dist/types/kernel/cpu-clock.d.ts +56 -0
- package/dist/types/kernel/cred.d.ts +17 -0
- package/dist/types/kernel/dgram.d.ts +56 -0
- package/dist/types/kernel/dial.d.ts +20 -0
- package/dist/types/kernel/epoll.d.ts +67 -0
- package/dist/types/kernel/eventfd.d.ts +19 -0
- package/dist/types/kernel/exec-ticket.d.ts +25 -0
- package/dist/types/kernel/fd-table.d.ts +107 -0
- package/dist/types/kernel/host-ops.d.ts +98 -0
- package/dist/types/kernel/host.d.ts +116 -0
- package/dist/types/kernel/jobs.d.ts +50 -0
- package/dist/types/kernel/locks.d.ts +40 -0
- package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
- package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
- package/dist/types/kernel/net/http1.d.ts +48 -0
- package/dist/types/kernel/net/loopback-names.d.ts +14 -0
- package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
- package/dist/types/kernel/net/network.d.ts +29 -0
- package/dist/types/kernel/net/proxy-service.d.ts +70 -0
- package/dist/types/kernel/net/realm-ca.d.ts +28 -0
- package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
- package/dist/types/kernel/net/remote-transport.d.ts +98 -0
- package/dist/types/kernel/net/resolver.d.ts +29 -0
- package/dist/types/kernel/net/routes.d.ts +15 -0
- package/dist/types/kernel/net/tls-engine.d.ts +46 -0
- package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
- package/dist/types/kernel/net/transport.d.ts +64 -0
- package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
- package/dist/types/kernel/net/uplink.d.ts +163 -0
- package/dist/types/kernel/net/ws-queue.d.ts +21 -0
- package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
- package/dist/types/kernel/net/x509.d.ts +34 -0
- package/dist/types/kernel/pipe.d.ts +29 -0
- package/dist/types/kernel/proc-info.d.ts +44 -0
- package/dist/types/kernel/process.d.ts +525 -0
- package/dist/types/kernel/protocol.d.ts +126 -0
- package/dist/types/kernel/pty.d.ts +84 -0
- package/dist/types/kernel/run-child.d.ts +39 -0
- package/dist/types/kernel/scrub-file.d.ts +13 -0
- package/dist/types/kernel/sealed.d.ts +74 -0
- package/dist/types/kernel/select.d.ts +7 -0
- package/dist/types/kernel/sem.d.ts +72 -0
- package/dist/types/kernel/settling.d.ts +16 -0
- package/dist/types/kernel/signals.d.ts +44 -0
- package/dist/types/kernel/socket-syscalls.d.ts +74 -0
- package/dist/types/kernel/socket.d.ts +125 -0
- package/dist/types/kernel/timer.d.ts +4 -0
- package/dist/types/kernel/tty.d.ts +53 -0
- package/dist/types/kernel/vfs-file.d.ts +149 -0
- package/dist/types/launcher.d.ts +359 -0
- package/dist/types/local-proxy-transport.d.ts +39 -0
- package/dist/types/meta.d.ts +11 -0
- package/dist/types/mount/chunked.d.ts +9 -0
- package/dist/types/mount/connection.d.ts +35 -0
- package/dist/types/mount/driver.d.ts +50 -0
- package/dist/types/mount/fsa.d.ts +26 -0
- package/dist/types/mount/fstab.d.ts +17 -0
- package/dist/types/mount/host.d.ts +24 -0
- package/dist/types/mount/hostfs.d.ts +129 -0
- package/dist/types/mount/media.d.ts +8 -0
- package/dist/types/mount/medium.d.ts +12 -0
- package/dist/types/mount/mount-fs.d.ts +136 -0
- package/dist/types/mount/protocol.d.ts +140 -0
- package/dist/types/mount/syscall.d.ts +27 -0
- package/dist/types/mount/tmpfs.d.ts +2 -0
- package/dist/types/node/loopback.d.ts +11 -0
- package/dist/types/node/memory-root.d.ts +2 -0
- package/dist/types/node/ws-diagnose.d.ts +4 -0
- package/dist/types/node.d.ts +85 -0
- package/dist/types/process/fd-metadata.d.ts +4 -0
- package/dist/types/process/js/async-sab.d.ts +15 -0
- package/dist/types/process/js/js-children.d.ts +63 -0
- package/dist/types/process/js/js-context.d.ts +133 -0
- package/dist/types/process/js/js-dev.d.ts +50 -0
- package/dist/types/process/js/js-exit.d.ts +15 -0
- package/dist/types/process/js/js-fetch.d.ts +2 -0
- package/dist/types/process/js/js-io.d.ts +81 -0
- package/dist/types/process/js/js-kernel.d.ts +61 -0
- package/dist/types/process/js/js-net.d.ts +42 -0
- package/dist/types/process/js/js-proc.d.ts +31 -0
- package/dist/types/process/js/js-run.d.ts +35 -0
- package/dist/types/process/js/js-sync.d.ts +86 -0
- package/dist/types/process/js/js-tty.d.ts +30 -0
- package/dist/types/process/js/js-websocket.d.ts +21 -0
- package/dist/types/process/kernel-streams.d.ts +196 -0
- package/dist/types/process/process-fds.d.ts +95 -0
- package/dist/types/process/process-locks.d.ts +29 -0
- package/dist/types/process/process-pty.d.ts +20 -0
- package/dist/types/process/process-signals.d.ts +33 -0
- package/dist/types/process/procfs.d.ts +41 -0
- package/dist/types/process/wasi/dylink.d.ts +9 -0
- package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
- package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
- package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
- package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
- package/dist/types/process/wasi/wasi-files.d.ts +99 -0
- package/dist/types/process/wasi/wasi-host.d.ts +104 -0
- package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
- package/dist/types/process/wasi/wasi-module.d.ts +13 -0
- package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
- package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
- package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
- package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
- package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
- package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
- package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
- package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
- package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
- package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
- package/dist/types/process/wasi-errno.d.ts +1 -0
- package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
- package/dist/types/realm/live-vfs-fs.d.ts +186 -0
- package/dist/types/realm/sync-fs-dispatch.d.ts +26 -0
- package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
- package/dist/types/realm/sync-fs-wire.d.ts +118 -0
- package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
- package/dist/types/realm/sync-sab-responder.d.ts +16 -0
- package/dist/types/realm/sync-sab-wire.d.ts +64 -0
- package/dist/types/sealed-relay.d.ts +26 -0
- package/dist/types/serve.d.ts +190 -0
- package/dist/types/sudo-command.d.ts +4 -0
- package/dist/types/sudo.d.ts +105 -0
- package/dist/types/testing.d.ts +46 -0
- package/dist/types/transport.d.ts +25 -0
- package/dist/types/users.d.ts +86 -0
- package/dist/types/version.d.ts +3 -0
- package/dist/types/websocket-transport.d.ts +12 -0
- package/package.json +22 -6
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type KernelSocket, type LoopbackNet } from './socket.js';
|
|
2
|
+
export interface DialPortLike {
|
|
3
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
4
|
+
addEventListener(type: 'message', handler: (event: MessageEvent) => void): void;
|
|
5
|
+
start?(): void;
|
|
6
|
+
close(): void;
|
|
7
|
+
}
|
|
8
|
+
export type DialMessage = Uint8Array | {
|
|
9
|
+
end: true;
|
|
10
|
+
} | {
|
|
11
|
+
close: true;
|
|
12
|
+
} | {
|
|
13
|
+
more: true;
|
|
14
|
+
} | {
|
|
15
|
+
ack: true;
|
|
16
|
+
} | {
|
|
17
|
+
error: string;
|
|
18
|
+
};
|
|
19
|
+
export declare function dialSocket(net: LoopbackNet, port: number, host?: string): KernelSocket;
|
|
20
|
+
export declare function serveSocket(socket: KernelSocket, port: DialPortLike, onClose?: () => void): () => void;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { SyncFsResult } from '../realm/sync-fs-wire.js';
|
|
2
|
+
import { type FdTable, type KernelFile, type PollState } from './fd-table.js';
|
|
3
|
+
export declare const EPOLL: {
|
|
4
|
+
readonly IN: 1;
|
|
5
|
+
readonly OUT: 2;
|
|
6
|
+
readonly RDHUP: 4;
|
|
7
|
+
readonly PRI: 8;
|
|
8
|
+
readonly ERR: 16;
|
|
9
|
+
readonly HUP: 32;
|
|
10
|
+
readonly ET: 64;
|
|
11
|
+
readonly ONESHOT: 128;
|
|
12
|
+
};
|
|
13
|
+
export type EpollOp = 'add' | 'mod' | 'del' | 'set';
|
|
14
|
+
export interface EpollEvent {
|
|
15
|
+
events: number;
|
|
16
|
+
data: number[];
|
|
17
|
+
}
|
|
18
|
+
export type EpollSyscall = {
|
|
19
|
+
op: 'epoll-create';
|
|
20
|
+
} | {
|
|
21
|
+
op: 'epoll-ctl';
|
|
22
|
+
epfd: number;
|
|
23
|
+
how: EpollOp;
|
|
24
|
+
fd: number;
|
|
25
|
+
events: number;
|
|
26
|
+
data: number[];
|
|
27
|
+
} | {
|
|
28
|
+
op: 'epoll-wait';
|
|
29
|
+
epfd: number;
|
|
30
|
+
max: number;
|
|
31
|
+
timeoutMs: number;
|
|
32
|
+
} | {
|
|
33
|
+
op: 'eventfd-open';
|
|
34
|
+
initial: string;
|
|
35
|
+
semaphore: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare const EPOLL_OPS: readonly EpollSyscall['op'][];
|
|
38
|
+
export interface Interest {
|
|
39
|
+
events: number;
|
|
40
|
+
gen: number;
|
|
41
|
+
reported: number;
|
|
42
|
+
armed: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function levelOf(file: KernelFile): number;
|
|
45
|
+
export declare function due(interest: Interest, level: number): number;
|
|
46
|
+
export declare function consume(interest: Interest): void;
|
|
47
|
+
export declare class EpollFile implements KernelFile {
|
|
48
|
+
private readonly regs;
|
|
49
|
+
private readonly changes;
|
|
50
|
+
private cursor;
|
|
51
|
+
ctl(fds: FdTable, how: EpollOp, fd: number, events: number, data: number[]): void;
|
|
52
|
+
reaches(target: EpollFile): boolean;
|
|
53
|
+
collect(fds: FdTable, max: number): EpollEvent[];
|
|
54
|
+
wait(fds: FdTable, max: number, timeoutMs: number, signal: AbortSignal): Promise<EpollEvent[]>;
|
|
55
|
+
poll(): PollState;
|
|
56
|
+
changed(signal?: AbortSignal): Promise<void>;
|
|
57
|
+
close(): void;
|
|
58
|
+
private register;
|
|
59
|
+
private drop;
|
|
60
|
+
private watch;
|
|
61
|
+
}
|
|
62
|
+
export interface EpollProcess {
|
|
63
|
+
fds: FdTable;
|
|
64
|
+
blocking(): AbortSignal;
|
|
65
|
+
owed(): boolean;
|
|
66
|
+
}
|
|
67
|
+
export declare function epollSyscall(req: EpollSyscall, proc: EpollProcess): Promise<SyncFsResult>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type KernelFile, type PollState } from './fd-table.js';
|
|
2
|
+
export declare const EVENTFD_MAX = 18446744073709551614n;
|
|
3
|
+
export declare class Notifier {
|
|
4
|
+
private waiters;
|
|
5
|
+
wait(signal?: AbortSignal): Promise<void>;
|
|
6
|
+
wake(): void;
|
|
7
|
+
}
|
|
8
|
+
export declare class EventFd implements KernelFile {
|
|
9
|
+
static readonly SIZE = 8;
|
|
10
|
+
private count;
|
|
11
|
+
private readonly semaphore;
|
|
12
|
+
private readonly changes;
|
|
13
|
+
constructor(initial: bigint, semaphore: boolean);
|
|
14
|
+
read(max: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
15
|
+
write(bytes: Uint8Array, signal?: AbortSignal): Promise<number>;
|
|
16
|
+
poll(): PollState;
|
|
17
|
+
changed(signal?: AbortSignal): Promise<void>;
|
|
18
|
+
close(): void;
|
|
19
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export declare const TICKET_ENV = "SLICC_SEALED_TICKET";
|
|
2
|
+
export declare const TICKET_TTL_MS = 30000;
|
|
3
|
+
export declare const MAX_TICKETS = 256;
|
|
4
|
+
export interface Booked {
|
|
5
|
+
pid: number;
|
|
6
|
+
path: string;
|
|
7
|
+
requested: string;
|
|
8
|
+
requestedCwd: string;
|
|
9
|
+
argv: string;
|
|
10
|
+
cwd: string;
|
|
11
|
+
at: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function argvDigest(argv: readonly string[]): Promise<string>;
|
|
14
|
+
export declare function isStrings(value: unknown): value is string[];
|
|
15
|
+
export declare function stringRecord(value: unknown): Record<string, string> | undefined;
|
|
16
|
+
export declare class TicketBook {
|
|
17
|
+
private readonly booked;
|
|
18
|
+
private readonly now;
|
|
19
|
+
normalise: (path: string) => Promise<string>;
|
|
20
|
+
constructor(now?: () => number);
|
|
21
|
+
get size(): number;
|
|
22
|
+
record(req: Record<string, unknown>, reply: object, pid: number): Promise<void>;
|
|
23
|
+
take(ticket: string): Booked | undefined;
|
|
24
|
+
private prune;
|
|
25
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import type { ClipboardChannel } from './clipboard.js';
|
|
2
|
+
import type { PtyPair } from './pty.js';
|
|
3
|
+
import type { SealedChannel } from './sealed.js';
|
|
4
|
+
import type { KernelTty } from './tty.js';
|
|
5
|
+
export type KernelErrno = 'EBADF' | 'EDEADLK' | 'ENOLCK' | 'EEXIST' | 'ELOOP' | 'EOVERFLOW' | 'ENAMETOOLONG' | 'EPIPE' | 'EMFILE' | 'EINVAL' | 'ENOENT' | 'ENOTDIR' | 'ENOEXEC' | 'ECHILD' | 'ENOSYS' | 'ESPIPE' | 'ENOSPC' | 'EINTR' | 'ESRCH' | 'ENOTTY' | 'ENXIO' | 'EPERM' | 'EIO' | 'EACCES' | 'EAGAIN' | 'ENOTSOCK' | 'EAFNOSUPPORT' | 'EPROTONOSUPPORT' | 'EOPNOTSUPP' | 'EADDRINUSE' | 'EADDRNOTAVAIL' | 'ENETUNREACH' | 'ECONNREFUSED' | 'EINPROGRESS' | 'EISCONN' | 'ENOTCONN' | 'EROFS' | 'EFBIG' | 'EALREADY' | 'ETIMEDOUT' | 'ECONNABORTED' | 'EHOSTUNREACH' | 'ECONNRESET' | 'EMSGSIZE' | 'EDESTADDRREQ' | 'ENOPROTOOPT' | 'ENOTSUP' | 'EILSEQ';
|
|
6
|
+
export declare class KernelError extends Error {
|
|
7
|
+
readonly code: KernelErrno;
|
|
8
|
+
readonly detail?: string;
|
|
9
|
+
constructor(code: KernelErrno, detail?: string);
|
|
10
|
+
}
|
|
11
|
+
export interface PollState {
|
|
12
|
+
readable: boolean;
|
|
13
|
+
writable: boolean;
|
|
14
|
+
hangup: boolean;
|
|
15
|
+
rdhup?: boolean;
|
|
16
|
+
error?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface KernelFile {
|
|
19
|
+
read?(max: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
20
|
+
peek?(max: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
21
|
+
write?(bytes: Uint8Array, signal?: AbortSignal): Promise<number>;
|
|
22
|
+
close(): void | Promise<void>;
|
|
23
|
+
poll?(): PollState;
|
|
24
|
+
changed?(signal?: AbortSignal): Promise<void>;
|
|
25
|
+
seek?(offset: number, whence: number): Promise<number>;
|
|
26
|
+
flush?(): Promise<void>;
|
|
27
|
+
pread?(max: number, at: number): Promise<Uint8Array>;
|
|
28
|
+
pwrite?(bytes: Uint8Array, at: number): Promise<number>;
|
|
29
|
+
resize?(size: number): Promise<void>;
|
|
30
|
+
stat?(): Promise<{
|
|
31
|
+
path: string;
|
|
32
|
+
size: number;
|
|
33
|
+
orphan?: true;
|
|
34
|
+
}>;
|
|
35
|
+
known?(): number | undefined;
|
|
36
|
+
tty?: KernelTty;
|
|
37
|
+
pty?: PtyPair;
|
|
38
|
+
sealed?: SealedChannel;
|
|
39
|
+
clipboard?: ClipboardChannel;
|
|
40
|
+
held?: true;
|
|
41
|
+
heldMeta?: HeldMeta;
|
|
42
|
+
}
|
|
43
|
+
export type HeldMeta = {
|
|
44
|
+
dir: string;
|
|
45
|
+
preopen?: string;
|
|
46
|
+
twin?: number;
|
|
47
|
+
} | DeviceMeta;
|
|
48
|
+
export interface DeviceMeta {
|
|
49
|
+
device: KernelDevice;
|
|
50
|
+
access?: DeviceAccess;
|
|
51
|
+
}
|
|
52
|
+
export type DeviceAccess = 'read' | 'write';
|
|
53
|
+
export type OpenAccess = 'read' | 'write' | 'both';
|
|
54
|
+
export declare function openAccess(flags: number): OpenAccess;
|
|
55
|
+
export type KernelDevice = 'null' | 'zero' | 'full' | 'urandom';
|
|
56
|
+
export declare function pollFile(file: KernelFile): PollState;
|
|
57
|
+
export declare class OpenFile {
|
|
58
|
+
private refs;
|
|
59
|
+
private closers;
|
|
60
|
+
readonly file: KernelFile;
|
|
61
|
+
constructor(file: KernelFile);
|
|
62
|
+
retain(): this;
|
|
63
|
+
onClose(fn: () => void): () => void;
|
|
64
|
+
release(): void | Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
export declare function openPipe(capacity?: number): {
|
|
67
|
+
read: OpenFile;
|
|
68
|
+
write: OpenFile;
|
|
69
|
+
};
|
|
70
|
+
export declare function bytesSource(data: Uint8Array): OpenFile;
|
|
71
|
+
export declare function memoryFile(data: Uint8Array, path: string, position?: number): OpenFile;
|
|
72
|
+
export declare function sinkFile(onData: (bytes: Uint8Array) => void): OpenFile;
|
|
73
|
+
export declare function nullFile(): OpenFile;
|
|
74
|
+
export declare function deviceAt(path: string): KernelDevice | undefined;
|
|
75
|
+
export declare function deviceFile(device: KernelDevice, access?: DeviceAccess): OpenFile;
|
|
76
|
+
export declare function heldFile(meta?: HeldMeta): OpenFile;
|
|
77
|
+
export type KernelFdKind = 'tty' | 'stream' | 'file' | 'socket' | 'held' | 'device' | 'sealed' | 'clipboard';
|
|
78
|
+
export declare function kernelFdKind(file: KernelFile): Exclude<KernelFdKind, 'socket'>;
|
|
79
|
+
export interface ForkedHandles {
|
|
80
|
+
fork(): ForkedHandles;
|
|
81
|
+
clear(): void;
|
|
82
|
+
}
|
|
83
|
+
export declare class FdTable {
|
|
84
|
+
static readonly MAX_FDS = 1024;
|
|
85
|
+
handles: ForkedHandles | undefined;
|
|
86
|
+
private fds;
|
|
87
|
+
private readonly cloexec;
|
|
88
|
+
private readonly status;
|
|
89
|
+
get(fd: number): OpenFile;
|
|
90
|
+
stdioTerminal(): KernelTty | undefined;
|
|
91
|
+
numbers(): number[];
|
|
92
|
+
has(fd: number): boolean;
|
|
93
|
+
setCloseOnExec(fd: number): void;
|
|
94
|
+
clearCloseOnExec(fd: number): void;
|
|
95
|
+
closesOnExec(fd: number): boolean;
|
|
96
|
+
setStatusFlags(fd: number, flags: number): void;
|
|
97
|
+
statusFlags(fd: number): number | undefined;
|
|
98
|
+
install(file: OpenFile, min?: number): number;
|
|
99
|
+
installAt(fd: number, file: OpenFile): void;
|
|
100
|
+
replaceAt(fd: number, file: OpenFile): Promise<void>;
|
|
101
|
+
dup(fd: number, min?: number): number;
|
|
102
|
+
dup2(oldFd: number, newFd: number): number;
|
|
103
|
+
dup2Clipboard(oldFd: number, newFd: number): Promise<number>;
|
|
104
|
+
close(fd: number): void | Promise<void>;
|
|
105
|
+
fork(): FdTable;
|
|
106
|
+
closeAll(): Promise<void>;
|
|
107
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { SyncFsResult } from '../realm/sync-fs-wire.js';
|
|
2
|
+
import { type LockKind, type LockTable } from './locks.js';
|
|
3
|
+
export interface LockTarget {
|
|
4
|
+
path?: string;
|
|
5
|
+
fd?: number;
|
|
6
|
+
}
|
|
7
|
+
export type HostSyscall = {
|
|
8
|
+
op: 'lock';
|
|
9
|
+
path: string;
|
|
10
|
+
exclusive: boolean;
|
|
11
|
+
fd: number;
|
|
12
|
+
} | {
|
|
13
|
+
op: 'unlock';
|
|
14
|
+
path: string;
|
|
15
|
+
} | ({
|
|
16
|
+
op: 'lk-set';
|
|
17
|
+
kind: LockKind | 'unlock';
|
|
18
|
+
start: number;
|
|
19
|
+
len: number;
|
|
20
|
+
wait?: boolean;
|
|
21
|
+
} & LockTarget) | ({
|
|
22
|
+
op: 'lk-get';
|
|
23
|
+
kind: LockKind;
|
|
24
|
+
start: number;
|
|
25
|
+
len: number;
|
|
26
|
+
} & LockTarget) | ({
|
|
27
|
+
op: 'lk-close';
|
|
28
|
+
} & LockTarget) | {
|
|
29
|
+
op: 'async-submit';
|
|
30
|
+
req: {
|
|
31
|
+
op: string;
|
|
32
|
+
};
|
|
33
|
+
ack?: number[];
|
|
34
|
+
} | {
|
|
35
|
+
op: 'async-wait';
|
|
36
|
+
timeoutMs?: number;
|
|
37
|
+
} | {
|
|
38
|
+
op: 'async-take';
|
|
39
|
+
id: number;
|
|
40
|
+
} | {
|
|
41
|
+
op: 'async-resolve';
|
|
42
|
+
value: unknown;
|
|
43
|
+
} | {
|
|
44
|
+
op: 'async-hold';
|
|
45
|
+
} | {
|
|
46
|
+
op: 'async-cancel';
|
|
47
|
+
id: number;
|
|
48
|
+
} | {
|
|
49
|
+
op: 'async-settle';
|
|
50
|
+
ids: number[];
|
|
51
|
+
} | {
|
|
52
|
+
op: 'async-close';
|
|
53
|
+
};
|
|
54
|
+
export declare const HOST_OPS: readonly HostSyscall['op'][];
|
|
55
|
+
type Run = (req: {
|
|
56
|
+
op: string;
|
|
57
|
+
}, cancelled: AbortSignal) => Promise<SyncFsResult>;
|
|
58
|
+
export declare class AsyncOps {
|
|
59
|
+
private next;
|
|
60
|
+
private readonly results;
|
|
61
|
+
private readonly ready;
|
|
62
|
+
private readonly running;
|
|
63
|
+
private readonly waiters;
|
|
64
|
+
private readonly taken;
|
|
65
|
+
private readonly kept;
|
|
66
|
+
private closed;
|
|
67
|
+
private readonly run;
|
|
68
|
+
private readonly onReady;
|
|
69
|
+
constructor(run: Run, onReady?: () => void);
|
|
70
|
+
submit(req: {
|
|
71
|
+
op: string;
|
|
72
|
+
}): number;
|
|
73
|
+
resolve(value: unknown): number;
|
|
74
|
+
hold(): number;
|
|
75
|
+
take(id: number): SyncFsResult;
|
|
76
|
+
ack(ids: readonly number[]): void;
|
|
77
|
+
settle(ids: readonly number[]): Promise<Array<SyncFsResult | null>>;
|
|
78
|
+
cancel(id: number): void;
|
|
79
|
+
private forget;
|
|
80
|
+
wait(timeoutMs: number | undefined, blocking: () => AbortSignal): Promise<number>;
|
|
81
|
+
close(): void;
|
|
82
|
+
private sleep;
|
|
83
|
+
private complete;
|
|
84
|
+
private wake;
|
|
85
|
+
}
|
|
86
|
+
export interface HostOpsContext {
|
|
87
|
+
pid: number;
|
|
88
|
+
owner?: () => number;
|
|
89
|
+
fileKey?: (target: LockTarget, kind: LockKind | 'unlock' | 'close', setting?: boolean) => Promise<string>;
|
|
90
|
+
locks: LockTable | undefined;
|
|
91
|
+
ops: AsyncOps;
|
|
92
|
+
blocking: () => AbortSignal;
|
|
93
|
+
valid: (req: {
|
|
94
|
+
op: string;
|
|
95
|
+
}) => boolean;
|
|
96
|
+
}
|
|
97
|
+
export declare function hostSyscall(req: HostSyscall, ctx: HostOpsContext): Promise<SyncFsResult>;
|
|
98
|
+
export {};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type Dac } from '../fs/dac.js';
|
|
2
|
+
import { type PathGate } from '../fs/unlinked.js';
|
|
3
|
+
import { HeldPaths } from '../mount/mount-fs.js';
|
|
4
|
+
import { type SourceCheck, type SyncFsTokenEntry } from '../realm/sync-fs-token-registry.js';
|
|
5
|
+
import { type BlockedMask } from '../realm/sync-sab-wire.js';
|
|
6
|
+
import type { ChildForker, ChildSpawner } from './children.js';
|
|
7
|
+
import type { ClipboardBroker } from './clipboard.js';
|
|
8
|
+
import { type CpuTimes } from './cpu-clock.js';
|
|
9
|
+
import { type Cred } from './cred.js';
|
|
10
|
+
import { type FdTable, type OpenFile } from './fd-table.js';
|
|
11
|
+
import type { JobTable } from './jobs.js';
|
|
12
|
+
import type { LockTable } from './locks.js';
|
|
13
|
+
import type { HttpHandles } from './net/http-syscalls.js';
|
|
14
|
+
import type { Resolver } from './net/resolver.js';
|
|
15
|
+
import type { MountLine, ProcessListing } from './proc-info.js';
|
|
16
|
+
import { type StateListener, type WasmProcessOptions, type WasmSyscall } from './process.js';
|
|
17
|
+
import { type ForkState, type InheritedFd, type Program } from './protocol.js';
|
|
18
|
+
import type { PtyTable } from './pty.js';
|
|
19
|
+
import type { SealedBroker } from './sealed.js';
|
|
20
|
+
import type { SemTable } from './sem.js';
|
|
21
|
+
import { type LoopbackNet } from './socket.js';
|
|
22
|
+
import type { VfsNodes } from './vfs-file.js';
|
|
23
|
+
export interface WasmWorkerLike {
|
|
24
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
25
|
+
addEventListener(type: 'message' | 'error', handler: (event: MessageEvent) => void): void;
|
|
26
|
+
removeEventListener(type: 'message' | 'error', handler: (event: MessageEvent) => void): void;
|
|
27
|
+
terminate(): void;
|
|
28
|
+
}
|
|
29
|
+
export interface SpawnWasmOptions {
|
|
30
|
+
pid: number;
|
|
31
|
+
changes?: SharedArrayBuffer;
|
|
32
|
+
ignored?: number;
|
|
33
|
+
blocked?: BlockedMask;
|
|
34
|
+
umask?: number;
|
|
35
|
+
cred?: Cred;
|
|
36
|
+
owners?: boolean;
|
|
37
|
+
links?: number;
|
|
38
|
+
fresh?: (path: string, umask: number) => void;
|
|
39
|
+
source?: SourceCheck;
|
|
40
|
+
sealed?: SealedBroker;
|
|
41
|
+
outputFilter?: (file: OpenFile) => OpenFile;
|
|
42
|
+
clipboard?: ClipboardBroker;
|
|
43
|
+
readonlyAt?: (path: string) => boolean;
|
|
44
|
+
dac?: Dac;
|
|
45
|
+
identity?: () => Promise<{
|
|
46
|
+
pid: number;
|
|
47
|
+
ppid: number;
|
|
48
|
+
}>;
|
|
49
|
+
onSyscall?: (req: WasmSyscall) => void;
|
|
50
|
+
settling?: () => boolean;
|
|
51
|
+
program: Program;
|
|
52
|
+
argv0: string;
|
|
53
|
+
args: string[];
|
|
54
|
+
env: Record<string, string>;
|
|
55
|
+
cwd: string;
|
|
56
|
+
fds: FdTable;
|
|
57
|
+
fs: SyncFsTokenEntry['fs'];
|
|
58
|
+
noLinks: SyncFsTokenEntry['fs'];
|
|
59
|
+
createWorker: () => WasmWorkerLike;
|
|
60
|
+
onError?: (message: string) => void;
|
|
61
|
+
spawner?: ChildSpawner;
|
|
62
|
+
forker?: ChildForker;
|
|
63
|
+
fork?: ForkState;
|
|
64
|
+
ppid?: number;
|
|
65
|
+
shownPid?: number;
|
|
66
|
+
kill?: (pid: number, sig: number) => boolean | Promise<boolean>;
|
|
67
|
+
writesBack?: (pid: number) => boolean;
|
|
68
|
+
processes?: () => ProcessListing;
|
|
69
|
+
sudo?: WasmProcessOptions['sudo'];
|
|
70
|
+
openFiles?: Set<VfsNodes>;
|
|
71
|
+
nodes?: VfsNodes;
|
|
72
|
+
statfs?: (path: string) => Promise<{
|
|
73
|
+
quota: number;
|
|
74
|
+
usage: number;
|
|
75
|
+
} | undefined>;
|
|
76
|
+
mounts?: () => MountLine[];
|
|
77
|
+
mount?: WasmProcessOptions['mount'];
|
|
78
|
+
umount?: WasmProcessOptions['umount'];
|
|
79
|
+
held?: Set<HeldPaths>;
|
|
80
|
+
unlinkGate?: PathGate;
|
|
81
|
+
jobs?: JobTable;
|
|
82
|
+
ptys?: PtyTable;
|
|
83
|
+
net?: LoopbackNet;
|
|
84
|
+
http?: HttpHandles;
|
|
85
|
+
locks?: LockTable;
|
|
86
|
+
sems?: SemTable;
|
|
87
|
+
onReap?: (pid: number) => void;
|
|
88
|
+
resolver?: Resolver;
|
|
89
|
+
}
|
|
90
|
+
export interface WasmProcessHandle {
|
|
91
|
+
pid: number;
|
|
92
|
+
exited: Promise<number>;
|
|
93
|
+
kill(code?: number): void;
|
|
94
|
+
signal(sig: number): void;
|
|
95
|
+
termsig(): number | undefined;
|
|
96
|
+
onState(listener: StateListener): void;
|
|
97
|
+
memory(): number;
|
|
98
|
+
ignoredSignals(fork?: boolean): number;
|
|
99
|
+
blockedSignals?(): BlockedMask;
|
|
100
|
+
signalMasks?(): {
|
|
101
|
+
ignored: number;
|
|
102
|
+
caught: number;
|
|
103
|
+
};
|
|
104
|
+
umask?(): number;
|
|
105
|
+
cred?(): Cred;
|
|
106
|
+
writesBack(): boolean;
|
|
107
|
+
times?(): CpuTimes | undefined;
|
|
108
|
+
running?(): number;
|
|
109
|
+
threads?(): Array<{
|
|
110
|
+
tid: number;
|
|
111
|
+
state: 'R' | 'S';
|
|
112
|
+
}>;
|
|
113
|
+
}
|
|
114
|
+
export declare const KILL_GRACE_MS = 2000;
|
|
115
|
+
export declare function inheritedFds(fds: FdTable): InheritedFd[];
|
|
116
|
+
export declare function spawnWasmProcess(opts: SpawnWasmOptions): WasmProcessHandle;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { KernelTty } from './tty.js';
|
|
2
|
+
export interface JobMember {
|
|
3
|
+
pid: number;
|
|
4
|
+
pgid: number;
|
|
5
|
+
sid: number;
|
|
6
|
+
signal(sig: number): void;
|
|
7
|
+
execParent?: number;
|
|
8
|
+
ppid?: number;
|
|
9
|
+
execed?: boolean;
|
|
10
|
+
shownAs?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare class JobTable {
|
|
13
|
+
private readonly members;
|
|
14
|
+
private readonly handoffs;
|
|
15
|
+
private readonly foreground;
|
|
16
|
+
private readonly terminals;
|
|
17
|
+
keyboard: boolean;
|
|
18
|
+
add(pid: number, parentPid: number | undefined, signal: (sig: number) => void, terminal?: KernelTty): JobMember;
|
|
19
|
+
list(): JobMember[];
|
|
20
|
+
remove(pid: number): void;
|
|
21
|
+
private prune;
|
|
22
|
+
exec(pid: number, child: number, adopt?: boolean): void;
|
|
23
|
+
shown(pid: number): number;
|
|
24
|
+
shownParent(pid: number): number | undefined;
|
|
25
|
+
sessionOf(pgid: number): number | undefined;
|
|
26
|
+
join(pid: number, pgid: number): void;
|
|
27
|
+
lead(pid: number): void;
|
|
28
|
+
pgidOf(pid: number): number | undefined;
|
|
29
|
+
sidOf(pid: number): number | undefined;
|
|
30
|
+
private member;
|
|
31
|
+
private idOf;
|
|
32
|
+
private byId;
|
|
33
|
+
setpgid(caller: number, pid: number, pgid: number): void;
|
|
34
|
+
get handoffCount(): number;
|
|
35
|
+
getpgid(caller: number, pid: number): number;
|
|
36
|
+
getsid(caller: number, pid: number): number;
|
|
37
|
+
setsid(pid: number): number;
|
|
38
|
+
terminalNamed(name: string): KernelTty | undefined;
|
|
39
|
+
terminalNames(): string[];
|
|
40
|
+
private knownTerminals;
|
|
41
|
+
controllingTerminal(pid: number): KernelTty | null | undefined;
|
|
42
|
+
acquireTerminal(pid: number, tty: KernelTty): boolean;
|
|
43
|
+
killGroup(pgid: number, sig: number, may?: (pid: number) => boolean): boolean;
|
|
44
|
+
tcgetpgrp(tty: KernelTty, fallback: number): number;
|
|
45
|
+
tcsetpgrp(caller: number, tty: KernelTty, pgid: number, settling?: boolean): void;
|
|
46
|
+
private reclaimed;
|
|
47
|
+
signalOwnedForeground(tty: KernelTty, sig: number): void;
|
|
48
|
+
signalForeground(tty: KernelTty, fallback: number, sig: number): void;
|
|
49
|
+
fromKeyboard(send: () => void): void;
|
|
50
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type LockKind = 'read' | 'write';
|
|
2
|
+
export interface RecordLock {
|
|
3
|
+
owner: number;
|
|
4
|
+
kind: LockKind;
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
}
|
|
8
|
+
interface Blocked {
|
|
9
|
+
key: string;
|
|
10
|
+
kind: LockKind;
|
|
11
|
+
start: number;
|
|
12
|
+
end: number;
|
|
13
|
+
}
|
|
14
|
+
export declare function lockRange(start: number, len: number): {
|
|
15
|
+
start: number;
|
|
16
|
+
end: number;
|
|
17
|
+
};
|
|
18
|
+
export declare class LockTable {
|
|
19
|
+
private readonly records;
|
|
20
|
+
private readonly blocked;
|
|
21
|
+
private readonly wakers;
|
|
22
|
+
private readonly held;
|
|
23
|
+
holder(key: string, owner: number, want: Blocked): RecordLock | undefined;
|
|
24
|
+
set(key: string, owner: number, kind: LockKind | 'unlock', start: number, end: number): boolean;
|
|
25
|
+
wait(key: string, owner: number, kind: LockKind, range: {
|
|
26
|
+
start: number;
|
|
27
|
+
end: number;
|
|
28
|
+
}, blocking: () => AbortSignal): Promise<void>;
|
|
29
|
+
private waitsOn;
|
|
30
|
+
private changed;
|
|
31
|
+
private wake;
|
|
32
|
+
private store;
|
|
33
|
+
holds(owner: number): boolean;
|
|
34
|
+
dropFile(key: string, owner: number): void;
|
|
35
|
+
lock(pid: number, path: string, exclusive: boolean, fd: number): boolean;
|
|
36
|
+
unlock(pid: number, path: string): void;
|
|
37
|
+
closed(pid: number, fd: number): void;
|
|
38
|
+
release(pid: number): void;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { SyncFsResult } from '../../realm/sync-fs-wire.js';
|
|
2
|
+
import { type KernelLoopback } from './loopback-transport.js';
|
|
3
|
+
import type { HeaderList, RealmTransport } from './transport.js';
|
|
4
|
+
import { type WsSyscall } from './ws-syscalls.js';
|
|
5
|
+
export interface HttpRequestBody {
|
|
6
|
+
url: string;
|
|
7
|
+
method: string;
|
|
8
|
+
headers: HeaderList;
|
|
9
|
+
body?: Uint8Array;
|
|
10
|
+
}
|
|
11
|
+
export type HttpSyscall = ({
|
|
12
|
+
op: 'net-request';
|
|
13
|
+
} & HttpRequestBody) | ({
|
|
14
|
+
op: 'net-open';
|
|
15
|
+
} & HttpRequestBody) | {
|
|
16
|
+
op: 'net-head';
|
|
17
|
+
handle: number;
|
|
18
|
+
} | {
|
|
19
|
+
op: 'net-read';
|
|
20
|
+
handle: number;
|
|
21
|
+
max: number;
|
|
22
|
+
} | {
|
|
23
|
+
op: 'net-close';
|
|
24
|
+
handle: number;
|
|
25
|
+
} | {
|
|
26
|
+
op: 'net-traits';
|
|
27
|
+
url?: string;
|
|
28
|
+
} | WsSyscall;
|
|
29
|
+
export declare const HTTP_OPS: readonly string[];
|
|
30
|
+
export interface HttpHead {
|
|
31
|
+
handle: number;
|
|
32
|
+
status: number;
|
|
33
|
+
statusText: string;
|
|
34
|
+
url: string;
|
|
35
|
+
redirected?: boolean;
|
|
36
|
+
headers: HeaderList;
|
|
37
|
+
}
|
|
38
|
+
export declare class HttpHandles {
|
|
39
|
+
private readonly transport;
|
|
40
|
+
private readonly open;
|
|
41
|
+
private nextHandle;
|
|
42
|
+
private readonly ws;
|
|
43
|
+
private readonly owner;
|
|
44
|
+
private readonly local;
|
|
45
|
+
constructor(transport: RealmTransport, owner?: number, local?: KernelLoopback);
|
|
46
|
+
syscall(req: HttpSyscall): Promise<SyncFsResult>;
|
|
47
|
+
private traits;
|
|
48
|
+
private request;
|
|
49
|
+
private opened;
|
|
50
|
+
private start;
|
|
51
|
+
private respond;
|
|
52
|
+
private headOf;
|
|
53
|
+
private head;
|
|
54
|
+
private read;
|
|
55
|
+
private take;
|
|
56
|
+
private close;
|
|
57
|
+
closeAll(): Promise<void>;
|
|
58
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { HeaderList } from './transport.js';
|
|
2
|
+
export interface ByteSource {
|
|
3
|
+
read(max: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
4
|
+
}
|
|
5
|
+
export declare class HttpError extends Error {
|
|
6
|
+
readonly status: number;
|
|
7
|
+
constructor(status: number, message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare const REASON: Readonly<Record<number, string>>;
|
|
10
|
+
export declare class Incoming {
|
|
11
|
+
private readonly source;
|
|
12
|
+
private buf;
|
|
13
|
+
private eof;
|
|
14
|
+
constructor(source: ByteSource);
|
|
15
|
+
get buffered(): number;
|
|
16
|
+
private fill;
|
|
17
|
+
private take;
|
|
18
|
+
peek(signal?: AbortSignal): Promise<number | undefined>;
|
|
19
|
+
some(max: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
20
|
+
head(limit: number, signal?: AbortSignal): Promise<Uint8Array | null>;
|
|
21
|
+
line(limit: number, signal?: AbortSignal): Promise<string>;
|
|
22
|
+
exactly(n: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
23
|
+
}
|
|
24
|
+
export declare function latin1(bytes: Uint8Array): string;
|
|
25
|
+
export declare function latin1Bytes(text: string): Uint8Array;
|
|
26
|
+
export interface RequestHead {
|
|
27
|
+
method: string;
|
|
28
|
+
target: string;
|
|
29
|
+
minor: number;
|
|
30
|
+
headers: HeaderList;
|
|
31
|
+
}
|
|
32
|
+
export declare function parseRequestHead(bytes: Uint8Array): RequestHead;
|
|
33
|
+
export declare function fieldValues(headers: HeaderList, name: string): string[];
|
|
34
|
+
export declare function fieldTokens(headers: HeaderList, name: string): string[];
|
|
35
|
+
export type BodyFraming = {
|
|
36
|
+
kind: 'none';
|
|
37
|
+
} | {
|
|
38
|
+
kind: 'length';
|
|
39
|
+
length: number;
|
|
40
|
+
} | {
|
|
41
|
+
kind: 'chunked';
|
|
42
|
+
};
|
|
43
|
+
export declare function requestFraming(headers: HeaderList): BodyFraming;
|
|
44
|
+
export declare function readBody(incoming: Incoming, framing: BodyFraming, cap: number, signal?: AbortSignal): Promise<Uint8Array | undefined>;
|
|
45
|
+
export declare function concat(chunks: Uint8Array[], total?: number): Uint8Array<ArrayBuffer>;
|
|
46
|
+
export declare function responseHead(status: number, reason: string, headers: HeaderList): Uint8Array;
|
|
47
|
+
export declare function chunk(bytes: Uint8Array): Uint8Array;
|
|
48
|
+
export declare const LAST_CHUNK: Uint8Array<ArrayBufferLike>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const HOST_LOOPBACK = "host.slicc.internal";
|
|
2
|
+
export declare const HOST_LOOPBACK_ADDRESS: readonly [10, 0, 2, 2];
|
|
3
|
+
export declare const PAGE_LOOPBACK = "kernel.localhost";
|
|
4
|
+
export declare const PAGE_LOOPBACK_URL = "http://{port}.kernel.localhost";
|
|
5
|
+
export declare function toHostLoopback(href: string): string;
|
|
6
|
+
export declare function isKernelLoopbackHost(hostname: string): boolean;
|
|
7
|
+
export declare function kernelLoopbackPort(href: string): number | undefined;
|
|
8
|
+
export declare const DEFAULT_HOSTNAME = "slicc";
|
|
9
|
+
export declare const HOSTNAME_ADDRESS = "127.0.1.1";
|
|
10
|
+
export declare const LIBC_HOSTNAMES: readonly string[];
|
|
11
|
+
export declare function isHostname(name: unknown): name is string;
|
|
12
|
+
export declare function hostnameOf(env: Readonly<Record<string, string>>): string;
|
|
13
|
+
export declare function ownNames(hostname: string): string[];
|
|
14
|
+
export declare function hostsFile(hostname?: string): string;
|