@ai-ecoverse/slicc-kernel 1.102.6 → 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 +1 -1
- package/dist/kernel-worker.js +1 -1
- package/dist/node-process-worker.js +1 -1
- package/dist/node.js +1 -1
- 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,149 @@
|
|
|
1
|
+
import { type AsyncRangedIo } from '../fs/ranged.js';
|
|
2
|
+
import { type KernelFs, type NewOwner, type OwnerChange } from '../fs/types.js';
|
|
3
|
+
import type { KeptFile, UnlinkHolder } from '../fs/unlinked.js';
|
|
4
|
+
import { OpenFile } from './fd-table.js';
|
|
5
|
+
export interface VfsFileFs extends Partial<AsyncRangedIo> {
|
|
6
|
+
readFileBuffer(path: string): Promise<Uint8Array>;
|
|
7
|
+
writeFile(path: string, content: Uint8Array, owner?: NewOwner): Promise<void>;
|
|
8
|
+
mayChange?(path: string, follow: boolean, whole?: boolean): Promise<void>;
|
|
9
|
+
stat?(path: string): Promise<{
|
|
10
|
+
readonly?: boolean;
|
|
11
|
+
maxFile?: number;
|
|
12
|
+
size?: number;
|
|
13
|
+
ranged?: boolean;
|
|
14
|
+
version?: string;
|
|
15
|
+
ino?: number;
|
|
16
|
+
dev?: number;
|
|
17
|
+
nlink?: number;
|
|
18
|
+
}>;
|
|
19
|
+
readlink?(path: string): Promise<string>;
|
|
20
|
+
lstat?(path: string): Promise<unknown>;
|
|
21
|
+
realpath?(path: string, follow: boolean): Promise<string>;
|
|
22
|
+
chown?(path: string, change: OwnerChange): Promise<void>;
|
|
23
|
+
chmod?(path: string, mode: number): Promise<void>;
|
|
24
|
+
links?(path: string): boolean;
|
|
25
|
+
exclusive?<T>(path: string, run: () => Promise<T>): Promise<T>;
|
|
26
|
+
}
|
|
27
|
+
export interface VfsFileOptions {
|
|
28
|
+
path: string;
|
|
29
|
+
flags: number;
|
|
30
|
+
position: number;
|
|
31
|
+
contents?: Uint8Array;
|
|
32
|
+
orphan?: boolean;
|
|
33
|
+
dirty?: boolean;
|
|
34
|
+
pin?: VersionPin;
|
|
35
|
+
truncate?: boolean;
|
|
36
|
+
create?: boolean;
|
|
37
|
+
id?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface VersionPin {
|
|
40
|
+
version: string;
|
|
41
|
+
size: number;
|
|
42
|
+
}
|
|
43
|
+
export declare const WRITEBACK_MS = 250;
|
|
44
|
+
export declare class VfsNode {
|
|
45
|
+
private data;
|
|
46
|
+
private ranged;
|
|
47
|
+
private readonly pin;
|
|
48
|
+
private length;
|
|
49
|
+
private dirty;
|
|
50
|
+
private queue;
|
|
51
|
+
private writeBack;
|
|
52
|
+
private writeBackCost;
|
|
53
|
+
opens: number;
|
|
54
|
+
writers: number;
|
|
55
|
+
private missing;
|
|
56
|
+
private revoked;
|
|
57
|
+
private readonly fs;
|
|
58
|
+
path: string;
|
|
59
|
+
orphaned: boolean;
|
|
60
|
+
id: string | undefined;
|
|
61
|
+
onDirty: (() => void) | undefined;
|
|
62
|
+
onDirtyState: ((on: boolean) => void) | undefined;
|
|
63
|
+
private counted;
|
|
64
|
+
recount(): void;
|
|
65
|
+
constructor(fs: VfsFileFs, path: string, contents?: Uint8Array, orphaned?: boolean, dirty?: boolean, pin?: VersionPin);
|
|
66
|
+
serial<T>(op: () => Promise<T>): Promise<T>;
|
|
67
|
+
revoke(): void;
|
|
68
|
+
private prepare;
|
|
69
|
+
keep(): Promise<void>;
|
|
70
|
+
load(): Promise<Uint8Array>;
|
|
71
|
+
holds(): boolean;
|
|
72
|
+
replace(contents: Uint8Array): void;
|
|
73
|
+
materialize(): Promise<void>;
|
|
74
|
+
size(): Promise<number>;
|
|
75
|
+
pread(max: number, at: number): Promise<Uint8Array>;
|
|
76
|
+
private cap;
|
|
77
|
+
limit(): Promise<number | undefined>;
|
|
78
|
+
private seen;
|
|
79
|
+
private note;
|
|
80
|
+
known(): number | undefined;
|
|
81
|
+
private fits;
|
|
82
|
+
renamedTo(path: string): void;
|
|
83
|
+
pwrite(bytes: Uint8Array, at: number): Promise<number>;
|
|
84
|
+
truncate(size: number): Promise<void>;
|
|
85
|
+
private markDirty;
|
|
86
|
+
private ensure;
|
|
87
|
+
flush(): Promise<void>;
|
|
88
|
+
}
|
|
89
|
+
export declare class VfsNodes implements UnlinkHolder {
|
|
90
|
+
private readonly byPath;
|
|
91
|
+
private readonly kept;
|
|
92
|
+
private readonly byId;
|
|
93
|
+
keepsOnDisk: boolean;
|
|
94
|
+
changed: ((path: string) => void) | undefined;
|
|
95
|
+
dirtied: ((delta: number) => void) | undefined;
|
|
96
|
+
private readonly fs;
|
|
97
|
+
readonly entries: Map<string, Promise<unknown>>;
|
|
98
|
+
private readonly onClosed;
|
|
99
|
+
constructor(fs: VfsFileFs, onClosed?: (path: string) => void, entries?: Map<string, Promise<unknown>>);
|
|
100
|
+
onEntry<T>(path: string, op: () => Promise<T>): Promise<T>;
|
|
101
|
+
entryKey(path: string): Promise<string>;
|
|
102
|
+
targetKey(path: string): Promise<string>;
|
|
103
|
+
private real;
|
|
104
|
+
createExclusive(path: string, owner?: NewOwner): Promise<void>;
|
|
105
|
+
private identity;
|
|
106
|
+
identify(path: string): Promise<string | undefined>;
|
|
107
|
+
flushLinked(path: string): Promise<void>;
|
|
108
|
+
linked(from: string, to: string): Promise<void>;
|
|
109
|
+
private know;
|
|
110
|
+
private namesOf;
|
|
111
|
+
private forget;
|
|
112
|
+
private orphan;
|
|
113
|
+
private dropName;
|
|
114
|
+
holdsAny(): boolean;
|
|
115
|
+
private epoch;
|
|
116
|
+
private readonly plain;
|
|
117
|
+
reshaped(): void;
|
|
118
|
+
plainAt(path: string): boolean;
|
|
119
|
+
get shape(): number;
|
|
120
|
+
notePlain(path: string, shape: number): void;
|
|
121
|
+
holdsName(name: string): boolean;
|
|
122
|
+
holdsLinked(): boolean;
|
|
123
|
+
holdingId(id: string): VfsNode | undefined;
|
|
124
|
+
holding(path: string): VfsNode | undefined;
|
|
125
|
+
private named;
|
|
126
|
+
private create;
|
|
127
|
+
open(path: string, pin?: VersionPin, writable?: boolean, id?: string): VfsNode;
|
|
128
|
+
adopt(path: string, contents: Uint8Array, dirty: boolean, writable?: boolean, id?: string): VfsNode;
|
|
129
|
+
holds(prefix: string): boolean;
|
|
130
|
+
writes(prefix: string): boolean;
|
|
131
|
+
closed(node: VfsNode, writable?: boolean): void;
|
|
132
|
+
held(): Iterable<string>;
|
|
133
|
+
owns(): boolean;
|
|
134
|
+
isKept(): boolean;
|
|
135
|
+
keep(path: string, file: KeptFile): void;
|
|
136
|
+
unkeep(path: string, file: KeptFile): void;
|
|
137
|
+
flush(path: string): Promise<void>;
|
|
138
|
+
unlinking(path: string): Promise<void>;
|
|
139
|
+
revoke(prefix: string): void;
|
|
140
|
+
unlinked(path: string): void;
|
|
141
|
+
renamed(from: string, to: string): void;
|
|
142
|
+
}
|
|
143
|
+
export declare function present(fs: VfsFileFs, path: string, follow?: boolean): Promise<boolean>;
|
|
144
|
+
export declare function refuseReadonly(fs: VfsFileFs, path: string, flags: number, opts?: {
|
|
145
|
+
create?: boolean;
|
|
146
|
+
truncate?: boolean;
|
|
147
|
+
}): Promise<void>;
|
|
148
|
+
export declare function keepingOpen(fs: KernelFs, nodes: VfsNodes, changed?: (path: string) => void): KernelFs;
|
|
149
|
+
export declare function vfsFile(fs: VfsFileFs, opts: VfsFileOptions, nodes?: VfsNodes): OpenFile;
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import { CdpHosts } from './cdp/hosts.js';
|
|
2
|
+
import type { CdpHook } from './cdp/types.js';
|
|
3
|
+
import { type Abi, type Command } from './commands.js';
|
|
4
|
+
import { FacadeHosts } from './facade/hosts.js';
|
|
5
|
+
import type { FacadeSpecs } from './facade/types.js';
|
|
6
|
+
import { type Attestation } from './fs/attest.js';
|
|
7
|
+
import { Dac, type DenialHook } from './fs/dac.js';
|
|
8
|
+
import { type Protection } from './fs/protect.js';
|
|
9
|
+
import type { KernelFs, UsersMode } from './fs/types.js';
|
|
10
|
+
import { type UnlinkOwner } from './fs/unlinked.js';
|
|
11
|
+
import { FsWatchers } from './fs/watch.js';
|
|
12
|
+
import { type ClipboardHook } from './kernel/clipboard.js';
|
|
13
|
+
import type { CpuTimes } from './kernel/cpu-clock.js';
|
|
14
|
+
import { type Cred } from './kernel/cred.js';
|
|
15
|
+
import { type WasmWorkerLike } from './kernel/host.js';
|
|
16
|
+
import type { CaStore } from './kernel/net/realm-ca.js';
|
|
17
|
+
import { Resolver } from './kernel/net/resolver.js';
|
|
18
|
+
import { Routes, type RouteTable } from './kernel/net/routes.js';
|
|
19
|
+
import type { RealmTransport } from './kernel/net/transport.js';
|
|
20
|
+
import type { NetworkUplink } from './kernel/net/uplink.js';
|
|
21
|
+
import type { ProcessInfo } from './kernel/proc-info.js';
|
|
22
|
+
import { type SealedCaller, type SealedHook } from './kernel/sealed.js';
|
|
23
|
+
import { LoopbackNet } from './kernel/socket.js';
|
|
24
|
+
import { type MediumHandle } from './mount/fsa.js';
|
|
25
|
+
import { type FstabResult } from './mount/fstab.js';
|
|
26
|
+
import { type FetchLike, type HostfsGrantHook, type HostfsTiming } from './mount/hostfs.js';
|
|
27
|
+
import { type MediaStore } from './mount/media.js';
|
|
28
|
+
import { type MountEntry, type MountSpec, MountTable } from './mount/mount-fs.js';
|
|
29
|
+
import { type ProcessMountPolicy } from './mount/syscall.js';
|
|
30
|
+
import { type ApproveHook } from './sudo.js';
|
|
31
|
+
import { type Account, UserDb } from './users.js';
|
|
32
|
+
export interface LauncherOptions {
|
|
33
|
+
unlinkOwner?: UnlinkOwner;
|
|
34
|
+
fs: KernelFs;
|
|
35
|
+
createWorker: () => WasmWorkerLike;
|
|
36
|
+
modules?: string;
|
|
37
|
+
commands?: {
|
|
38
|
+
append?: readonly string[];
|
|
39
|
+
};
|
|
40
|
+
env?: Record<string, string>;
|
|
41
|
+
transport?: RealmTransport;
|
|
42
|
+
caStore?: CaStore;
|
|
43
|
+
createDriverWorker?: () => WasmWorkerLike;
|
|
44
|
+
media?: MediaStore;
|
|
45
|
+
onMountPending?: (pending: PendingMedium) => void;
|
|
46
|
+
hostfs?: HostfsGrantHook;
|
|
47
|
+
hostfsFetch?: FetchLike;
|
|
48
|
+
hostfsTiming?: HostfsTiming;
|
|
49
|
+
processMounts?: ProcessMountPolicy;
|
|
50
|
+
fstabRetries?: readonly number[];
|
|
51
|
+
cdp?: CdpHook;
|
|
52
|
+
facades?: FacadeSpecs;
|
|
53
|
+
uplink?: NetworkUplink;
|
|
54
|
+
hostname?: string;
|
|
55
|
+
users?: UsersMode;
|
|
56
|
+
onDenial?: DenialHook;
|
|
57
|
+
sealed?: SealedHook;
|
|
58
|
+
clipboard?: ClipboardHook;
|
|
59
|
+
approve?: ApproveHook;
|
|
60
|
+
sudoTimeoutMs?: number;
|
|
61
|
+
protect?: Protection;
|
|
62
|
+
}
|
|
63
|
+
export interface PendingMedium {
|
|
64
|
+
target: string;
|
|
65
|
+
source: string;
|
|
66
|
+
handle?: MediumHandle;
|
|
67
|
+
}
|
|
68
|
+
export interface RunOptions {
|
|
69
|
+
cwd?: string;
|
|
70
|
+
env?: Record<string, string>;
|
|
71
|
+
stdin?: Uint8Array;
|
|
72
|
+
onStdout?: (bytes: Uint8Array) => void;
|
|
73
|
+
onStderr?: (bytes: Uint8Array) => void;
|
|
74
|
+
onStarted?: (pid: number) => void;
|
|
75
|
+
collect?: boolean;
|
|
76
|
+
pgid?: number;
|
|
77
|
+
user?: string | number | Account;
|
|
78
|
+
tag?: string;
|
|
79
|
+
}
|
|
80
|
+
export interface TerminalOptions {
|
|
81
|
+
cwd?: string;
|
|
82
|
+
env?: Record<string, string>;
|
|
83
|
+
cols?: number;
|
|
84
|
+
rows?: number;
|
|
85
|
+
user?: string | number | Account;
|
|
86
|
+
tag?: string;
|
|
87
|
+
onData: (bytes: Uint8Array) => void;
|
|
88
|
+
}
|
|
89
|
+
export interface TerminalSession {
|
|
90
|
+
pid: number;
|
|
91
|
+
exited: Promise<number>;
|
|
92
|
+
termsig(): number | undefined;
|
|
93
|
+
write(bytes: Uint8Array): void;
|
|
94
|
+
resize(cols: number, rows: number): void;
|
|
95
|
+
signal(sig: number): void;
|
|
96
|
+
close(): void;
|
|
97
|
+
}
|
|
98
|
+
export interface RunResult {
|
|
99
|
+
status: number;
|
|
100
|
+
signal?: number;
|
|
101
|
+
stdout: Uint8Array;
|
|
102
|
+
stderr: Uint8Array;
|
|
103
|
+
}
|
|
104
|
+
interface Target {
|
|
105
|
+
abi: Abi;
|
|
106
|
+
glue: string;
|
|
107
|
+
wasm: string;
|
|
108
|
+
argv0: string;
|
|
109
|
+
fixed?: true;
|
|
110
|
+
prefix?: string[];
|
|
111
|
+
env?: Record<string, string>;
|
|
112
|
+
unset?: string[];
|
|
113
|
+
imports?: string;
|
|
114
|
+
preopenRoot?: boolean;
|
|
115
|
+
asked?: string;
|
|
116
|
+
}
|
|
117
|
+
export declare function tagOption(tag: unknown): void;
|
|
118
|
+
export declare function expandDefaults(defaults: Readonly<Record<string, string>> | undefined, env: Readonly<Record<string, string>>): Record<string, string>;
|
|
119
|
+
export declare class Launcher {
|
|
120
|
+
readonly fs: KernelFs;
|
|
121
|
+
readonly processFs: KernelFs;
|
|
122
|
+
private readonly noLinksFs;
|
|
123
|
+
private readonly mounted;
|
|
124
|
+
private protection;
|
|
125
|
+
private readonly prefixes;
|
|
126
|
+
private readonly writerTags;
|
|
127
|
+
private readonly unguardedRoot;
|
|
128
|
+
private writers;
|
|
129
|
+
private readonly unlinkOwnerOption;
|
|
130
|
+
private readonly base;
|
|
131
|
+
private readonly createWorker;
|
|
132
|
+
private readonly modulesDir;
|
|
133
|
+
private readonly appended;
|
|
134
|
+
private readonly reportedRoots;
|
|
135
|
+
private readonly env;
|
|
136
|
+
private readonly catalogs;
|
|
137
|
+
private readonly ownCatalogs;
|
|
138
|
+
private readonly binfmts;
|
|
139
|
+
private scopes;
|
|
140
|
+
private unwatchScopes;
|
|
141
|
+
private readonly warned;
|
|
142
|
+
private readonly compiled;
|
|
143
|
+
private readonly texts;
|
|
144
|
+
private revocations;
|
|
145
|
+
private integrity;
|
|
146
|
+
private scannedFs;
|
|
147
|
+
private get scanned();
|
|
148
|
+
private readonly processes;
|
|
149
|
+
private readonly zombies;
|
|
150
|
+
private readonly orphans;
|
|
151
|
+
private readonly described;
|
|
152
|
+
private readonly creds;
|
|
153
|
+
private readonly tags;
|
|
154
|
+
private readonly links;
|
|
155
|
+
private readonly freshModules;
|
|
156
|
+
private readonly granted;
|
|
157
|
+
readonly users: UserDb;
|
|
158
|
+
private readonly sudoer;
|
|
159
|
+
private readonly jobs;
|
|
160
|
+
private readonly locks;
|
|
161
|
+
private readonly sems;
|
|
162
|
+
private readonly settling;
|
|
163
|
+
private readonly ptys;
|
|
164
|
+
readonly net: LoopbackNet;
|
|
165
|
+
readonly cdp: CdpHosts;
|
|
166
|
+
readonly facades: FacadeHosts;
|
|
167
|
+
private readonly ca;
|
|
168
|
+
readonly transport: RealmTransport;
|
|
169
|
+
readonly uplink: NetworkUplink | undefined;
|
|
170
|
+
readonly routes: Routes;
|
|
171
|
+
readonly resolver: Resolver;
|
|
172
|
+
readonly hostname: string;
|
|
173
|
+
readonly watchers: FsWatchers;
|
|
174
|
+
private readonly changes;
|
|
175
|
+
private readonly pnpmHome;
|
|
176
|
+
private readonly pnpmChain;
|
|
177
|
+
private pnpmMade;
|
|
178
|
+
private pnpmEpoch;
|
|
179
|
+
readonly mounts: MountTable;
|
|
180
|
+
private readonly createDriverWorker;
|
|
181
|
+
private readonly media;
|
|
182
|
+
private readonly onMountPending;
|
|
183
|
+
private readonly removable;
|
|
184
|
+
private readonly hostfs;
|
|
185
|
+
private readonly fstabRetries;
|
|
186
|
+
private readonly inserted;
|
|
187
|
+
private readonly openFiles;
|
|
188
|
+
private readonly deciding;
|
|
189
|
+
readonly identities: {
|
|
190
|
+
asked: number;
|
|
191
|
+
timedOut: number;
|
|
192
|
+
};
|
|
193
|
+
private readonly nodes;
|
|
194
|
+
private readonly unlinked;
|
|
195
|
+
private readonly held;
|
|
196
|
+
private readonly processMounts;
|
|
197
|
+
private readonly booting;
|
|
198
|
+
fstab: Promise<FstabResult[]>;
|
|
199
|
+
readonly usersMode: UsersMode;
|
|
200
|
+
readonly dac: Dac | undefined;
|
|
201
|
+
private readonly sealed;
|
|
202
|
+
private readonly scrubs;
|
|
203
|
+
private readonly clipboard;
|
|
204
|
+
private readonly rootFs;
|
|
205
|
+
private fileWatches;
|
|
206
|
+
private nextPid;
|
|
207
|
+
readonly boot: number;
|
|
208
|
+
private terminals;
|
|
209
|
+
constructor(options: LauncherOptions);
|
|
210
|
+
get owners(): boolean;
|
|
211
|
+
setRoutes(table: RouteTable): void;
|
|
212
|
+
private readonly traitsListeners;
|
|
213
|
+
private announcedTraits;
|
|
214
|
+
onTraits(listener: () => void): () => void;
|
|
215
|
+
updateTransportTraits(): boolean;
|
|
216
|
+
commands(scope?: string): Promise<Map<string, Command>>;
|
|
217
|
+
private ownCommands;
|
|
218
|
+
private interpreters;
|
|
219
|
+
private tiers;
|
|
220
|
+
private roots;
|
|
221
|
+
private rootOnlyPath;
|
|
222
|
+
private trustedAppended;
|
|
223
|
+
private resetCatalogs;
|
|
224
|
+
private userScopes;
|
|
225
|
+
private userCommandDir;
|
|
226
|
+
private scopeOf;
|
|
227
|
+
private commandAt;
|
|
228
|
+
resolve(file: string, argv0: string, cwd: string, scope?: string): Promise<Target | undefined>;
|
|
229
|
+
private glueOwner;
|
|
230
|
+
private wasmOwner;
|
|
231
|
+
private head;
|
|
232
|
+
private scriptCommand;
|
|
233
|
+
private interpreted;
|
|
234
|
+
private plan;
|
|
235
|
+
private mayExec;
|
|
236
|
+
private checkedPlan;
|
|
237
|
+
private execGuard;
|
|
238
|
+
private execFile;
|
|
239
|
+
private ticketFile;
|
|
240
|
+
private takeTicket;
|
|
241
|
+
private redeemed;
|
|
242
|
+
private redeem;
|
|
243
|
+
private interpreterChain;
|
|
244
|
+
private commandFile;
|
|
245
|
+
private trustedFiles;
|
|
246
|
+
private grantedCwd;
|
|
247
|
+
private binfmtManifests;
|
|
248
|
+
private backing;
|
|
249
|
+
private backingOf;
|
|
250
|
+
private unrunnable;
|
|
251
|
+
private directory;
|
|
252
|
+
verifiedFs(fs: KernelFs): KernelFs;
|
|
253
|
+
private cacheKey;
|
|
254
|
+
private verified;
|
|
255
|
+
private keyed;
|
|
256
|
+
private cached;
|
|
257
|
+
private module;
|
|
258
|
+
private checkedSources;
|
|
259
|
+
private text;
|
|
260
|
+
private names;
|
|
261
|
+
private program;
|
|
262
|
+
private launch;
|
|
263
|
+
groupSession(pgid: number): number | undefined;
|
|
264
|
+
private loopbackFor;
|
|
265
|
+
private sourceCheck;
|
|
266
|
+
private treeScrubs;
|
|
267
|
+
private marks;
|
|
268
|
+
private start;
|
|
269
|
+
private shownIds;
|
|
270
|
+
private forget;
|
|
271
|
+
private reaped;
|
|
272
|
+
private load;
|
|
273
|
+
private sampler;
|
|
274
|
+
private readonly reapedTimes;
|
|
275
|
+
private readonly idleAt;
|
|
276
|
+
cpuTotal(now?: number): CpuTimes & {
|
|
277
|
+
idle: number;
|
|
278
|
+
};
|
|
279
|
+
loadAverage(): readonly [number, number, number];
|
|
280
|
+
private sampledAt;
|
|
281
|
+
sampleLoad(now?: number): void;
|
|
282
|
+
private idleSince;
|
|
283
|
+
private sampling;
|
|
284
|
+
private readonly spent;
|
|
285
|
+
private readonly imageTimes;
|
|
286
|
+
private readonly childTimes;
|
|
287
|
+
private readonly stopped;
|
|
288
|
+
private stateOf;
|
|
289
|
+
private childrenOf;
|
|
290
|
+
private timesAt;
|
|
291
|
+
private timesOf;
|
|
292
|
+
list(viewer?: Readonly<Cred>): ProcessInfo[];
|
|
293
|
+
private threadsOf;
|
|
294
|
+
private sudo;
|
|
295
|
+
private spawner;
|
|
296
|
+
private childGroup;
|
|
297
|
+
private undecided;
|
|
298
|
+
connectorStamp(pid: number): Promise<SealedCaller>;
|
|
299
|
+
private identityOf;
|
|
300
|
+
private running;
|
|
301
|
+
private decide;
|
|
302
|
+
private forker;
|
|
303
|
+
private keySignal;
|
|
304
|
+
private resolvePrefixes;
|
|
305
|
+
private guardMount;
|
|
306
|
+
private umaskOf;
|
|
307
|
+
private imageOf;
|
|
308
|
+
credOf(pid: number): Cred;
|
|
309
|
+
tagOf(pid: number): string | undefined;
|
|
310
|
+
private released;
|
|
311
|
+
private signalMasksOf;
|
|
312
|
+
private controlsJobs;
|
|
313
|
+
private blockedBy;
|
|
314
|
+
private ignoredBy;
|
|
315
|
+
kill(pid: number, sig: number, sender?: Readonly<Cred>, from?: number): boolean;
|
|
316
|
+
private killAll;
|
|
317
|
+
private driver;
|
|
318
|
+
private fsaDriver;
|
|
319
|
+
revokeIntegrity(path?: string): Promise<void>;
|
|
320
|
+
attest(path: string): Promise<Attestation>;
|
|
321
|
+
watchFiles(paths: readonly string[], notify: (path: string) => void): Promise<() => void>;
|
|
322
|
+
mount(spec: MountSpec): Promise<MountEntry>;
|
|
323
|
+
private mountShm;
|
|
324
|
+
private ownTmp;
|
|
325
|
+
private inUse;
|
|
326
|
+
private stampLayout;
|
|
327
|
+
private realLayoutPath;
|
|
328
|
+
private pnpmReady;
|
|
329
|
+
private pnpmStale;
|
|
330
|
+
private mountedBy;
|
|
331
|
+
private mountRoot;
|
|
332
|
+
insert(target: string, handle: MediumHandle, source?: string): Promise<void>;
|
|
333
|
+
umount(target: string, detach?: boolean): void;
|
|
334
|
+
unmountAll(): void;
|
|
335
|
+
private permit;
|
|
336
|
+
private processMount;
|
|
337
|
+
mountAs(cred: Cred, spec: MountSpec): Promise<MountEntry>;
|
|
338
|
+
umountAs(cred: Cred, target: string): Promise<void>;
|
|
339
|
+
private mountsOwn;
|
|
340
|
+
private processUmount;
|
|
341
|
+
prepare(): Promise<void>;
|
|
342
|
+
private mountFstab;
|
|
343
|
+
private environment;
|
|
344
|
+
private account;
|
|
345
|
+
private terminalAccount;
|
|
346
|
+
private identity;
|
|
347
|
+
fsFor(tag: string | undefined): KernelFs;
|
|
348
|
+
isWriter(tag: string | undefined): boolean;
|
|
349
|
+
private stackFor;
|
|
350
|
+
private writerStack;
|
|
351
|
+
private noLinksOf;
|
|
352
|
+
private rooted;
|
|
353
|
+
private commandFs;
|
|
354
|
+
private processChain;
|
|
355
|
+
private starting;
|
|
356
|
+
openTerminal(argv: string[], options: TerminalOptions): Promise<TerminalSession>;
|
|
357
|
+
run(argv: string[], options?: RunOptions): Promise<RunResult>;
|
|
358
|
+
}
|
|
359
|
+
export type { ProcessInfo, ProcessListing } from './kernel/proc-info.js';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { RealmTransport } from './kernel/net/transport.js';
|
|
2
|
+
export interface LocalProxyOptions {
|
|
3
|
+
url: string;
|
|
4
|
+
key: string;
|
|
5
|
+
fetch?: typeof globalThis.fetch;
|
|
6
|
+
}
|
|
7
|
+
export interface LocalProxyCheckOptions extends LocalProxyOptions {
|
|
8
|
+
permissions?: Pick<Permissions, 'query'>;
|
|
9
|
+
}
|
|
10
|
+
export interface LocalProxyTransportOptions extends LocalProxyOptions {
|
|
11
|
+
maxRequestBody?: number;
|
|
12
|
+
bodyIdleMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface LocalProxyProbe {
|
|
15
|
+
rawFetch: number;
|
|
16
|
+
requestBodyStreaming: boolean;
|
|
17
|
+
maxRequestBodyBytes: number;
|
|
18
|
+
kernelTunnel?: number;
|
|
19
|
+
kernelPort?: number;
|
|
20
|
+
cdp?: number;
|
|
21
|
+
}
|
|
22
|
+
export type LocalProxyStatus = {
|
|
23
|
+
state: 'ready';
|
|
24
|
+
probe: LocalProxyProbe;
|
|
25
|
+
} | {
|
|
26
|
+
state: 'blocked';
|
|
27
|
+
} | {
|
|
28
|
+
state: 'unreachable';
|
|
29
|
+
permission: 'granted' | 'prompt' | 'unknown';
|
|
30
|
+
} | {
|
|
31
|
+
state: 'refused';
|
|
32
|
+
status: number;
|
|
33
|
+
error: string;
|
|
34
|
+
} | {
|
|
35
|
+
state: 'incompatible';
|
|
36
|
+
};
|
|
37
|
+
export declare function checkLocalProxy(options: LocalProxyCheckOptions): Promise<LocalProxyStatus>;
|
|
38
|
+
export declare function probeLocalProxy(options: LocalProxyCheckOptions): Promise<LocalProxyProbe | null>;
|
|
39
|
+
export declare function localProxyTransport(options: LocalProxyTransportOptions): RealmTransport;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface MetadataEntry {
|
|
2
|
+
path: string;
|
|
3
|
+
mode?: number;
|
|
4
|
+
uid?: number;
|
|
5
|
+
gid?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface WriteMetadataOptions {
|
|
8
|
+
metadata?: string;
|
|
9
|
+
indexedDB?: IDBFactory;
|
|
10
|
+
}
|
|
11
|
+
export declare function writeMetadata(root: FileSystemDirectoryHandle, entries: readonly MetadataEntry[], options?: WriteMetadataOptions): Promise<void>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const CHUNK: number;
|
|
2
|
+
export declare class ChunkedBytes {
|
|
3
|
+
private chunks;
|
|
4
|
+
size: number;
|
|
5
|
+
read(offset: number, length: number): Uint8Array;
|
|
6
|
+
write(offset: number, bytes: Uint8Array, owned?: boolean): void;
|
|
7
|
+
truncate(size: number): void;
|
|
8
|
+
private room;
|
|
9
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type DriverCall, type DriverCapabilities, type MountRequestInfo } from './protocol.js';
|
|
2
|
+
export interface DriverPortLike {
|
|
3
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
4
|
+
addEventListener(type: 'message', handler: (event: MessageEvent) => void): void;
|
|
5
|
+
start?(): void;
|
|
6
|
+
close?(): void;
|
|
7
|
+
ref?(): void;
|
|
8
|
+
unref?(): void;
|
|
9
|
+
}
|
|
10
|
+
export interface ConnectionOptions {
|
|
11
|
+
timeoutMs?: number;
|
|
12
|
+
idle?: boolean;
|
|
13
|
+
onInvalidate?: (paths: string[] | true) => void;
|
|
14
|
+
onFail?: (error: Error) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare const DRIVER_TIMEOUT_MS = 30000;
|
|
17
|
+
export declare function errnoError(code: string, message: string): Error & {
|
|
18
|
+
code: string;
|
|
19
|
+
};
|
|
20
|
+
export declare class DriverConnection {
|
|
21
|
+
readonly capabilities: DriverCapabilities;
|
|
22
|
+
failure: Error | undefined;
|
|
23
|
+
private readonly port;
|
|
24
|
+
private readonly waiting;
|
|
25
|
+
private readonly timeoutMs;
|
|
26
|
+
private nextId;
|
|
27
|
+
private readonly onFail;
|
|
28
|
+
private readonly idle;
|
|
29
|
+
private constructor();
|
|
30
|
+
private settled;
|
|
31
|
+
static open(port: DriverPortLike, mount: MountRequestInfo, options?: ConnectionOptions): Promise<DriverConnection>;
|
|
32
|
+
call(call: DriverCall, transfer?: Transferable[]): Promise<unknown>;
|
|
33
|
+
fail(error: Error): void;
|
|
34
|
+
close(): void;
|
|
35
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type DriverAttr, type DriverCapabilities, type DriverEntry, type DriverOwner, type DriverStatfs, type MountRequestInfo } from './protocol.js';
|
|
2
|
+
export type { DriverAttr, DriverCapabilities, DriverEntry, DriverOwner, DriverStatfs, MountRequestInfo, } from './protocol.js';
|
|
3
|
+
export interface OpenFlags {
|
|
4
|
+
write: boolean;
|
|
5
|
+
create: boolean;
|
|
6
|
+
truncate: boolean;
|
|
7
|
+
exclusive: boolean;
|
|
8
|
+
ifMatch?: string;
|
|
9
|
+
owner?: DriverOwner;
|
|
10
|
+
}
|
|
11
|
+
export interface FilesystemHandlers {
|
|
12
|
+
mount?(info: MountRequestInfo): Promise<DriverCapabilities | undefined> | DriverCapabilities | undefined;
|
|
13
|
+
getattr(path: string): Promise<DriverAttr>;
|
|
14
|
+
readdir(path: string): Promise<DriverEntry[]>;
|
|
15
|
+
open(path: string, flags: OpenFlags): Promise<number>;
|
|
16
|
+
read(fh: number, offset: number, size: number): Promise<Uint8Array>;
|
|
17
|
+
write(fh: number, offset: number, bytes: Uint8Array): Promise<void>;
|
|
18
|
+
release(fh: number): Promise<void>;
|
|
19
|
+
mkdir(path: string, owner?: DriverOwner): Promise<void>;
|
|
20
|
+
rmdir(path: string): Promise<void>;
|
|
21
|
+
unlink(path: string): Promise<void>;
|
|
22
|
+
rename(from: string, to: string): Promise<void>;
|
|
23
|
+
link?(from: string, to: string): Promise<void>;
|
|
24
|
+
symlink?(target: string, path: string, owner?: DriverOwner): Promise<void>;
|
|
25
|
+
readlink?(path: string): Promise<string>;
|
|
26
|
+
setattr?(path: string, attr: DriverSetAttr): Promise<void>;
|
|
27
|
+
statfs?(): Promise<DriverStatfs>;
|
|
28
|
+
}
|
|
29
|
+
export interface DriverSetAttr {
|
|
30
|
+
mode?: number;
|
|
31
|
+
mtime?: number;
|
|
32
|
+
atime?: number;
|
|
33
|
+
size?: number;
|
|
34
|
+
uid?: number;
|
|
35
|
+
gid?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface DriverPort {
|
|
38
|
+
postMessage(message: unknown, transfer?: Transferable[]): void;
|
|
39
|
+
addEventListener(type: 'message', handler: (event: MessageEvent) => void): void;
|
|
40
|
+
start?(): void;
|
|
41
|
+
}
|
|
42
|
+
export interface ServedFilesystem {
|
|
43
|
+
invalidate(paths: string[] | true): void;
|
|
44
|
+
}
|
|
45
|
+
export declare function fsError(code: string, message?: string): Error & {
|
|
46
|
+
code: string;
|
|
47
|
+
};
|
|
48
|
+
export declare function serveFilesystem(port: DriverPort, handlers: FilesystemHandlers, capabilities?: DriverCapabilities, options?: {
|
|
49
|
+
owned?: boolean;
|
|
50
|
+
}): ServedFilesystem;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { OpfsFs } from '../fs/opfs.js';
|
|
2
|
+
import type { KernelFs } from '../fs/types.js';
|
|
3
|
+
import { type FilesystemHandlers } from './driver.js';
|
|
4
|
+
import type { DriverCapabilities } from './protocol.js';
|
|
5
|
+
export declare const FSA_CAPABILITIES: DriverCapabilities;
|
|
6
|
+
export interface PermissionHandle {
|
|
7
|
+
queryPermission?(descriptor: {
|
|
8
|
+
mode: 'read' | 'readwrite';
|
|
9
|
+
}): Promise<PermissionState>;
|
|
10
|
+
requestPermission?(descriptor: {
|
|
11
|
+
mode: 'read' | 'readwrite';
|
|
12
|
+
}): Promise<PermissionState>;
|
|
13
|
+
}
|
|
14
|
+
export type MediumHandle = FileSystemDirectoryHandle & PermissionHandle;
|
|
15
|
+
type Handlers = Required<Omit<FilesystemHandlers, 'mount' | 'statfs' | 'link'>>;
|
|
16
|
+
export type SessionFs = KernelFs & Pick<OpfsFs, 'writeSession' | 'pread'>;
|
|
17
|
+
export declare function kernelFsHandlers(fs: SessionFs): Handlers;
|
|
18
|
+
export interface Medium {
|
|
19
|
+
readonly handlers: FilesystemHandlers;
|
|
20
|
+
present(): boolean;
|
|
21
|
+
insert(handle: MediumHandle): void;
|
|
22
|
+
eject(): void;
|
|
23
|
+
}
|
|
24
|
+
export declare function granted(handle: PermissionHandle): Promise<boolean>;
|
|
25
|
+
export declare function removableMedium(onLost: (handle: MediumHandle) => void, open?: (handle: MediumHandle) => SessionFs): Medium;
|
|
26
|
+
export {};
|