@crosshands/platform-windows 0.1.2

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type WindowsLogonIdentity = {
2
+ sid: string;
3
+ logonSessionId: string;
4
+ integrityRid: number;
5
+ };
6
+ export type WindowsPipePeerIdentity = WindowsLogonIdentity & {
7
+ pid: number;
8
+ processStartedAt: string;
9
+ executablePath: string;
10
+ remote: boolean;
11
+ };
12
+ /**
13
+ * This interface is deliberately native-backed. Node's named-pipe API cannot
14
+ * prove the peer token or construct the required logon-SID-only DACL.
15
+ */
16
+ export interface WindowsNamedPipeSecurityBackend {
17
+ currentLogonIdentity(): WindowsLogonIdentity;
18
+ createCurrentLogonSidDacl(logonSid: string): Uint8Array;
19
+ createServer(pipeName: string, securityDescriptor: Uint8Array): unknown;
20
+ inspectClient(serverHandle: unknown): WindowsPipePeerIdentity;
21
+ impersonateClient<T>(serverHandle: unknown, work: () => T): T;
22
+ }
23
+ export declare function verifyWindowsPipePeer(backend: WindowsNamedPipeSecurityBackend, serverHandle: unknown): WindowsPipePeerIdentity;
24
+ export declare function requireWindowsPipeSecurityBackend(backend: WindowsNamedPipeSecurityBackend | undefined): WindowsNamedPipeSecurityBackend;
25
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,oBAAoB,GAAG;IACjC,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IAC3D,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAED;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,oBAAoB,IAAI,oBAAoB,CAAA;IAC5C,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;IACvD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,GAAG,OAAO,CAAA;IACvE,aAAa,CAAC,YAAY,EAAE,OAAO,GAAG,uBAAuB,CAAA;IAC7D,iBAAiB,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;CAC9D;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,+BAA+B,EACxC,YAAY,EAAE,OAAO,GACpB,uBAAuB,CAwBzB;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,+BAA+B,GAAG,SAAS,GACnD,+BAA+B,CAQjC"}
@@ -0,0 +1,27 @@
1
+ import { createComputerError } from '@crosshands/contract';
2
+ export function verifyWindowsPipePeer(backend, serverHandle) {
3
+ const expected = backend.currentLogonIdentity();
4
+ return backend.impersonateClient(serverHandle, () => {
5
+ const peer = backend.inspectClient(serverHandle);
6
+ if (peer.remote) {
7
+ throw createComputerError('session_unavailable', 'Remote named-pipe clients are rejected');
8
+ }
9
+ if (peer.sid !== expected.sid || peer.logonSessionId !== expected.logonSessionId) {
10
+ throw createComputerError('session_unavailable', 'Named-pipe client belongs to another logon identity or session');
11
+ }
12
+ if (peer.integrityRid !== expected.integrityRid) {
13
+ throw createComputerError('unsupported_capability', 'Named-pipe client integrity differs from the broker');
14
+ }
15
+ if (peer.pid <= 0 || peer.executablePath.length === 0 || peer.processStartedAt.length === 0) {
16
+ throw createComputerError('session_unavailable', 'Named-pipe client identity is incomplete');
17
+ }
18
+ return peer;
19
+ });
20
+ }
21
+ export function requireWindowsPipeSecurityBackend(backend) {
22
+ if (backend === undefined) {
23
+ throw createComputerError('unsupported_capability', 'The installed Windows payload has no native named-pipe DACL and peer-token verifier');
24
+ }
25
+ return backend;
26
+ }
27
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../src/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AA2B1D,MAAM,UAAU,qBAAqB,CACnC,OAAwC,EACxC,YAAqB;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAA;IAC/C,OAAO,OAAO,CAAC,iBAAiB,CAAC,YAAY,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAChD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,mBAAmB,CAAC,qBAAqB,EAAE,wCAAwC,CAAC,CAAA;QAC5F,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,KAAK,QAAQ,CAAC,cAAc,EAAE,CAAC;YACjF,MAAM,mBAAmB,CACvB,qBAAqB,EACrB,gEAAgE,CACjE,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,EAAE,CAAC;YAChD,MAAM,mBAAmB,CACvB,wBAAwB,EACxB,qDAAqD,CACtD,CAAA;QACH,CAAC;QACD,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5F,MAAM,mBAAmB,CAAC,qBAAqB,EAAE,0CAA0C,CAAC,CAAA;QAC9F,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,OAAoD;IAEpD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,MAAM,mBAAmB,CACvB,wBAAwB,EACxB,qFAAqF,CACtF,CAAA;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { spawn } from 'node:child_process';
2
+ export declare const WINDOWS_CONTROL_RELAY_RECORD: {
3
+ readonly open: 1;
4
+ readonly data: 2;
5
+ readonly close: 3;
6
+ readonly error: 4;
7
+ readonly ready: 5;
8
+ readonly shutdown: 6;
9
+ };
10
+ export type WindowsControlPeer = {
11
+ pid: number;
12
+ userSid: string;
13
+ logonSid: string;
14
+ logonSessionId: string;
15
+ integrityRid: number;
16
+ windowsSessionId: number;
17
+ processStartedAt: string;
18
+ executablePath: string;
19
+ remote: false;
20
+ };
21
+ export type WindowsControlIdentity = {
22
+ osIdentity: string;
23
+ graphicalSessionId: string;
24
+ };
25
+ export declare function windowsControlIdentity(peer: WindowsControlPeer): WindowsControlIdentity;
26
+ export type WindowsControlRelayRecord = {
27
+ type: number;
28
+ connectionId: bigint;
29
+ payload: Buffer;
30
+ };
31
+ export declare class WindowsControlRelayDecoder {
32
+ #private;
33
+ push(chunk: Buffer): WindowsControlRelayRecord[];
34
+ }
35
+ export declare function encodeWindowsControlRelayRecord(type: number, connectionId: bigint, payload?: Buffer): Buffer;
36
+ export type WindowsControlRelayOptions = {
37
+ helperPath: string;
38
+ helperSha256: string;
39
+ pipeName: string;
40
+ onConnection: (connection: WindowsControlConnection) => void;
41
+ spawnProcess?: typeof spawn;
42
+ };
43
+ export type WindowsRelayControlRequest = {
44
+ requestId: string;
45
+ payload: unknown;
46
+ deadlineAt: number;
47
+ peer: WindowsControlPeer;
48
+ };
49
+ export type WindowsRelayControlServerOptions = {
50
+ relay: Omit<WindowsControlRelayOptions, 'onConnection'>;
51
+ identity: WindowsControlIdentity;
52
+ handler: (request: WindowsRelayControlRequest) => Promise<unknown>;
53
+ createRelay?: (options: WindowsControlRelayOptions) => WindowsControlRelay;
54
+ maxFrameBytes?: number;
55
+ maxFramesPerConnection?: number;
56
+ now?: () => number;
57
+ };
58
+ export interface WindowsControlRelay {
59
+ start(): Promise<void>;
60
+ close(): Promise<void>;
61
+ }
62
+ export type WindowsControlConnection = {
63
+ id: bigint;
64
+ peer: WindowsControlPeer;
65
+ write(payload: Buffer): void;
66
+ close(): void;
67
+ onData(listener: (payload: Buffer) => void): void;
68
+ onClose(listener: () => void): void;
69
+ };
70
+ export declare function verifyWindowsControlRelay(options: WindowsControlRelayOptions): Promise<void>;
71
+ /**
72
+ * Launches the native process that owns the named pipe. Node never creates or
73
+ * accepts a Windows pipe directly: unverified bytes cannot reach the broker.
74
+ */
75
+ export declare class NativeWindowsControlRelay implements WindowsControlRelay {
76
+ #private;
77
+ constructor(options: WindowsControlRelayOptions);
78
+ start(): Promise<void>;
79
+ close(): Promise<void>;
80
+ }
81
+ /**
82
+ * Control-protocol server for Windows. The relay calls onConnection only after
83
+ * native DACL, locality, SID, logon-session, Windows-session, PID and integrity
84
+ * verification. This layer still requires a versioned handshake before it
85
+ * parses a request envelope or invokes the broker handler.
86
+ */
87
+ export declare class WindowsRelayControlServer {
88
+ #private;
89
+ constructor(options: WindowsRelayControlServerOptions);
90
+ get requestCount(): number;
91
+ start(): Promise<void>;
92
+ close(): Promise<void>;
93
+ }
94
+ export declare function createWindowsControlServer(options: WindowsRelayControlServerOptions): WindowsRelayControlServer;
95
+ //# sourceMappingURL=windows-control-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows-control-security.d.ts","sourceRoot":"","sources":["../src/windows-control-security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,432 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { createHash } from 'node:crypto';
3
+ import { lstat, readFile } from 'node:fs/promises';
4
+ import { isAbsolute } from 'node:path';
5
+ import { negotiateVersionHandshake } from '@crosshands/contract';
6
+ import { DEFAULT_MAX_CONTROL_MESSAGE_BYTES, encodeFrame } from '@crosshands/runtime';
7
+ const RELAY_MAGIC = 0x53504858;
8
+ const RELAY_VERSION = 1;
9
+ const HEADER_BYTES = 20;
10
+ const MAX_RELAY_PAYLOAD_BYTES = 4 * 1024 * 1024;
11
+ export const WINDOWS_CONTROL_RELAY_RECORD = {
12
+ open: 1,
13
+ data: 2,
14
+ close: 3,
15
+ error: 4,
16
+ ready: 5,
17
+ shutdown: 6
18
+ };
19
+ export function windowsControlIdentity(peer) {
20
+ return {
21
+ osIdentity: `sid:${peer.userSid}`,
22
+ graphicalSessionId: `logon:${peer.logonSessionId}:session:${peer.windowsSessionId}`
23
+ };
24
+ }
25
+ export class WindowsControlRelayDecoder {
26
+ #buffer = Buffer.alloc(0);
27
+ push(chunk) {
28
+ this.#buffer = Buffer.concat([this.#buffer, chunk]);
29
+ const records = [];
30
+ while (this.#buffer.byteLength >= HEADER_BYTES) {
31
+ if (this.#buffer.readUInt32LE(0) !== RELAY_MAGIC)
32
+ throw new Error('Invalid relay magic');
33
+ if (this.#buffer.readUInt16LE(4) !== RELAY_VERSION)
34
+ throw new Error('Invalid relay version');
35
+ const length = this.#buffer.readUInt32LE(16);
36
+ if (length > MAX_RELAY_PAYLOAD_BYTES)
37
+ throw new Error('Relay payload exceeds limit');
38
+ if (this.#buffer.byteLength < HEADER_BYTES + length)
39
+ break;
40
+ records.push({
41
+ type: this.#buffer.readUInt16LE(6),
42
+ connectionId: this.#buffer.readBigUInt64LE(8),
43
+ payload: this.#buffer.subarray(HEADER_BYTES, HEADER_BYTES + length)
44
+ });
45
+ this.#buffer = this.#buffer.subarray(HEADER_BYTES + length);
46
+ }
47
+ return records;
48
+ }
49
+ }
50
+ export function encodeWindowsControlRelayRecord(type, connectionId, payload = Buffer.alloc(0)) {
51
+ if (payload.byteLength > MAX_RELAY_PAYLOAD_BYTES)
52
+ throw new Error('Relay payload exceeds limit');
53
+ const frame = Buffer.allocUnsafe(HEADER_BYTES + payload.byteLength);
54
+ frame.writeUInt32LE(RELAY_MAGIC, 0);
55
+ frame.writeUInt16LE(RELAY_VERSION, 4);
56
+ frame.writeUInt16LE(type, 6);
57
+ frame.writeBigUInt64LE(connectionId, 8);
58
+ frame.writeUInt32LE(payload.byteLength, 16);
59
+ payload.copy(frame, HEADER_BYTES);
60
+ return frame;
61
+ }
62
+ function parsePeer(payload) {
63
+ const raw = JSON.parse(payload.toString('utf8'));
64
+ if (!Number.isSafeInteger(raw.pid) ||
65
+ (raw.pid ?? 0) <= 0 ||
66
+ typeof raw.userSid !== 'string' ||
67
+ typeof raw.logonSid !== 'string' ||
68
+ typeof raw.logonSessionId !== 'string' ||
69
+ !Number.isSafeInteger(raw.integrityRid) ||
70
+ !Number.isSafeInteger(raw.windowsSessionId) ||
71
+ typeof raw.processStartedAt !== 'string' ||
72
+ typeof raw.executablePath !== 'string' ||
73
+ raw.remote !== false) {
74
+ throw new Error('Native relay returned incomplete peer identity');
75
+ }
76
+ return raw;
77
+ }
78
+ export async function verifyWindowsControlRelay(options) {
79
+ if (!isAbsolute(options.helperPath))
80
+ throw new Error('Windows relay path must be absolute');
81
+ if (!/^\\\\\.\\pipe\\crosshands-[a-f0-9]{24}$/.test(options.pipeName)) {
82
+ throw new Error('Windows relay pipe name is not a CrossHands session endpoint');
83
+ }
84
+ if (!/^[a-f0-9]{64}$/.test(options.helperSha256)) {
85
+ throw new Error('Windows relay SHA-256 is malformed');
86
+ }
87
+ const info = await lstat(options.helperPath);
88
+ if (!info.isFile() || info.isSymbolicLink()) {
89
+ throw new Error('Windows relay payload is not a regular package file');
90
+ }
91
+ const bytes = await readFile(options.helperPath);
92
+ const actual = createHash('sha256').update(bytes).digest('hex');
93
+ if (actual !== options.helperSha256)
94
+ throw new Error('Windows relay payload hash mismatch');
95
+ }
96
+ /**
97
+ * Launches the native process that owns the named pipe. Node never creates or
98
+ * accepts a Windows pipe directly: unverified bytes cannot reach the broker.
99
+ */
100
+ export class NativeWindowsControlRelay {
101
+ #options;
102
+ #connections = new Map();
103
+ #child;
104
+ #ready;
105
+ constructor(options) {
106
+ this.#options = options;
107
+ }
108
+ async start() {
109
+ if (this.#child !== undefined)
110
+ return this.#ready;
111
+ if (process.platform !== 'win32')
112
+ throw new Error('Windows relay can only run on Windows');
113
+ await verifyWindowsControlRelay(this.#options);
114
+ const child = (this.#options.spawnProcess ?? spawn)(this.#options.helperPath, ['--pipe', this.#options.pipeName, '--broker-pid', String(process.pid)], {
115
+ cwd: undefined,
116
+ windowsHide: true,
117
+ stdio: ['pipe', 'pipe', 'pipe'],
118
+ env: {
119
+ SystemRoot: process.env.SystemRoot ?? process.env.SYSTEMROOT ?? 'C:\\Windows',
120
+ WINDIR: process.env.WINDIR ?? process.env.SystemRoot ?? 'C:\\Windows'
121
+ }
122
+ });
123
+ this.#child = child;
124
+ const decoder = new WindowsControlRelayDecoder();
125
+ this.#ready = new Promise((resolve, reject) => {
126
+ let settled = false;
127
+ let stderrBytes = 0;
128
+ const fail = (error) => {
129
+ if (!settled) {
130
+ settled = true;
131
+ reject(error);
132
+ }
133
+ this.#failAll();
134
+ };
135
+ child.once('error', (cause) => fail(cause));
136
+ child.once('exit', (code) => fail(new Error(`Windows relay exited with code ${String(code)}`)));
137
+ child.stderr.on('data', (chunk) => {
138
+ stderrBytes += chunk.byteLength;
139
+ if (stderrBytes > 64 * 1024)
140
+ child.kill();
141
+ });
142
+ child.stdout.on('data', (chunk) => {
143
+ try {
144
+ for (const record of decoder.push(chunk)) {
145
+ if (record.type === WINDOWS_CONTROL_RELAY_RECORD.ready) {
146
+ if (!settled) {
147
+ settled = true;
148
+ resolve();
149
+ }
150
+ continue;
151
+ }
152
+ this.#receive(record);
153
+ }
154
+ }
155
+ catch (cause) {
156
+ child.kill();
157
+ fail(cause instanceof Error ? cause : new Error('Windows relay protocol failed'));
158
+ }
159
+ });
160
+ });
161
+ return this.#ready;
162
+ }
163
+ #receive(record) {
164
+ if (record.type === WINDOWS_CONTROL_RELAY_RECORD.open) {
165
+ if (this.#connections.has(record.connectionId))
166
+ throw new Error('Duplicate relay connection');
167
+ const state = { dataListeners: [], closeListeners: [] };
168
+ this.#connections.set(record.connectionId, state);
169
+ const connection = {
170
+ id: record.connectionId,
171
+ peer: parsePeer(record.payload),
172
+ write: (payload) => this.#write(WINDOWS_CONTROL_RELAY_RECORD.data, record.connectionId, payload),
173
+ close: () => this.#write(WINDOWS_CONTROL_RELAY_RECORD.close, record.connectionId),
174
+ onData: (listener) => state.dataListeners.push(listener),
175
+ onClose: (listener) => state.closeListeners.push(listener)
176
+ };
177
+ this.#options.onConnection(connection);
178
+ return;
179
+ }
180
+ const state = this.#connections.get(record.connectionId);
181
+ if (state === undefined)
182
+ throw new Error('Relay referenced an unknown connection');
183
+ if (record.type === WINDOWS_CONTROL_RELAY_RECORD.data) {
184
+ for (const listener of state.dataListeners)
185
+ listener(record.payload);
186
+ return;
187
+ }
188
+ if (record.type === WINDOWS_CONTROL_RELAY_RECORD.close ||
189
+ record.type === WINDOWS_CONTROL_RELAY_RECORD.error) {
190
+ this.#connections.delete(record.connectionId);
191
+ for (const listener of state.closeListeners)
192
+ listener();
193
+ return;
194
+ }
195
+ throw new Error('Unknown relay record type');
196
+ }
197
+ #write(type, connectionId, payload) {
198
+ const stdin = this.#child?.stdin;
199
+ if (stdin === undefined || !stdin.writable)
200
+ throw new Error('Windows relay is not writable');
201
+ if (!stdin.write(encodeWindowsControlRelayRecord(type, connectionId, payload))) {
202
+ this.#child?.kill();
203
+ throw new Error('Windows relay backpressure limit reached');
204
+ }
205
+ }
206
+ #failAll() {
207
+ for (const state of this.#connections.values()) {
208
+ for (const listener of state.closeListeners)
209
+ listener();
210
+ }
211
+ this.#connections.clear();
212
+ }
213
+ async close() {
214
+ const child = this.#child;
215
+ this.#child = undefined;
216
+ this.#ready = undefined;
217
+ if (child === undefined)
218
+ return;
219
+ if (child.stdin.writable) {
220
+ child.stdin.end(encodeWindowsControlRelayRecord(WINDOWS_CONTROL_RELAY_RECORD.shutdown, 0n));
221
+ }
222
+ await new Promise((resolve) => {
223
+ const timer = setTimeout(() => {
224
+ child.kill();
225
+ resolve();
226
+ }, 2_000);
227
+ timer.unref();
228
+ child.once('exit', () => {
229
+ clearTimeout(timer);
230
+ resolve();
231
+ });
232
+ });
233
+ this.#failAll();
234
+ }
235
+ }
236
+ class ControlFrameDecoder {
237
+ #maxBytes;
238
+ #buffer = Buffer.alloc(0);
239
+ constructor(maxBytes) {
240
+ this.#maxBytes = maxBytes;
241
+ }
242
+ push(chunk) {
243
+ this.#buffer = Buffer.concat([this.#buffer, chunk]);
244
+ const frames = [];
245
+ while (this.#buffer.byteLength >= 4) {
246
+ const length = this.#buffer.readUInt32BE(0);
247
+ if (length > this.#maxBytes)
248
+ throw new Error('Control frame exceeds limit');
249
+ if (this.#buffer.byteLength < 4 + length)
250
+ break;
251
+ const payload = this.#buffer.subarray(4, 4 + length);
252
+ this.#buffer = this.#buffer.subarray(4 + length);
253
+ frames.push(JSON.parse(payload.toString('utf8')));
254
+ }
255
+ return frames;
256
+ }
257
+ }
258
+ function controlError(requestId, code, message) {
259
+ return { type: 'error', requestId: requestId ?? '', code, message };
260
+ }
261
+ function sameControlIdentity(left, right) {
262
+ if (left === null || typeof left !== 'object')
263
+ return false;
264
+ const identity = left;
265
+ return (identity.osIdentity === right.osIdentity &&
266
+ identity.graphicalSessionId === right.graphicalSessionId);
267
+ }
268
+ /**
269
+ * Control-protocol server for Windows. The relay calls onConnection only after
270
+ * native DACL, locality, SID, logon-session, Windows-session, PID and integrity
271
+ * verification. This layer still requires a versioned handshake before it
272
+ * parses a request envelope or invokes the broker handler.
273
+ */
274
+ export class WindowsRelayControlServer {
275
+ #options;
276
+ #relay;
277
+ #maxFrameBytes;
278
+ #maxFrames;
279
+ #now;
280
+ #requestCount = 0;
281
+ #closed = false;
282
+ constructor(options) {
283
+ this.#options = options;
284
+ this.#maxFrameBytes = options.maxFrameBytes ?? DEFAULT_MAX_CONTROL_MESSAGE_BYTES;
285
+ this.#maxFrames = options.maxFramesPerConnection ?? 1024;
286
+ this.#now = options.now ?? Date.now;
287
+ this.#relay = (options.createRelay ?? ((relayOptions) => new NativeWindowsControlRelay(relayOptions)))({
288
+ ...options.relay,
289
+ onConnection: (connection) => this.#accept(connection)
290
+ });
291
+ }
292
+ get requestCount() {
293
+ return this.#requestCount;
294
+ }
295
+ async start() {
296
+ if (this.#closed)
297
+ throw new Error('Windows control server is closed');
298
+ await this.#relay.start();
299
+ }
300
+ #accept(connection) {
301
+ const decoder = new ControlFrameDecoder(this.#maxFrameBytes);
302
+ let authenticated = false;
303
+ let frameCount = 0;
304
+ let chain = Promise.resolve();
305
+ let closed = false;
306
+ const close = () => {
307
+ if (closed)
308
+ return;
309
+ closed = true;
310
+ try {
311
+ connection.close();
312
+ }
313
+ catch {
314
+ // The relay already failed closed; there is no usable peer left to notify.
315
+ }
316
+ };
317
+ const send = (message) => {
318
+ if (!closed)
319
+ connection.write(encodeFrame(message, this.#maxFrameBytes));
320
+ };
321
+ const sendAndClose = (message) => {
322
+ send(message);
323
+ close();
324
+ };
325
+ connection.onClose(() => {
326
+ closed = true;
327
+ });
328
+ connection.onData((chunk) => {
329
+ chain = chain
330
+ .then(async () => {
331
+ for (const raw of decoder.push(chunk)) {
332
+ frameCount += 1;
333
+ if (frameCount > this.#maxFrames)
334
+ throw new Error('Control frame limit exceeded');
335
+ if (raw === null || typeof raw !== 'object' || !('type' in raw)) {
336
+ throw new Error('Malformed control message');
337
+ }
338
+ const message = raw;
339
+ if (!authenticated) {
340
+ if (message.type !== 'handshake') {
341
+ sendAndClose(controlError(message.requestId, 'handshake_required', 'Handshake is required'));
342
+ return;
343
+ }
344
+ authenticated = this.#authenticate(message);
345
+ if (!authenticated) {
346
+ sendAndClose(controlError(message.requestId, 'peer_rejected', 'Peer authentication failed'));
347
+ return;
348
+ }
349
+ const offeredVersions = message.versions;
350
+ if (offeredVersions === null || typeof offeredVersions !== 'object') {
351
+ authenticated = false;
352
+ sendAndClose(controlError(message.requestId, 'version_incompatible', 'Versions are required'));
353
+ return;
354
+ }
355
+ const negotiation = negotiateVersionHandshake(offeredVersions);
356
+ if (!negotiation.ok) {
357
+ authenticated = false;
358
+ sendAndClose(controlError(message.requestId, negotiation.error.code, negotiation.error.message));
359
+ return;
360
+ }
361
+ send({ type: 'handshake-ok', requestId: message.requestId });
362
+ continue;
363
+ }
364
+ if (message.type !== 'request') {
365
+ sendAndClose(controlError(message.requestId, 'invalid_message', 'Expected a request message'));
366
+ return;
367
+ }
368
+ // oxlint-disable-next-line no-await-in-loop -- one connection preserves frame order.
369
+ await this.#handleRequest(connection.peer, message, send);
370
+ }
371
+ })
372
+ .catch(() => close());
373
+ });
374
+ }
375
+ #authenticate(message) {
376
+ const record = message;
377
+ return (typeof message.requestId === 'string' &&
378
+ record.token === '' &&
379
+ sameControlIdentity(record.identity, this.#options.identity));
380
+ }
381
+ async #handleRequest(peer, message, send) {
382
+ if (typeof message.requestId !== 'string' ||
383
+ typeof message.deadlineAt !== 'number' ||
384
+ !Number.isFinite(message.deadlineAt)) {
385
+ send(controlError(message.requestId, 'invalid_request', 'Request ID and deadline are required'));
386
+ return;
387
+ }
388
+ if (message.deadlineAt <= this.#now()) {
389
+ send(controlError(message.requestId, 'timeout', 'Request deadline elapsed'));
390
+ return;
391
+ }
392
+ const deadlineAt = message.deadlineAt;
393
+ this.#requestCount += 1;
394
+ let timer;
395
+ try {
396
+ const timeout = new Promise((_, reject) => {
397
+ timer = setTimeout(() => reject(Object.assign(new Error('Control request deadline elapsed'), { code: 'timeout' })), deadlineAt - this.#now());
398
+ timer.unref();
399
+ });
400
+ const result = await Promise.race([
401
+ this.#options.handler({
402
+ requestId: message.requestId,
403
+ payload: message.payload,
404
+ deadlineAt,
405
+ peer
406
+ }),
407
+ timeout
408
+ ]);
409
+ send({ type: 'response', requestId: message.requestId, result });
410
+ }
411
+ catch (cause) {
412
+ const code = typeof cause === 'object' && cause !== null && 'code' in cause
413
+ ? String(cause.code)
414
+ : 'request_failed';
415
+ send(controlError(message.requestId, code, cause instanceof Error ? cause.message : 'Request failed'));
416
+ }
417
+ finally {
418
+ if (timer !== undefined)
419
+ clearTimeout(timer);
420
+ }
421
+ }
422
+ async close() {
423
+ if (this.#closed)
424
+ return;
425
+ this.#closed = true;
426
+ await this.#relay.close();
427
+ }
428
+ }
429
+ export function createWindowsControlServer(options) {
430
+ return new WindowsRelayControlServer(options);
431
+ }
432
+ //# sourceMappingURL=windows-control-security.js.map