@secure-exec/core 0.2.1 → 0.3.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/README.md +5 -5
  2. package/dist/binary.d.ts +4 -0
  3. package/dist/binary.js +25 -0
  4. package/dist/bytes.d.ts +2 -0
  5. package/dist/bytes.js +6 -0
  6. package/dist/callbacks.d.ts +41 -0
  7. package/dist/callbacks.js +94 -0
  8. package/dist/cargo.d.ts +2 -0
  9. package/dist/cargo.js +142 -0
  10. package/dist/correlation.d.ts +10 -0
  11. package/dist/correlation.js +49 -0
  12. package/dist/descriptors.d.ts +34 -0
  13. package/dist/descriptors.js +37 -0
  14. package/dist/event-buffer.d.ts +90 -0
  15. package/dist/event-buffer.js +313 -0
  16. package/dist/ext.d.ts +7 -0
  17. package/dist/ext.js +13 -0
  18. package/dist/filesystem.d.ts +41 -0
  19. package/dist/filesystem.js +70 -0
  20. package/dist/frame-payload-codec.d.ts +8 -0
  21. package/dist/frame-payload-codec.js +14 -0
  22. package/dist/frame-rpc.d.ts +38 -0
  23. package/dist/frame-rpc.js +73 -0
  24. package/dist/frame-stream.d.ts +27 -0
  25. package/dist/frame-stream.js +99 -0
  26. package/dist/framing.d.ts +7 -0
  27. package/dist/framing.js +22 -0
  28. package/dist/generated/AcpLimitsConfig.d.ts +4 -0
  29. package/dist/generated/AcpLimitsConfig.js +2 -0
  30. package/dist/generated/CreateVmConfig.d.ts +19 -0
  31. package/dist/generated/FsPermissionRule.d.ts +6 -0
  32. package/dist/generated/FsPermissionRuleSet.d.ts +6 -0
  33. package/dist/generated/FsPermissionRuleSet.js +1 -0
  34. package/dist/generated/FsPermissionScope.d.ts +3 -0
  35. package/dist/generated/FsPermissionScope.js +1 -0
  36. package/dist/generated/HttpLimitsConfig.d.ts +3 -0
  37. package/dist/generated/HttpLimitsConfig.js +2 -0
  38. package/dist/generated/JsModuleResolution.d.ts +1 -0
  39. package/dist/generated/JsModuleResolution.js +2 -0
  40. package/dist/generated/JsRuntimeConfig.d.ts +26 -0
  41. package/dist/generated/JsRuntimeConfig.js +1 -0
  42. package/dist/generated/JsRuntimeLimitsConfig.d.ts +7 -0
  43. package/dist/generated/JsRuntimeLimitsConfig.js +2 -0
  44. package/dist/generated/JsRuntimePlatform.d.ts +1 -0
  45. package/dist/generated/JsRuntimePlatform.js +2 -0
  46. package/dist/generated/MountPluginDescriptor.d.ts +4 -0
  47. package/dist/generated/MountPluginDescriptor.js +2 -0
  48. package/dist/generated/NativeRootFilesystemConfig.d.ts +5 -0
  49. package/dist/generated/NativeRootFilesystemConfig.js +1 -0
  50. package/dist/generated/PatternPermissionRule.d.ts +6 -0
  51. package/dist/generated/PatternPermissionRule.js +1 -0
  52. package/dist/generated/PatternPermissionRuleSet.d.ts +6 -0
  53. package/dist/generated/PatternPermissionRuleSet.js +1 -0
  54. package/dist/generated/PatternPermissionScope.d.ts +3 -0
  55. package/dist/generated/PatternPermissionScope.js +1 -0
  56. package/dist/generated/PermissionMode.d.ts +1 -0
  57. package/dist/generated/PermissionMode.js +2 -0
  58. package/dist/generated/PermissionsPolicy.d.ts +10 -0
  59. package/dist/generated/PermissionsPolicy.js +1 -0
  60. package/dist/generated/PluginLimitsConfig.d.ts +4 -0
  61. package/dist/generated/PluginLimitsConfig.js +2 -0
  62. package/dist/generated/PythonLimitsConfig.d.ts +5 -0
  63. package/dist/generated/PythonLimitsConfig.js +2 -0
  64. package/dist/generated/ResourceLimitsConfig.d.ts +22 -0
  65. package/dist/generated/ResourceLimitsConfig.js +2 -0
  66. package/dist/generated/RootFilesystemConfig.d.ts +9 -0
  67. package/dist/generated/RootFilesystemConfig.js +1 -0
  68. package/dist/generated/RootFilesystemEntry.d.ts +13 -0
  69. package/dist/generated/RootFilesystemEntry.js +1 -0
  70. package/dist/generated/RootFilesystemEntryEncoding.d.ts +1 -0
  71. package/dist/generated/RootFilesystemEntryEncoding.js +2 -0
  72. package/dist/generated/RootFilesystemEntryKind.d.ts +1 -0
  73. package/dist/generated/RootFilesystemEntryKind.js +2 -0
  74. package/dist/generated/RootFilesystemLowerDescriptor.d.ts +7 -0
  75. package/dist/generated/RootFilesystemLowerDescriptor.js +1 -0
  76. package/dist/generated/RootFilesystemMode.d.ts +1 -0
  77. package/dist/generated/RootFilesystemMode.js +2 -0
  78. package/dist/generated/ToolLimitsConfig.d.ts +10 -0
  79. package/dist/generated/ToolLimitsConfig.js +2 -0
  80. package/dist/generated/VmDnsConfig.d.ts +6 -0
  81. package/dist/generated/VmDnsConfig.js +2 -0
  82. package/dist/generated/VmLimitsConfig.d.ts +18 -0
  83. package/dist/generated/VmLimitsConfig.js +1 -0
  84. package/dist/generated/VmListenPolicyConfig.d.ts +5 -0
  85. package/dist/generated/VmListenPolicyConfig.js +2 -0
  86. package/dist/generated/WasmLimitsConfig.d.ts +5 -0
  87. package/dist/generated/WasmLimitsConfig.js +2 -0
  88. package/dist/generated-protocol.d.ts +1037 -0
  89. package/dist/generated-protocol.js +2887 -0
  90. package/dist/index.d.ts +24 -62
  91. package/dist/index.js +24 -53
  92. package/dist/json.d.ts +2 -0
  93. package/dist/json.js +20 -0
  94. package/dist/kernel-proxy.d.ts +149 -0
  95. package/dist/kernel-proxy.js +1733 -0
  96. package/dist/native-client.d.ts +41 -0
  97. package/dist/native-client.js +124 -0
  98. package/dist/node-runtime.d.ts +443 -0
  99. package/dist/node-runtime.js +569 -0
  100. package/dist/numbers.d.ts +1 -0
  101. package/dist/numbers.js +8 -0
  102. package/dist/ownership.d.ts +18 -0
  103. package/dist/ownership.js +77 -0
  104. package/dist/permissions.d.ts +29 -0
  105. package/dist/permissions.js +68 -0
  106. package/dist/process.d.ts +35 -0
  107. package/dist/process.js +125 -0
  108. package/dist/protocol-client.d.ts +46 -0
  109. package/dist/protocol-client.js +180 -0
  110. package/dist/protocol-frames.d.ts +68 -0
  111. package/dist/protocol-frames.js +139 -0
  112. package/dist/protocol-maps.d.ts +28 -0
  113. package/dist/protocol-maps.js +217 -0
  114. package/dist/protocol-schema.d.ts +10 -0
  115. package/dist/protocol-schema.js +11 -0
  116. package/dist/request-payloads.d.ts +137 -0
  117. package/dist/request-payloads.js +210 -0
  118. package/dist/response-payloads.d.ts +107 -0
  119. package/dist/response-payloads.js +161 -0
  120. package/dist/sidecar-client.d.ts +242 -0
  121. package/dist/sidecar-client.js +797 -0
  122. package/dist/state.d.ts +40 -0
  123. package/dist/state.js +44 -0
  124. package/dist/test-runtime.d.ts +526 -0
  125. package/dist/test-runtime.js +2119 -0
  126. package/dist/vm-config.d.ts +31 -0
  127. package/dist/vm-config.js +1 -0
  128. package/fixtures/alpine-defaults.json +520 -0
  129. package/fixtures/base-filesystem.json +528 -0
  130. package/package.json +193 -115
  131. package/LICENSE +0 -191
  132. package/dist/bridge-setup.d.ts +0 -6
  133. package/dist/bridge-setup.js +0 -9
  134. package/dist/esm-compiler.d.ts +0 -18
  135. package/dist/esm-compiler.js +0 -72
  136. package/dist/fs-helpers.d.ts +0 -23
  137. package/dist/fs-helpers.js +0 -41
  138. package/dist/generated/isolate-runtime.d.ts +0 -19
  139. package/dist/generated/isolate-runtime.js +0 -21
  140. package/dist/generated/polyfills.d.ts +0 -82
  141. package/dist/generated/polyfills.js +0 -82
  142. package/dist/isolate-runtime/apply-custom-global-policy.js +0 -53
  143. package/dist/isolate-runtime/apply-timing-mitigation-freeze.js +0 -130
  144. package/dist/isolate-runtime/apply-timing-mitigation-off.js +0 -14
  145. package/dist/isolate-runtime/bridge-attach.js +0 -29
  146. package/dist/isolate-runtime/bridge-initial-globals.js +0 -385
  147. package/dist/isolate-runtime/eval-script-result.js +0 -8
  148. package/dist/isolate-runtime/global-exposure-helpers.js +0 -36
  149. package/dist/isolate-runtime/init-commonjs-module-globals.js +0 -28
  150. package/dist/isolate-runtime/override-process-cwd.js +0 -8
  151. package/dist/isolate-runtime/override-process-env.js +0 -8
  152. package/dist/isolate-runtime/require-setup.js +0 -4153
  153. package/dist/isolate-runtime/set-commonjs-file-globals.js +0 -36
  154. package/dist/isolate-runtime/set-stdin-data.js +0 -10
  155. package/dist/isolate-runtime/setup-dynamic-import.js +0 -123
  156. package/dist/isolate-runtime/setup-fs-facade.js +0 -87
  157. package/dist/kernel/command-registry.d.ts +0 -44
  158. package/dist/kernel/command-registry.js +0 -114
  159. package/dist/kernel/device-backend.d.ts +0 -14
  160. package/dist/kernel/device-backend.js +0 -251
  161. package/dist/kernel/device-layer.d.ts +0 -12
  162. package/dist/kernel/device-layer.js +0 -271
  163. package/dist/kernel/dns-cache.d.ts +0 -29
  164. package/dist/kernel/dns-cache.js +0 -52
  165. package/dist/kernel/fd-table.d.ts +0 -84
  166. package/dist/kernel/fd-table.js +0 -278
  167. package/dist/kernel/file-lock.d.ts +0 -34
  168. package/dist/kernel/file-lock.js +0 -122
  169. package/dist/kernel/host-adapter.d.ts +0 -50
  170. package/dist/kernel/host-adapter.js +0 -8
  171. package/dist/kernel/index.d.ts +0 -36
  172. package/dist/kernel/index.js +0 -34
  173. package/dist/kernel/kernel.d.ts +0 -9
  174. package/dist/kernel/kernel.js +0 -1415
  175. package/dist/kernel/mount-table.d.ts +0 -75
  176. package/dist/kernel/mount-table.js +0 -353
  177. package/dist/kernel/permissions.d.ts +0 -36
  178. package/dist/kernel/permissions.js +0 -150
  179. package/dist/kernel/pipe-manager.d.ts +0 -64
  180. package/dist/kernel/pipe-manager.js +0 -267
  181. package/dist/kernel/proc-backend.d.ts +0 -30
  182. package/dist/kernel/proc-backend.js +0 -428
  183. package/dist/kernel/proc-layer.d.ts +0 -11
  184. package/dist/kernel/proc-layer.js +0 -507
  185. package/dist/kernel/process-table.d.ts +0 -126
  186. package/dist/kernel/process-table.js +0 -651
  187. package/dist/kernel/pty.d.ts +0 -109
  188. package/dist/kernel/pty.js +0 -552
  189. package/dist/kernel/socket-table.d.ts +0 -312
  190. package/dist/kernel/socket-table.js +0 -1188
  191. package/dist/kernel/timer-table.d.ts +0 -54
  192. package/dist/kernel/timer-table.js +0 -108
  193. package/dist/kernel/types.d.ts +0 -541
  194. package/dist/kernel/types.js +0 -98
  195. package/dist/kernel/user.d.ts +0 -29
  196. package/dist/kernel/user.js +0 -35
  197. package/dist/kernel/vfs.d.ts +0 -82
  198. package/dist/kernel/vfs.js +0 -25
  199. package/dist/kernel/wait.d.ts +0 -45
  200. package/dist/kernel/wait.js +0 -112
  201. package/dist/kernel/wstatus.d.ts +0 -21
  202. package/dist/kernel/wstatus.js +0 -33
  203. package/dist/module-resolver.d.ts +0 -29
  204. package/dist/module-resolver.js +0 -314
  205. package/dist/package-bundler.d.ts +0 -41
  206. package/dist/package-bundler.js +0 -497
  207. package/dist/runtime-driver.d.ts +0 -66
  208. package/dist/shared/api-types.d.ts +0 -83
  209. package/dist/shared/bridge-contract.d.ts +0 -772
  210. package/dist/shared/bridge-contract.js +0 -169
  211. package/dist/shared/console-formatter.d.ts +0 -22
  212. package/dist/shared/console-formatter.js +0 -161
  213. package/dist/shared/constants.d.ts +0 -3
  214. package/dist/shared/constants.js +0 -3
  215. package/dist/shared/errors.d.ts +0 -16
  216. package/dist/shared/errors.js +0 -21
  217. package/dist/shared/esm-utils.d.ts +0 -28
  218. package/dist/shared/esm-utils.js +0 -97
  219. package/dist/shared/global-exposure.d.ts +0 -38
  220. package/dist/shared/global-exposure.js +0 -876
  221. package/dist/shared/in-memory-fs.d.ts +0 -16
  222. package/dist/shared/in-memory-fs.js +0 -115
  223. package/dist/shared/permissions.d.ts +0 -36
  224. package/dist/shared/permissions.js +0 -314
  225. package/dist/shared/require-setup.d.ts +0 -6
  226. package/dist/shared/require-setup.js +0 -9
  227. package/dist/test/block-store-conformance.d.ts +0 -34
  228. package/dist/test/block-store-conformance.js +0 -251
  229. package/dist/test/metadata-store-conformance.d.ts +0 -37
  230. package/dist/test/metadata-store-conformance.js +0 -646
  231. package/dist/test/vfs-conformance.d.ts +0 -65
  232. package/dist/test/vfs-conformance.js +0 -842
  233. package/dist/types.d.ts +0 -98
  234. package/dist/types.js +0 -6
  235. package/dist/vfs/chunked-vfs.d.ts +0 -66
  236. package/dist/vfs/chunked-vfs.js +0 -1290
  237. package/dist/vfs/host-block-store.d.ts +0 -19
  238. package/dist/vfs/host-block-store.js +0 -97
  239. package/dist/vfs/memory-block-store.d.ts +0 -16
  240. package/dist/vfs/memory-block-store.js +0 -45
  241. package/dist/vfs/memory-metadata.d.ts +0 -75
  242. package/dist/vfs/memory-metadata.js +0 -528
  243. package/dist/vfs/sqlite-metadata.d.ts +0 -91
  244. package/dist/vfs/sqlite-metadata.js +0 -582
  245. package/dist/vfs/types.d.ts +0 -210
  246. package/dist/vfs/types.js +0 -8
  247. /package/dist/{runtime-driver.js → generated/CreateVmConfig.js} +0 -0
  248. /package/dist/{shared/api-types.js → generated/FsPermissionRule.js} +0 -0
@@ -1,312 +0,0 @@
1
- /**
2
- * Virtual socket table.
3
- *
4
- * Manages kernel-level sockets: create, bind, listen, accept, connect,
5
- * send, recv, close, poll, per-process isolation, and resource limits.
6
- * Loopback connections are routed entirely in-kernel without touching
7
- * the host network stack.
8
- */
9
- import { WaitQueue } from "./wait.js";
10
- import type { NetworkAccessRequest, PermissionCheck } from "./types.js";
11
- import type { ProcessSignalState } from "./types.js";
12
- import type { HostNetworkAdapter, HostSocket, HostListener, HostUdpSocket } from "./host-adapter.js";
13
- import type { VirtualFileSystem } from "./vfs.js";
14
- export declare const AF_INET = 2;
15
- export declare const AF_INET6 = 10;
16
- export declare const AF_UNIX = 1;
17
- export declare const SOCK_STREAM = 1;
18
- export declare const SOCK_DGRAM = 2;
19
- export declare const SOL_SOCKET = 1;
20
- export declare const IPPROTO_TCP = 6;
21
- export declare const SO_REUSEADDR = 2;
22
- export declare const SO_KEEPALIVE = 9;
23
- export declare const SO_RCVBUF = 8;
24
- export declare const SO_SNDBUF = 7;
25
- export declare const TCP_NODELAY = 1;
26
- export declare const MSG_PEEK = 2;
27
- export declare const MSG_DONTWAIT = 64;
28
- export declare const MSG_NOSIGNAL = 16384;
29
- export declare const MAX_DATAGRAM_SIZE = 65535;
30
- export declare const MAX_UDP_QUEUE_DEPTH = 128;
31
- export declare const S_IFSOCK = 49152;
32
- export type InetAddr = {
33
- host: string;
34
- port: number;
35
- };
36
- export type UnixAddr = {
37
- path: string;
38
- };
39
- export type SockAddr = InetAddr | UnixAddr;
40
- export declare function isInetAddr(addr: SockAddr): addr is InetAddr;
41
- export declare function isUnixAddr(addr: SockAddr): addr is UnixAddr;
42
- export interface UdpDatagram {
43
- data: Uint8Array;
44
- srcAddr: SockAddr;
45
- }
46
- /** Canonical string key for a socket address ("host:port" or unix path). */
47
- export declare function addrKey(addr: SockAddr): string;
48
- /** Canonical string key for a socket option ("level:optname"). */
49
- export declare function optKey(level: number, optname: number): string;
50
- export type SocketState = "created" | "bound" | "listening" | "connecting" | "connected" | "read-closed" | "write-closed" | "closed";
51
- export interface KernelSocket {
52
- readonly id: number;
53
- readonly domain: number;
54
- readonly type: number;
55
- readonly protocol: number;
56
- state: SocketState;
57
- nonBlocking: boolean;
58
- localAddr?: SockAddr;
59
- remoteAddr?: SockAddr;
60
- options: Map<string, number>;
61
- readonly pid: number;
62
- readBuffer: Uint8Array[];
63
- readWaiters: WaitQueue;
64
- backlog: number[];
65
- backlogLimit: number;
66
- acceptWaiters: WaitQueue;
67
- /** Peer socket ID for connected loopback/socketpair sockets. */
68
- peerId?: number;
69
- /** True when the peer has shut down its write side (half-close EOF). */
70
- peerWriteClosed?: boolean;
71
- /** True when connected via host adapter (external network). */
72
- external?: boolean;
73
- /** Host socket for external connections (data relay). */
74
- hostSocket?: HostSocket;
75
- /** Host listener for external-facing server sockets. */
76
- hostListener?: HostListener;
77
- /** Queued datagrams for UDP sockets (preserves message boundaries). */
78
- datagramQueue: UdpDatagram[];
79
- /** Host UDP socket for external datagram routing. */
80
- hostUdpSocket?: HostUdpSocket;
81
- /** Tracks whether bind() was originally requested with port 0. */
82
- requestedEphemeralPort?: boolean;
83
- }
84
- type BlockingSocketWait = {
85
- block: true;
86
- pid: number;
87
- };
88
- export declare class SocketTable {
89
- private sockets;
90
- private nextSocketId;
91
- private readonly maxSockets;
92
- private readonly networkCheck?;
93
- private readonly hostAdapter?;
94
- private readonly vfs?;
95
- private readonly getSignalState?;
96
- private readonly processExists?;
97
- /** Bound/listening address → socket ID. Used for EADDRINUSE and TCP routing. */
98
- private listeners;
99
- /** Bound UDP address → socket ID. Separate from TCP listeners. */
100
- private udpBindings;
101
- constructor(options?: {
102
- maxSockets?: number;
103
- networkCheck?: PermissionCheck<NetworkAccessRequest>;
104
- hostAdapter?: HostNetworkAdapter;
105
- vfs?: VirtualFileSystem;
106
- getSignalState?: (pid: number) => ProcessSignalState;
107
- processExists?: (pid: number) => boolean;
108
- });
109
- hasHostNetworkAdapter(): boolean;
110
- /**
111
- * Create a new socket owned by the given process.
112
- * Returns the kernel socket ID.
113
- */
114
- create(domain: number, type: number, protocol: number, pid: number): number;
115
- /**
116
- * Get a socket by ID. Returns null if not found.
117
- */
118
- get(socketId: number): KernelSocket | null;
119
- /**
120
- * Check network permission for an operation. Throws EACCES if the
121
- * configured policy denies the request or if no policy is set
122
- * (deny-by-default). Loopback callers should skip this method.
123
- */
124
- checkNetworkPermission(op: NetworkAccessRequest["op"], addr?: SockAddr): void;
125
- /**
126
- * Bind a socket to an address. Transitions to 'bound' and registers
127
- * the address in the listeners map for port reservation.
128
- *
129
- * For Unix domain sockets (UnixAddr), creates a socket file in the
130
- * VFS if one is configured.
131
- */
132
- bind(socketId: number, addr: SockAddr, options?: {
133
- mode?: number;
134
- }): Promise<void>;
135
- /**
136
- * Mark a bound socket as listening. The socket must already be bound.
137
- * Checks network permission before transitioning.
138
- *
139
- * When `external` is true and a host adapter is available, creates a
140
- * real TCP listener via `hostAdapter.tcpListen()` and starts an accept
141
- * pump that feeds incoming connections into the kernel backlog.
142
- */
143
- listen(socketId: number, backlogSize?: number, options?: {
144
- external?: boolean;
145
- }): Promise<void>;
146
- /**
147
- * Accept a pending connection from a listening socket's backlog.
148
- * Returns the connected socket ID, or null if backlog is empty (EAGAIN).
149
- */
150
- accept(socketId: number): number | null;
151
- accept(socketId: number, options: BlockingSocketWait): Promise<number | null>;
152
- /**
153
- * Find a listening socket that matches the given address.
154
- * Checks exact match first, then wildcard (0.0.0.0 / ::).
155
- */
156
- findListener(addr: SockAddr): KernelSocket | null;
157
- /**
158
- * Shut down part of a full-duplex connection.
159
- * - 'write': peer recv() gets EOF, local send() returns EPIPE
160
- * - 'read': local recv() returns EOF immediately
161
- * - 'both': equivalent to shutdown('read') + shutdown('write')
162
- */
163
- shutdown(socketId: number, how: "read" | "write" | "both"): void;
164
- /** Signal EOF to the peer by waking their readWaiters. */
165
- private shutdownWrite;
166
- /** Discard unread data and mark the read side as closed. */
167
- private shutdownRead;
168
- /**
169
- * Create a pair of connected sockets atomically (for IPC).
170
- * Returns [socketId1, socketId2]. Both are pre-connected with
171
- * peerId linking, so data written to one appears in the other's
172
- * readBuffer via send/recv.
173
- */
174
- socketpair(domain: number, type: number, protocol: number, pid: number): [number, number];
175
- /**
176
- * Set a socket option. Stores the value keyed by "level:optname".
177
- */
178
- setsockopt(socketId: number, level: number, optname: number, optval: number): void;
179
- /** Toggle non-blocking behavior for an existing socket. */
180
- setNonBlocking(socketId: number, nonBlocking: boolean): void;
181
- /**
182
- * Get a socket option. Returns the value, or undefined if not set.
183
- */
184
- getsockopt(socketId: number, level: number, optname: number): number | undefined;
185
- /** Get the bound/local address for a socket. */
186
- getLocalAddr(socketId: number): SockAddr;
187
- /** Get the connected peer address for a socket. */
188
- getRemoteAddr(socketId: number): SockAddr;
189
- /**
190
- * Connect a socket to a remote address. For loopback (addr matches a
191
- * kernel listener), creates a paired server-side socket and queues it
192
- * in the listener's backlog — loopback is always allowed regardless of
193
- * permission policy. External addresses are checked against the network
194
- * permission policy and routed through the host adapter.
195
- */
196
- connect(socketId: number, addr: SockAddr): Promise<void>;
197
- /**
198
- * Send data to the connected peer. Writes to the peer's readBuffer
199
- * and wakes one pending reader. Returns bytes written.
200
- *
201
- * Flags: MSG_NOSIGNAL suppresses SIGPIPE — returns EPIPE error
202
- * instead of raising SIGPIPE on a broken connection.
203
- *
204
- * For external sockets, checks network permission before sending.
205
- */
206
- send(socketId: number, data: Uint8Array, flags?: number): number;
207
- /**
208
- * Receive data from the socket's readBuffer. Returns null if no data
209
- * is available and the socket is non-blocking, or if the peer has
210
- * closed (EOF).
211
- *
212
- * Flags:
213
- * - MSG_PEEK: read data without consuming it from the buffer
214
- * - MSG_DONTWAIT: return EAGAIN if no data (even on blocking socket)
215
- */
216
- recv(socketId: number, maxBytes: number, flags?: number): Uint8Array | null;
217
- recv(socketId: number, maxBytes: number, flags: number, options: BlockingSocketWait): Promise<Uint8Array | null>;
218
- /**
219
- * Send a datagram to a specific address (UDP only).
220
- * For loopback, delivers to the kernel-bound UDP socket. For external
221
- * addresses, routes through the host adapter (fire-and-forget). Sends
222
- * to unbound ports are silently dropped (UDP semantics).
223
- *
224
- * Returns bytes "sent" (always data.length for UDP — drops are silent).
225
- */
226
- sendTo(socketId: number, data: Uint8Array, flags: number, destAddr: SockAddr): number;
227
- private getUdpSourceAddr;
228
- /**
229
- * Receive a datagram from a UDP socket. Returns the datagram and the
230
- * source address, or null if no datagram is queued.
231
- *
232
- * Message boundaries are preserved: each sendTo produces exactly one
233
- * recvFrom result. If the datagram exceeds maxBytes, excess is
234
- * discarded (UDP truncation semantics).
235
- *
236
- * Flags: MSG_PEEK reads without consuming, MSG_DONTWAIT throws EAGAIN.
237
- */
238
- recvFrom(socketId: number, maxBytes: number, flags?: number): {
239
- data: Uint8Array;
240
- srcAddr: SockAddr;
241
- } | null;
242
- /**
243
- * Set up external UDP routing for a bound datagram socket.
244
- * Creates a host UDP socket via the host adapter and starts a recv
245
- * pump that feeds incoming datagrams into the kernel datagramQueue.
246
- */
247
- bindExternalUdp(socketId: number): Promise<void>;
248
- /**
249
- * Close a socket. The caller must own the socket (per-process isolation).
250
- * Wakes all pending waiters and frees resources.
251
- */
252
- close(socketId: number, pid: number): void;
253
- /**
254
- * Poll a socket for readability, writability, and hangup.
255
- */
256
- poll(socketId: number): {
257
- readable: boolean;
258
- writable: boolean;
259
- hangup: boolean;
260
- };
261
- /**
262
- * Clean up all sockets owned by a process (called on process exit).
263
- */
264
- closeAllForProcess(pid: number): void;
265
- /**
266
- * Clean up all sockets (called on kernel dispose).
267
- */
268
- disposeAll(): void;
269
- /** Number of open sockets. */
270
- get size(): number;
271
- /** Create a socket file in the VFS with S_IFSOCK mode. */
272
- private createSocketFile;
273
- private requireSocket;
274
- /** Wait for an inbound connection, restarting when SA_RESTART applies. */
275
- private acceptBlocking;
276
- private destroySocket;
277
- /** Background pump: reads from host socket and feeds kernel readBuffer. */
278
- private startReadPump;
279
- /** Complete a non-blocking external connect in the background. */
280
- private startExternalConnect;
281
- /** Background pump: accepts incoming connections from host listener and feeds kernel backlog. */
282
- private startAcceptPump;
283
- /** Look up a listening socket by exact address key. */
284
- private getListeningSocket;
285
- /** Replay stored socket options onto a host-backed connection. */
286
- private applySocketOptionsToHostSocket;
287
- /** Best-effort option forwarding for host-backed sockets. */
288
- private applySocketOptionToHostSocket;
289
- /** Peek up to maxBytes from a socket's readBuffer without consuming. */
290
- private peekFromBuffer;
291
- /** Consume up to maxBytes from a socket's readBuffer. */
292
- private consumeFromBuffer;
293
- /** Wait for readable data, restarting when SA_RESTART applies. */
294
- private recvBlocking;
295
- /** Check whether recv() could still yield data later instead of EOF. */
296
- private canBlockForRecv;
297
- /** Wait for socket readiness or an interrupting signal. */
298
- private waitForSocketWake;
299
- /** Find a bound UDP socket that matches the given address (exact + wildcard). */
300
- findBoundUdp(addr: SockAddr): KernelSocket | null;
301
- /** Look up a bound UDP socket by exact address key. */
302
- private getBoundUdpSocket;
303
- /** Check if a UDP address conflicts with an existing UDP binding. */
304
- private isUdpAddrInUse;
305
- /** Background pump: receives datagrams from host UDP socket and feeds kernel datagramQueue. */
306
- private startUdpRecvPump;
307
- /** Check if an address conflicts with an existing TCP binding. */
308
- private isAddrInUse;
309
- /** Assign a kernel-managed ephemeral port for bind(port=0). */
310
- private assignEphemeralPort;
311
- }
312
- export {};