@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.
Files changed (178) hide show
  1. package/README.md +1 -1
  2. package/dist/kernel-worker.js +1 -1
  3. package/dist/node-process-worker.js +1 -1
  4. package/dist/node.js +1 -1
  5. package/dist/process-worker.js +1 -1
  6. package/dist/types/body-idle.d.ts +3 -0
  7. package/dist/types/bytes.d.ts +1 -0
  8. package/dist/types/cdp/facade.d.ts +27 -0
  9. package/dist/types/cdp/hosts.d.ts +14 -0
  10. package/dist/types/cdp/port.d.ts +24 -0
  11. package/dist/types/cdp/types.d.ts +12 -0
  12. package/dist/types/cdp/websocket.d.ts +61 -0
  13. package/dist/types/client/attach.d.ts +132 -0
  14. package/dist/types/client/dial-stream.d.ts +23 -0
  15. package/dist/types/client/loopback-fetch.d.ts +5 -0
  16. package/dist/types/client/protocol.d.ts +153 -0
  17. package/dist/types/client/serve-client.d.ts +18 -0
  18. package/dist/types/clipboard-relay.d.ts +25 -0
  19. package/dist/types/commands.d.ts +38 -0
  20. package/dist/types/cron/clock.d.ts +13 -0
  21. package/dist/types/driver.d.ts +3 -0
  22. package/dist/types/facade/hosts.d.ts +12 -0
  23. package/dist/types/facade/port.d.ts +16 -0
  24. package/dist/types/facade/types.d.ts +23 -0
  25. package/dist/types/fs/access.d.ts +29 -0
  26. package/dist/types/fs/attest.d.ts +41 -0
  27. package/dist/types/fs/changes.d.ts +19 -0
  28. package/dist/types/fs/commands.d.ts +4 -0
  29. package/dist/types/fs/dac.d.ts +64 -0
  30. package/dist/types/fs/dev-removal.d.ts +9 -0
  31. package/dist/types/fs/fresh-modules.d.ts +9 -0
  32. package/dist/types/fs/integrity.d.ts +53 -0
  33. package/dist/types/fs/meta.d.ts +85 -0
  34. package/dist/types/fs/opfs.d.ts +141 -0
  35. package/dist/types/fs/owners.d.ts +17 -0
  36. package/dist/types/fs/pages.d.ts +41 -0
  37. package/dist/types/fs/path-map.d.ts +16 -0
  38. package/dist/types/fs/physical-path.d.ts +14 -0
  39. package/dist/types/fs/protect.d.ts +27 -0
  40. package/dist/types/fs/ranged.d.ts +73 -0
  41. package/dist/types/fs/remote.d.ts +45 -0
  42. package/dist/types/fs/types.d.ts +115 -0
  43. package/dist/types/fs/unlinked.d.ts +75 -0
  44. package/dist/types/fs/view.d.ts +1 -0
  45. package/dist/types/fs/walk.d.ts +12 -0
  46. package/dist/types/fs/watch.d.ts +23 -0
  47. package/dist/types/index.d.ts +159 -0
  48. package/dist/types/integrity-relay.d.ts +18 -0
  49. package/dist/types/kernel/children.d.ts +90 -0
  50. package/dist/types/kernel/clipboard.d.ts +49 -0
  51. package/dist/types/kernel/cpu-clock.d.ts +56 -0
  52. package/dist/types/kernel/cred.d.ts +17 -0
  53. package/dist/types/kernel/dgram.d.ts +56 -0
  54. package/dist/types/kernel/dial.d.ts +20 -0
  55. package/dist/types/kernel/epoll.d.ts +67 -0
  56. package/dist/types/kernel/eventfd.d.ts +19 -0
  57. package/dist/types/kernel/exec-ticket.d.ts +25 -0
  58. package/dist/types/kernel/fd-table.d.ts +107 -0
  59. package/dist/types/kernel/host-ops.d.ts +98 -0
  60. package/dist/types/kernel/host.d.ts +116 -0
  61. package/dist/types/kernel/jobs.d.ts +50 -0
  62. package/dist/types/kernel/locks.d.ts +40 -0
  63. package/dist/types/kernel/net/datagram-wire.d.ts +8 -0
  64. package/dist/types/kernel/net/http-syscalls.d.ts +58 -0
  65. package/dist/types/kernel/net/http1.d.ts +48 -0
  66. package/dist/types/kernel/net/loopback-names.d.ts +14 -0
  67. package/dist/types/kernel/net/loopback-transport.d.ts +13 -0
  68. package/dist/types/kernel/net/network.d.ts +29 -0
  69. package/dist/types/kernel/net/proxy-service.d.ts +70 -0
  70. package/dist/types/kernel/net/realm-ca.d.ts +28 -0
  71. package/dist/types/kernel/net/redirect-hops.d.ts +5 -0
  72. package/dist/types/kernel/net/remote-transport.d.ts +98 -0
  73. package/dist/types/kernel/net/resolver.d.ts +29 -0
  74. package/dist/types/kernel/net/routes.d.ts +15 -0
  75. package/dist/types/kernel/net/tls-engine.d.ts +46 -0
  76. package/dist/types/kernel/net/tls-tunnel.d.ts +35 -0
  77. package/dist/types/kernel/net/transport.d.ts +64 -0
  78. package/dist/types/kernel/net/uplink-socket.d.ts +11 -0
  79. package/dist/types/kernel/net/uplink.d.ts +163 -0
  80. package/dist/types/kernel/net/ws-queue.d.ts +21 -0
  81. package/dist/types/kernel/net/ws-syscalls.d.ts +45 -0
  82. package/dist/types/kernel/net/x509.d.ts +34 -0
  83. package/dist/types/kernel/pipe.d.ts +29 -0
  84. package/dist/types/kernel/proc-info.d.ts +44 -0
  85. package/dist/types/kernel/process.d.ts +525 -0
  86. package/dist/types/kernel/protocol.d.ts +126 -0
  87. package/dist/types/kernel/pty.d.ts +84 -0
  88. package/dist/types/kernel/run-child.d.ts +39 -0
  89. package/dist/types/kernel/scrub-file.d.ts +13 -0
  90. package/dist/types/kernel/sealed.d.ts +74 -0
  91. package/dist/types/kernel/select.d.ts +7 -0
  92. package/dist/types/kernel/sem.d.ts +72 -0
  93. package/dist/types/kernel/settling.d.ts +16 -0
  94. package/dist/types/kernel/signals.d.ts +44 -0
  95. package/dist/types/kernel/socket-syscalls.d.ts +74 -0
  96. package/dist/types/kernel/socket.d.ts +125 -0
  97. package/dist/types/kernel/timer.d.ts +4 -0
  98. package/dist/types/kernel/tty.d.ts +53 -0
  99. package/dist/types/kernel/vfs-file.d.ts +149 -0
  100. package/dist/types/launcher.d.ts +359 -0
  101. package/dist/types/local-proxy-transport.d.ts +39 -0
  102. package/dist/types/meta.d.ts +11 -0
  103. package/dist/types/mount/chunked.d.ts +9 -0
  104. package/dist/types/mount/connection.d.ts +35 -0
  105. package/dist/types/mount/driver.d.ts +50 -0
  106. package/dist/types/mount/fsa.d.ts +26 -0
  107. package/dist/types/mount/fstab.d.ts +17 -0
  108. package/dist/types/mount/host.d.ts +24 -0
  109. package/dist/types/mount/hostfs.d.ts +129 -0
  110. package/dist/types/mount/media.d.ts +8 -0
  111. package/dist/types/mount/medium.d.ts +12 -0
  112. package/dist/types/mount/mount-fs.d.ts +136 -0
  113. package/dist/types/mount/protocol.d.ts +140 -0
  114. package/dist/types/mount/syscall.d.ts +27 -0
  115. package/dist/types/mount/tmpfs.d.ts +2 -0
  116. package/dist/types/node/loopback.d.ts +11 -0
  117. package/dist/types/node/memory-root.d.ts +2 -0
  118. package/dist/types/node/ws-diagnose.d.ts +4 -0
  119. package/dist/types/node.d.ts +85 -0
  120. package/dist/types/process/fd-metadata.d.ts +4 -0
  121. package/dist/types/process/js/async-sab.d.ts +15 -0
  122. package/dist/types/process/js/js-children.d.ts +63 -0
  123. package/dist/types/process/js/js-context.d.ts +133 -0
  124. package/dist/types/process/js/js-dev.d.ts +50 -0
  125. package/dist/types/process/js/js-exit.d.ts +15 -0
  126. package/dist/types/process/js/js-fetch.d.ts +2 -0
  127. package/dist/types/process/js/js-io.d.ts +81 -0
  128. package/dist/types/process/js/js-kernel.d.ts +61 -0
  129. package/dist/types/process/js/js-net.d.ts +42 -0
  130. package/dist/types/process/js/js-proc.d.ts +31 -0
  131. package/dist/types/process/js/js-run.d.ts +35 -0
  132. package/dist/types/process/js/js-sync.d.ts +86 -0
  133. package/dist/types/process/js/js-tty.d.ts +30 -0
  134. package/dist/types/process/js/js-websocket.d.ts +21 -0
  135. package/dist/types/process/kernel-streams.d.ts +196 -0
  136. package/dist/types/process/process-fds.d.ts +95 -0
  137. package/dist/types/process/process-locks.d.ts +29 -0
  138. package/dist/types/process/process-pty.d.ts +20 -0
  139. package/dist/types/process/process-signals.d.ts +33 -0
  140. package/dist/types/process/procfs.d.ts +41 -0
  141. package/dist/types/process/wasi/dylink.d.ts +9 -0
  142. package/dist/types/process/wasi/slicc-lock.d.ts +26 -0
  143. package/dist/types/process/wasi/slicc-sem.d.ts +3 -0
  144. package/dist/types/process/wasi/wasi-abi.d.ts +156 -0
  145. package/dist/types/process/wasi/wasi-fds.d.ts +130 -0
  146. package/dist/types/process/wasi/wasi-files.d.ts +99 -0
  147. package/dist/types/process/wasi/wasi-host.d.ts +104 -0
  148. package/dist/types/process/wasi/wasi-memory.d.ts +16 -0
  149. package/dist/types/process/wasi/wasi-module.d.ts +13 -0
  150. package/dist/types/process/wasi/wasi-poll.d.ts +13 -0
  151. package/dist/types/process/wasi/wasi-procfs.d.ts +36 -0
  152. package/dist/types/process/wasi/wasi-sigmask.d.ts +19 -0
  153. package/dist/types/process/wasi/wasi-signals.d.ts +43 -0
  154. package/dist/types/process/wasi/wasi-termios.d.ts +10 -0
  155. package/dist/types/process/wasi/wasix-fork.d.ts +63 -0
  156. package/dist/types/process/wasi/wasix-linker.d.ts +108 -0
  157. package/dist/types/process/wasi/wasix-sockets.d.ts +9 -0
  158. package/dist/types/process/wasi/wasix-trampoline.d.ts +18 -0
  159. package/dist/types/process/wasi/wasm-functypes.d.ts +25 -0
  160. package/dist/types/process/wasi-errno.d.ts +1 -0
  161. package/dist/types/realm/emscripten-vfs-hook.d.ts +19 -0
  162. package/dist/types/realm/live-vfs-fs.d.ts +186 -0
  163. package/dist/types/realm/sync-fs-dispatch.d.ts +26 -0
  164. package/dist/types/realm/sync-fs-token-registry.d.ts +36 -0
  165. package/dist/types/realm/sync-fs-wire.d.ts +118 -0
  166. package/dist/types/realm/sync-sab-bridge.d.ts +21 -0
  167. package/dist/types/realm/sync-sab-responder.d.ts +16 -0
  168. package/dist/types/realm/sync-sab-wire.d.ts +64 -0
  169. package/dist/types/sealed-relay.d.ts +26 -0
  170. package/dist/types/serve.d.ts +190 -0
  171. package/dist/types/sudo-command.d.ts +4 -0
  172. package/dist/types/sudo.d.ts +105 -0
  173. package/dist/types/testing.d.ts +46 -0
  174. package/dist/types/transport.d.ts +25 -0
  175. package/dist/types/users.d.ts +86 -0
  176. package/dist/types/version.d.ts +3 -0
  177. package/dist/types/websocket-transport.d.ts +12 -0
  178. package/package.json +22 -6
@@ -0,0 +1,190 @@
1
+ import { type LockManagerLike } from './client/protocol.js';
2
+ import { type MetaStore } from './fs/meta.js';
3
+ import { type ProtectInit } from './fs/protect.js';
4
+ import { type UsersMode } from './fs/types.js';
5
+ import type { WasmWorkerLike } from './kernel/host.js';
6
+ import type { RouteTable } from './kernel/net/routes.js';
7
+ import type { RealmTransportTraits } from './kernel/net/transport.js';
8
+ import { type UplinkTraits } from './kernel/net/uplink.js';
9
+ import { type RunOptions, type TerminalOptions } from './launcher.js';
10
+ import type { MediumHandle } from './mount/fsa.js';
11
+ import type { HostfsGrant, HostfsPortGrant } from './mount/hostfs.js';
12
+ import type { MediaStore } from './mount/media.js';
13
+ import type { MountSpec } from './mount/mount-fs.js';
14
+ import type { AddUser, RemoveUser } from './users.js';
15
+ export interface KernelPort {
16
+ postMessage(message: unknown, transfer?: Transferable[]): void;
17
+ addEventListener(type: 'message', handler: (event: MessageEvent) => void): void;
18
+ }
19
+ export interface InitRequest {
20
+ id: number;
21
+ op: 'init';
22
+ root?: FileSystemDirectoryHandle;
23
+ modules?: string;
24
+ commands?: {
25
+ append?: readonly string[];
26
+ };
27
+ env?: Record<string, string>;
28
+ metadata?: string | false;
29
+ media?: string | false;
30
+ ca?: string | false;
31
+ transport?: RealmTransportTraits;
32
+ uplink?: {
33
+ traits: UplinkTraits;
34
+ routes?: RouteTable;
35
+ };
36
+ hostfs?: boolean;
37
+ hostname?: string;
38
+ users?: UsersMode;
39
+ protect?: ProtectInit;
40
+ denials?: boolean;
41
+ sealed?: boolean;
42
+ clipboard?: boolean;
43
+ approve?: boolean;
44
+ processMounts?: boolean | 'ask';
45
+ cdp?: boolean;
46
+ facades?: Record<string, {
47
+ port: number;
48
+ hook?: boolean;
49
+ }>;
50
+ }
51
+ export interface RunRequest {
52
+ id: number;
53
+ op: 'run';
54
+ argv: string[];
55
+ options: Omit<RunOptions, 'onStdout' | 'onStderr'>;
56
+ }
57
+ export interface OpenTerminalRequest {
58
+ id: number;
59
+ op: 'open-terminal';
60
+ argv: string[];
61
+ options: Omit<TerminalOptions, 'onData'>;
62
+ }
63
+ export type TerminalAction = {
64
+ action: 'write';
65
+ bytes: Uint8Array;
66
+ } | {
67
+ action: 'resize';
68
+ cols: number;
69
+ rows: number;
70
+ } | {
71
+ action: 'signal';
72
+ signal: string;
73
+ } | {
74
+ action: 'close';
75
+ };
76
+ export type TerminalRequest = {
77
+ id: number;
78
+ op: 'terminal';
79
+ terminal: number;
80
+ } & TerminalAction;
81
+ export interface ConnectRequest {
82
+ id: number;
83
+ op: 'connect';
84
+ user?: string | number;
85
+ tag?: string;
86
+ }
87
+ export type UsersRequest = {
88
+ id: number;
89
+ op: 'users-add';
90
+ user: AddUser;
91
+ } | {
92
+ id: number;
93
+ op: 'users-remove';
94
+ name: string;
95
+ options?: RemoveUser;
96
+ } | {
97
+ id: number;
98
+ op: 'users-list';
99
+ } | {
100
+ id: number;
101
+ op: 'groups-list';
102
+ } | {
103
+ id: number;
104
+ op: 'groups-add-member' | 'groups-remove-member';
105
+ group: string;
106
+ user: string;
107
+ };
108
+ export interface RoutesRequest {
109
+ id: number;
110
+ op: 'routes';
111
+ routes: RouteTable;
112
+ }
113
+ export interface TraitsRequest {
114
+ id: number;
115
+ op: 'transport-traits';
116
+ traits?: RealmTransportTraits;
117
+ }
118
+ export type MountRequest = {
119
+ id: number;
120
+ op: 'mount';
121
+ spec: MountSpec;
122
+ } | {
123
+ id: number;
124
+ op: 'umount';
125
+ target: string;
126
+ } | {
127
+ id: number;
128
+ op: 'mounts';
129
+ } | {
130
+ id: number;
131
+ op: 'insert';
132
+ target: string;
133
+ source?: string;
134
+ handle: MediumHandle;
135
+ };
136
+ export interface DialRequest {
137
+ id: number;
138
+ op: 'dial';
139
+ port: number;
140
+ host?: string;
141
+ }
142
+ export type AttestRequest = {
143
+ id: number;
144
+ op: 'attest';
145
+ path: string;
146
+ } | {
147
+ id: number;
148
+ op: 'chmod';
149
+ path: string;
150
+ mode: number;
151
+ } | {
152
+ id: number;
153
+ op: 'integrity-revoke';
154
+ path?: string;
155
+ } | {
156
+ id: number;
157
+ op: 'watch-files';
158
+ paths: string[];
159
+ } | {
160
+ id: number;
161
+ op: 'unwatch-files';
162
+ watch: number;
163
+ };
164
+ export interface FileChanged {
165
+ fileChanged: {
166
+ watch: number;
167
+ path: string;
168
+ };
169
+ }
170
+ export type KernelRequest = AttestRequest | InitRequest | RunRequest | OpenTerminalRequest | TerminalRequest | ConnectRequest | UsersRequest | MountRequest | DialRequest | RoutesRequest | TraitsRequest;
171
+ type WithoutId<T> = T extends unknown ? Omit<T, 'id'> : never;
172
+ export type KernelCall = WithoutId<KernelRequest>;
173
+ export declare function inOpfs(deps: ServeDeps, root: FileSystemDirectoryHandle): Promise<boolean>;
174
+ export interface ServeDeps {
175
+ storage: () => Promise<FileSystemDirectoryHandle>;
176
+ syncAccess?: boolean;
177
+ createWorker: () => WasmWorkerLike;
178
+ createDriverWorker?: () => WasmWorkerLike;
179
+ metadata?: (name: string) => Promise<MetaStore>;
180
+ media?: (name: string) => Promise<MediaStore>;
181
+ locks?: LockManagerLike | null;
182
+ }
183
+ export declare function signalNumber(name: string): number;
184
+ export interface GrantReply {
185
+ id: number;
186
+ grant?: HostfsGrant | HostfsPortGrant;
187
+ error?: string;
188
+ }
189
+ export declare function serveKernel(port: KernelPort, deps: ServeDeps): void;
190
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { Command } from './commands.js';
2
+ export declare const SUDO_PATH = "/usr/bin/sudo";
3
+ export declare const SUDO_COMMAND: Command;
4
+ export declare const SUDO_SOURCE: string;
@@ -0,0 +1,105 @@
1
+ import type { KernelFs, UsersMode } from './fs/types.js';
2
+ import type { Cred } from './kernel/cred.js';
3
+ import { type UserDb } from './users.js';
4
+ export declare const SUDOERS = "/etc/sudoers";
5
+ export declare const SUDOERS_D = "/etc/sudoers.d";
6
+ export declare const SECURE_PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
7
+ export declare const DEFAULT_SUDOERS = "%sudo Cmnd *\n";
8
+ export declare const SUDO_TIMEOUT_MS = 300000;
9
+ export interface SudoRequest {
10
+ id: string;
11
+ kind: 'sudo';
12
+ user: string;
13
+ uid: number;
14
+ target: string;
15
+ argv: string[];
16
+ path: string;
17
+ cwd: string;
18
+ pid: number;
19
+ tag?: string;
20
+ tty?: string;
21
+ createdAt: number;
22
+ expiresAt: number;
23
+ always: boolean;
24
+ }
25
+ export type SudoAnswer = 'once' | 'always' | 'deny';
26
+ export type ApproveHook = (req: SudoRequest, options: {
27
+ signal: AbortSignal;
28
+ }) => SudoAnswer | Promise<SudoAnswer>;
29
+ export interface SudoCall {
30
+ op: 'proc-sudo';
31
+ args: string[];
32
+ cwd: string;
33
+ term?: string;
34
+ }
35
+ export interface SudoGrant {
36
+ file: string;
37
+ argv: string[];
38
+ env: Record<string, string>;
39
+ cwd: string;
40
+ cred: Cred;
41
+ caller: Cred;
42
+ }
43
+ export type SudoResult = {
44
+ error: string;
45
+ errno: string;
46
+ } | {
47
+ list: string;
48
+ } | {
49
+ run: string[];
50
+ } | {
51
+ grant: SudoGrant;
52
+ };
53
+ export interface SudoCaller {
54
+ cred: Cred;
55
+ pid: number;
56
+ tag?: string | undefined;
57
+ tty?: string | null | undefined;
58
+ }
59
+ interface Rule {
60
+ nopasswd: boolean;
61
+ who: string;
62
+ target: string;
63
+ cwd?: string;
64
+ cmnd: string[] | '*';
65
+ }
66
+ export interface SudoOptions {
67
+ fs: KernelFs;
68
+ users: UserDb;
69
+ mode: UsersMode;
70
+ hostname: string;
71
+ env: () => Record<string, string>;
72
+ pnpmHome: string;
73
+ backing?: (path: string, cwd: string) => Promise<string[] | undefined>;
74
+ approve?: ApproveHook | undefined;
75
+ timeoutMs?: number | undefined;
76
+ warn?: (message: string) => void;
77
+ }
78
+ export declare function splitWords(text: string): string[] | undefined;
79
+ export declare function quoteWord(word: string): string;
80
+ export declare function parseRule(line: string): Rule | null | undefined;
81
+ export declare class Sudo {
82
+ private readonly o;
83
+ private readonly warned;
84
+ private readonly pending;
85
+ private next;
86
+ constructor(options: SudoOptions);
87
+ private warn;
88
+ provision(): Promise<void>;
89
+ trusted(path: string): Promise<boolean>;
90
+ private policyFile;
91
+ private policy;
92
+ private groupIds;
93
+ private applies;
94
+ private lookup;
95
+ private canonical;
96
+ reachable(cred: Cred, cwd: string): Promise<boolean>;
97
+ private untrusted;
98
+ private locate;
99
+ request(caller: SudoCaller, call: SudoCall, signal: AbortSignal): Promise<SudoResult>;
100
+ private listed;
101
+ private ask;
102
+ private remember;
103
+ private grant;
104
+ }
105
+ export {};
@@ -0,0 +1,46 @@
1
+ import type { RouteTable } from './kernel/net/routes.js';
2
+ import { type NetworkUplink, type ResolveAnswer, type ResolveFamily, type UplinkConn, type UplinkDatagram, type UplinkDial, type UplinkMessage, type UplinkUdp, type UplinkUdpOpen, type UplinkUnreachable } from './kernel/net/uplink.js';
3
+ export { type CronClock, type FakeCronClock, fakeCronClock } from './cron/clock.js';
4
+ export type { NetworkUplink, ResolveAnswer, ResolveFamily, RouteTable, UplinkConn, UplinkDatagram, UplinkDial, UplinkMessage, UplinkUdp, UplinkUdpOpen, UplinkUnreachable, };
5
+ export type FakeDatagramPeer = (bytes: Uint8Array) => Uint8Array | readonly Uint8Array[] | {
6
+ error: string;
7
+ } | undefined;
8
+ export interface FakePeerSocket {
9
+ read(): Promise<Uint8Array | null>;
10
+ write(bytes: Uint8Array): void;
11
+ end(): void;
12
+ reset(code?: string): void;
13
+ readonly buffered: number;
14
+ drained(): Promise<void>;
15
+ readonly closed: Promise<void>;
16
+ }
17
+ export type FakePeer = ((socket: FakePeerSocket) => void) | {
18
+ error: string;
19
+ } | {
20
+ hang: true;
21
+ };
22
+ export interface FakeUplinkOptions {
23
+ names?: Readonly<Record<string, string[] | ResolveAnswer>>;
24
+ routes?: RouteTable;
25
+ ipv6?: boolean;
26
+ peers?: Readonly<Record<string, FakePeer>>;
27
+ datagrams?: Readonly<Record<string, FakeDatagramPeer>>;
28
+ address?: string;
29
+ }
30
+ export interface FakeUplink extends NetworkUplink {
31
+ readonly asked: Array<{
32
+ name: string;
33
+ family: ResolveFamily;
34
+ }>;
35
+ readonly dialled: Array<{
36
+ host: string;
37
+ port: number;
38
+ }>;
39
+ readonly sent: Array<{
40
+ host: string;
41
+ port: number;
42
+ bytes: Uint8Array;
43
+ }>;
44
+ udp(req: UplinkUdpOpen): Promise<UplinkUdp>;
45
+ }
46
+ export declare function fakeUplink(options?: FakeUplinkOptions): FakeUplink;
@@ -0,0 +1,25 @@
1
+ import type { TransportCall, TransportReply } from './kernel/net/remote-transport.js';
2
+ import type { HeaderList, RealmRedirectHop, RealmTransport, RealmTransportExit, RealmTransportRequest, RealmTransportResponse, RealmTransportTraits, RealmWebSocket, RealmWebSocketRequest } from './kernel/net/transport.js';
3
+ import { type WebSocketConstructor } from './websocket-transport.js';
4
+ export type { HeaderList, RealmRedirectHop as NetworkRedirectHop, RealmTransport as NetworkTransport, RealmTransportExit as NetworkExit, RealmTransportRequest as NetworkRequest, RealmTransportResponse as NetworkResponse, RealmTransportTraits as NetworkTraits, RealmWebSocket as NetworkWebSocket, RealmWebSocketRequest as NetworkWebSocketRequest, };
5
+ export interface FetchTransportOptions {
6
+ fetch?: typeof globalThis.fetch;
7
+ maxRequestBody?: number;
8
+ hint?: string;
9
+ bodyIdleMs?: number;
10
+ webSocket?: boolean | WebSocketConstructor;
11
+ webSocketHeaders?: boolean;
12
+ redirect?: 'follow' | 'manual';
13
+ }
14
+ export declare const SEND_BUFFER: number;
15
+ export declare function fetchTransport(options?: FetchTransportOptions): RealmTransport;
16
+ export interface TransportPeer {
17
+ postMessage(message: TransportReply, transfer?: Transferable[]): void;
18
+ }
19
+ export interface TransportServer {
20
+ answer(call: TransportCall): void;
21
+ close(): void;
22
+ }
23
+ export declare function serveTransport(peer: TransportPeer, transport: RealmTransport, { closeWaitMs }?: {
24
+ closeWaitMs?: number;
25
+ }): TransportServer;
@@ -0,0 +1,86 @@
1
+ import type { KernelFs } from './fs/types.js';
2
+ import { type Cred } from './kernel/cred.js';
3
+ export declare const PASSWD = "/etc/passwd";
4
+ export declare const GROUP = "/etc/group";
5
+ export declare const DEFAULT_PASSWD = "root:x:0:0:root:/root:/bin/bash\nnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin\n";
6
+ export declare const DEFAULT_GROUP = "root:x:0:\nsudo:x:27:\nusers:x:100:\nnogroup:x:65534:\n";
7
+ export declare const SYSTEM_PNPM_HOME = "/usr/local/share/pnpm";
8
+ export declare const PNPM_CONFIG = "minimumReleaseAge: 1440\n";
9
+ export interface Account {
10
+ name: string;
11
+ uid: number;
12
+ gid: number;
13
+ home: string;
14
+ shell: string;
15
+ groups: number[];
16
+ umask?: number;
17
+ }
18
+ export interface AddUser {
19
+ name: string;
20
+ home?: string;
21
+ groups?: string[];
22
+ umask?: number;
23
+ homeGroup?: string;
24
+ homeMode?: number;
25
+ }
26
+ export interface Group {
27
+ name: string;
28
+ gid: number;
29
+ members: string[];
30
+ }
31
+ export interface RemoveUser {
32
+ keepHome?: boolean;
33
+ }
34
+ interface PasswdRow {
35
+ name: string;
36
+ uid: number;
37
+ gid: number;
38
+ gecos: string;
39
+ home: string;
40
+ shell: string;
41
+ }
42
+ interface GroupRow {
43
+ name: string;
44
+ gid: number;
45
+ members: string[];
46
+ }
47
+ type Rows<T> = Array<T | string>;
48
+ export declare function parsePasswd(text: string): Rows<PasswdRow>;
49
+ export declare function parseGroup(text: string): Rows<GroupRow>;
50
+ export declare function credOf(account: Account): Cred;
51
+ export declare function pnpmHomeOf(account: Account, system?: string): string;
52
+ export declare function userEnv(account: Account, system?: string): Record<string, string>;
53
+ export declare class UserDb {
54
+ private readonly fs;
55
+ private readonly owners;
56
+ private readonly umasks;
57
+ private writing;
58
+ private stable;
59
+ private commits;
60
+ constructor(fs: KernelFs, owners?: boolean);
61
+ private stampHome;
62
+ private umaskFor;
63
+ private realDir;
64
+ private read;
65
+ private texts;
66
+ private tables;
67
+ private provision;
68
+ private commit;
69
+ private serial;
70
+ ensure(): Promise<void>;
71
+ private account;
72
+ lookup(user: string | number): Promise<Account | undefined>;
73
+ ttyGroup(): Promise<number | undefined>;
74
+ lookupTerminal(user: string | number): Promise<{
75
+ account: Account;
76
+ tty: number | undefined;
77
+ } | undefined>;
78
+ list(): Promise<Account[]>;
79
+ add(options: AddUser): Promise<Account>;
80
+ groups(): Promise<Group[]>;
81
+ addMember(group: string, user: string): Promise<Group>;
82
+ removeMember(group: string, user: string): Promise<Group>;
83
+ private member;
84
+ remove(name: string, options?: RemoveUser): Promise<boolean>;
85
+ }
86
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare const KERNEL_VERSION: string;
2
+ export declare const OS_RELEASE = "6.0.0-slicc";
3
+ export declare function procVersion(): string;
@@ -0,0 +1,12 @@
1
+ import type { RealmWebSocket, RealmWebSocketRequest } from './kernel/net/transport.js';
2
+ export interface WebSocketLike {
3
+ binaryType: string;
4
+ readonly protocol: string;
5
+ readonly bufferedAmount: number;
6
+ send(data: string | ArrayBufferView): void;
7
+ close(code?: number, reason?: string): void;
8
+ addEventListener(type: string, listener: (event: never) => void): void;
9
+ }
10
+ export type WebSocketConstructor = new (url: string, init?: unknown) => WebSocketLike;
11
+ export declare function sendableClose(code?: number): number;
12
+ export declare function openWebSocket(Socket: WebSocketConstructor, request: RealmWebSocketRequest, withHeaders: boolean): Promise<RealmWebSocket>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-ecoverse/slicc-kernel",
3
- "version": "1.102.6",
3
+ "version": "1.103.0",
4
4
  "description": "SLICC's wasm-realm kernel: run Emscripten programs in the browser against OPFS, with fork, spawn, pipes and waitpid",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",
@@ -21,12 +21,28 @@
21
21
  "access": "public",
22
22
  "provenance": true
23
23
  },
24
+ "types": "./dist/types/index.d.ts",
24
25
  "exports": {
25
- ".": "./dist/index.js",
26
- "./node": "./dist/node.js",
27
- "./driver": "./dist/driver.js",
28
- "./testing": "./dist/testing.js",
29
- "./meta": "./dist/meta.js"
26
+ ".": {
27
+ "types": "./dist/types/index.d.ts",
28
+ "default": "./dist/index.js"
29
+ },
30
+ "./node": {
31
+ "types": "./dist/types/node.d.ts",
32
+ "default": "./dist/node.js"
33
+ },
34
+ "./driver": {
35
+ "types": "./dist/types/driver.d.ts",
36
+ "default": "./dist/driver.js"
37
+ },
38
+ "./testing": {
39
+ "types": "./dist/types/testing.d.ts",
40
+ "default": "./dist/testing.js"
41
+ },
42
+ "./meta": {
43
+ "types": "./dist/types/meta.d.ts",
44
+ "default": "./dist/meta.js"
45
+ }
30
46
  },
31
47
  "files": [
32
48
  "dist"