@aiscene/aiserver 2.0.0 → 2.0.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,572 @@
1
+ import os from 'os';
2
+ import path from 'path';
3
+ import WebSocket from 'ws';
4
+ import { chromium } from 'playwright';
5
+ import { createLogger } from '../core/logger.js';
6
+ import { loadNodeAuth } from '../auth/node-auth.js';
7
+ import { chromeConnectorServer } from './chrome-connector-server.js';
8
+ const logger = createLogger('GuadaBrowserRPC');
9
+ function trimRightSlash(value) {
10
+ return value.trim().replace(/\/+$/, '');
11
+ }
12
+ function getLocalIPs() {
13
+ const interfaces = os.networkInterfaces();
14
+ const addresses = [];
15
+ for (const name of Object.keys(interfaces)) {
16
+ const nets = interfaces[name];
17
+ if (!nets)
18
+ continue;
19
+ for (const net of nets) {
20
+ if (net.family === 'IPv4' && !net.internal)
21
+ addresses.push(net.address);
22
+ }
23
+ }
24
+ return Array.from(new Set(addresses));
25
+ }
26
+ class BrowserRpcExecutor {
27
+ windows = new Map();
28
+ sharedContext = null;
29
+ seq = 0;
30
+ async execute(method, params = {}) {
31
+ if (chromeConnectorServer.canHandle(method, params)) {
32
+ logger.info(`Delegating browser RPC command to Chrome connector: ${method}`);
33
+ return chromeConnectorServer.execute(method, params);
34
+ }
35
+ if (this.shouldRequireChromeConnector(method, params)) {
36
+ logger.warn(`Chrome connector required but unavailable for browser RPC command: ${method}`);
37
+ throw new Error(chromeConnectorServer.getUnavailableMessage());
38
+ }
39
+ switch (method) {
40
+ case 'browser_new_window':
41
+ return this.newWindow(params);
42
+ case 'browser_navigate':
43
+ return this.navigate(params);
44
+ case 'browser_back':
45
+ return this.back(params);
46
+ case 'browser_forward':
47
+ return this.forward(params);
48
+ case 'browser_reload':
49
+ return this.reload(params);
50
+ case 'browser_page_text':
51
+ return this.pageText(params);
52
+ case 'browser_page_summary':
53
+ return this.pageSummary(params);
54
+ case 'browser_page_struct':
55
+ return this.pageStruct(params);
56
+ case 'browser_click':
57
+ return this.click(params);
58
+ case 'browser_input':
59
+ return this.input(params);
60
+ case 'browser_run_js':
61
+ return this.runJs(params);
62
+ case 'browser_windows':
63
+ return this.listWindows(params);
64
+ case 'browser_close':
65
+ return this.closeWindow(params);
66
+ case 'browser_close_session':
67
+ return this.closeSessionWindows(params);
68
+ default:
69
+ throw new Error(`Unsupported browser RPC method: ${method}`);
70
+ }
71
+ }
72
+ shouldRequireChromeConnector(method, params) {
73
+ if (params.browser_provider === 'playwright' || params.browserProvider === 'playwright')
74
+ return false;
75
+ if (params.allow_playwright_fallback === true || params.allowPlaywrightFallback === true)
76
+ return false;
77
+ if (this.isIsolatedMode(params))
78
+ return false;
79
+ const preferredProvider = String(params.browser_provider || params.browserProvider || '').toLowerCase();
80
+ if (preferredProvider === 'chrome')
81
+ return true;
82
+ if (method === 'browser_new_window')
83
+ return true;
84
+ const windowId = String(params.window_id || params.windowId || '');
85
+ if (windowId.startsWith('chrome_tab_'))
86
+ return true;
87
+ return false;
88
+ }
89
+ isIsolatedMode(params) {
90
+ return (params.session_mode === 'isolated' ||
91
+ params.sessionMode === 'isolated' ||
92
+ params.use_shared_cookies === false ||
93
+ params.useSharedCookies === false);
94
+ }
95
+ async close() {
96
+ const records = Array.from(this.windows.values());
97
+ this.windows.clear();
98
+ await Promise.all(records.map(async (record) => {
99
+ await record.page.close().catch(() => undefined);
100
+ if (!record.shared) {
101
+ await record.context.close().catch(() => undefined);
102
+ await record.browser?.close().catch(() => undefined);
103
+ }
104
+ }));
105
+ await this.sharedContext?.close().catch(() => undefined);
106
+ this.sharedContext = null;
107
+ }
108
+ async newWindow(params) {
109
+ const url = this.normalizeUrl(params.url || 'about:blank');
110
+ const isolated = this.isIsolatedMode(params);
111
+ const viewport = params.viewport || { width: 1280, height: 900 };
112
+ let context;
113
+ let browser;
114
+ logger.info(`Opening browser window: url=${this.truncate(url)}, mode=${isolated ? 'isolated' : 'shared'}`);
115
+ if (isolated) {
116
+ logger.info('Launching isolated Chromium browser');
117
+ browser = await chromium.launch({ headless: false });
118
+ context = await browser.newContext({ viewport });
119
+ }
120
+ else {
121
+ context = await this.ensureSharedContext(viewport);
122
+ }
123
+ logger.info('Creating browser page');
124
+ const page = await context.newPage();
125
+ const windowId = `rpc_win_${Date.now()}_${++this.seq}`;
126
+ this.windows.set(windowId, {
127
+ id: windowId,
128
+ page,
129
+ context,
130
+ browser,
131
+ shared: !isolated,
132
+ createdAt: Date.now(),
133
+ sessionId: params.session_id || params.sessionId,
134
+ });
135
+ const navigationError = await this.tryGoto(page, url);
136
+ const result = await this.pageBasicResult(page, windowId);
137
+ if (navigationError) {
138
+ return {
139
+ ...result,
140
+ navigationError,
141
+ message: '窗口已打开,但页面加载未完成或导航失败,可继续使用该 window_id 操作页面。',
142
+ };
143
+ }
144
+ return result;
145
+ }
146
+ async navigate(params) {
147
+ const record = this.getWindow(params.window_id || params.windowId);
148
+ const url = this.normalizeUrl(params.url);
149
+ const navigationError = await this.tryGoto(record.page, url);
150
+ const result = await this.pageBasicResult(record.page, record.id);
151
+ return navigationError
152
+ ? {
153
+ ...result,
154
+ navigationError,
155
+ message: '页面导航未完成或失败,可继续使用该 window_id 检查当前页面。',
156
+ }
157
+ : result;
158
+ }
159
+ async back(params) {
160
+ const record = this.getWindow(params.window_id || params.windowId);
161
+ await record.page.goBack({ waitUntil: 'domcontentloaded', timeout: 30000 }).catch(() => null);
162
+ return this.pageBasicResult(record.page, record.id);
163
+ }
164
+ async forward(params) {
165
+ const record = this.getWindow(params.window_id || params.windowId);
166
+ await record.page.goForward({ waitUntil: 'domcontentloaded', timeout: 30000 }).catch(() => null);
167
+ return this.pageBasicResult(record.page, record.id);
168
+ }
169
+ async reload(params) {
170
+ const record = this.getWindow(params.window_id || params.windowId);
171
+ await record.page.reload({ waitUntil: 'domcontentloaded', timeout: 30000 });
172
+ return this.pageBasicResult(record.page, record.id);
173
+ }
174
+ async pageText(params) {
175
+ const record = this.getWindow(params.window_id || params.windowId);
176
+ const text = await record.page.evaluate(() => {
177
+ const doc = globalThis.document;
178
+ return doc?.body?.innerText || '';
179
+ });
180
+ return {
181
+ success: true,
182
+ windowId: record.id,
183
+ window_id: record.id,
184
+ title: await record.page.title(),
185
+ url: record.page.url(),
186
+ text,
187
+ };
188
+ }
189
+ async pageSummary(params) {
190
+ const record = this.getWindow(params.window_id || params.windowId);
191
+ const data = await record.page.evaluate(() => {
192
+ const doc = globalThis.document;
193
+ const text = (doc?.body?.innerText || '').replace(/\n{3,}/g, '\n\n').trim();
194
+ const headings = Array.from(doc.querySelectorAll('h1,h2,h3'))
195
+ .slice(0, 60)
196
+ .map((el) => ({
197
+ level: el.tagName.toLowerCase(),
198
+ text: (el.textContent || '').trim(),
199
+ }))
200
+ .filter((item) => item.text);
201
+ const links = Array.from(doc.querySelectorAll('a[href]'))
202
+ .slice(0, 120)
203
+ .map((el) => ({
204
+ text: (el.textContent || '').trim().slice(0, 120),
205
+ href: el.href,
206
+ }))
207
+ .filter((item) => item.text || item.href);
208
+ return { text, headings, links };
209
+ });
210
+ return {
211
+ success: true,
212
+ windowId: record.id,
213
+ window_id: record.id,
214
+ title: await record.page.title(),
215
+ url: record.page.url(),
216
+ ...data,
217
+ };
218
+ }
219
+ async pageStruct(params) {
220
+ const record = this.getWindow(params.window_id || params.windowId);
221
+ const elements = await record.page.evaluate(() => {
222
+ const doc = globalThis.document;
223
+ const css = globalThis.CSS;
224
+ const escapeCss = (value) => css?.escape ? css.escape(value) : value.replace(/"/g, '\\"');
225
+ const selectorFor = (el) => {
226
+ if (el.id)
227
+ return `#${escapeCss(el.id)}`;
228
+ const dataTestId = el.getAttribute('data-testid') || el.getAttribute('data-test');
229
+ if (dataTestId)
230
+ return `[data-testid="${dataTestId}"]`;
231
+ const name = el.getAttribute('name');
232
+ if (name)
233
+ return `${el.tagName.toLowerCase()}[name="${name}"]`;
234
+ const cls = String(el.getAttribute('class') || '')
235
+ .split(/\s+/)
236
+ .filter(Boolean)
237
+ .slice(0, 2)
238
+ .map((item) => `.${escapeCss(item)}`)
239
+ .join('');
240
+ return `${el.tagName.toLowerCase()}${cls}`;
241
+ };
242
+ return Array.from(doc.querySelectorAll('a,button,input,textarea,select,[role="button"],[onclick]'))
243
+ .slice(0, 250)
244
+ .map((el) => ({
245
+ tag: el.tagName.toLowerCase(),
246
+ selector: selectorFor(el),
247
+ text: (el.textContent || el.value || '').trim().slice(0, 160),
248
+ type: el.type || undefined,
249
+ placeholder: el.placeholder || undefined,
250
+ href: el.href || undefined,
251
+ role: el.getAttribute('role') || undefined,
252
+ }));
253
+ });
254
+ return {
255
+ success: true,
256
+ windowId: record.id,
257
+ window_id: record.id,
258
+ title: await record.page.title(),
259
+ url: record.page.url(),
260
+ elements,
261
+ };
262
+ }
263
+ async click(params) {
264
+ const record = this.getWindow(params.window_id || params.windowId);
265
+ if (!params.selector)
266
+ throw new Error('selector is required');
267
+ await record.page.click(params.selector, { timeout: 15000 });
268
+ await record.page.waitForLoadState('domcontentloaded', { timeout: 10000 }).catch(() => undefined);
269
+ return this.pageBasicResult(record.page, record.id);
270
+ }
271
+ async input(params) {
272
+ const record = this.getWindow(params.window_id || params.windowId);
273
+ if (!params.selector)
274
+ throw new Error('selector is required');
275
+ await record.page.fill(params.selector, String(params.value ?? ''), { timeout: 15000 });
276
+ return this.pageBasicResult(record.page, record.id);
277
+ }
278
+ async runJs(params) {
279
+ const record = this.getWindow(params.window_id || params.windowId);
280
+ if (!params.code)
281
+ throw new Error('code is required');
282
+ const result = await record.page.evaluate(async (code) => {
283
+ const fn = new Function(`return (async () => { ${code} })();`);
284
+ return await fn();
285
+ }, String(params.code));
286
+ return {
287
+ success: true,
288
+ windowId: record.id,
289
+ window_id: record.id,
290
+ result,
291
+ };
292
+ }
293
+ async listWindows(params) {
294
+ const sessionId = params.session_id || params.sessionId;
295
+ const windows = await Promise.all(Array.from(this.windows.values())
296
+ .filter((record) => !sessionId || record.sessionId === sessionId)
297
+ .map(async (record) => ({
298
+ windowId: record.id,
299
+ window_id: record.id,
300
+ title: await record.page.title().catch(() => ''),
301
+ url: record.page.url(),
302
+ shared: record.shared,
303
+ createdAt: new Date(record.createdAt).toISOString(),
304
+ sessionId: record.sessionId,
305
+ })));
306
+ return { success: true, windows };
307
+ }
308
+ async closeWindow(params) {
309
+ const windowId = params.window_id || params.windowId;
310
+ const record = this.getWindow(windowId);
311
+ this.windows.delete(record.id);
312
+ await record.page.close().catch(() => undefined);
313
+ if (!record.shared) {
314
+ await record.context.close().catch(() => undefined);
315
+ await record.browser?.close().catch(() => undefined);
316
+ }
317
+ return { success: true, windowId: record.id, window_id: record.id };
318
+ }
319
+ async closeSessionWindows(params) {
320
+ const sessionId = params.session_id || params.sessionId;
321
+ if (!sessionId)
322
+ throw new Error('session_id is required');
323
+ const records = Array.from(this.windows.values()).filter((record) => record.sessionId === sessionId);
324
+ for (const record of records) {
325
+ this.windows.delete(record.id);
326
+ await record.page.close().catch(() => undefined);
327
+ if (!record.shared) {
328
+ await record.context.close().catch(() => undefined);
329
+ await record.browser?.close().catch(() => undefined);
330
+ }
331
+ }
332
+ return { success: true, sessionId, closedCount: records.length };
333
+ }
334
+ async ensureSharedContext(viewport) {
335
+ if (this.sharedContext)
336
+ return this.sharedContext;
337
+ const userDataDir = process.env.GUADA_BROWSER_USER_DATA_DIR ||
338
+ path.join(os.homedir(), '.aiserver', 'guada-browser-profile');
339
+ logger.info(`Launching shared Chromium browser context: ${userDataDir}`);
340
+ this.sharedContext = await chromium.launchPersistentContext(userDataDir, {
341
+ headless: false,
342
+ viewport,
343
+ });
344
+ this.sharedContext.on('close', () => {
345
+ this.sharedContext = null;
346
+ });
347
+ logger.info(`Shared browser context started: ${userDataDir}`);
348
+ return this.sharedContext;
349
+ }
350
+ getWindow(windowId) {
351
+ if (!windowId)
352
+ throw new Error('window_id is required');
353
+ const record = this.windows.get(windowId);
354
+ if (!record)
355
+ throw new Error(`Browser window not found: ${windowId}`);
356
+ return record;
357
+ }
358
+ async goto(page, url) {
359
+ logger.info(`Navigating browser page: ${this.truncate(url)}`);
360
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 45000 });
361
+ }
362
+ async tryGoto(page, url) {
363
+ try {
364
+ await this.goto(page, url);
365
+ return null;
366
+ }
367
+ catch (error) {
368
+ const message = error.message || String(error);
369
+ logger.warn(`Browser navigation failed: ${this.truncate(url)} - ${message}`);
370
+ return message;
371
+ }
372
+ }
373
+ normalizeUrl(url) {
374
+ if (!url)
375
+ throw new Error('url is required');
376
+ if (/^https?:\/\//i.test(url) || url === 'about:blank')
377
+ return url;
378
+ return `https://${url}`;
379
+ }
380
+ truncate(value, max = 240) {
381
+ return value.length > max ? `${value.slice(0, max)}...` : value;
382
+ }
383
+ async pageBasicResult(page, windowId) {
384
+ return {
385
+ success: true,
386
+ windowId,
387
+ window_id: windowId,
388
+ provider: 'playwright',
389
+ title: await page.title().catch(() => ''),
390
+ url: page.url(),
391
+ };
392
+ }
393
+ }
394
+ export class GuadaBrowserRpcClient {
395
+ ws = null;
396
+ running = false;
397
+ reconnectTimer = null;
398
+ heartbeatTimer = null;
399
+ commandTimeoutMs = Number(process.env.GUADA_BROWSER_RPC_COMMAND_TIMEOUT_MS || 55000);
400
+ config;
401
+ executor = new BrowserRpcExecutor();
402
+ start(config) {
403
+ const enabled = String(process.env.GUADA_BROWSER_RPC_ENABLED || 'true').toLowerCase() !== 'false';
404
+ if (!enabled) {
405
+ logger.info('Guada browser RPC disabled by GUADA_BROWSER_RPC_ENABLED=false');
406
+ return;
407
+ }
408
+ const apiBase = this.getGuadaApiBase(config);
409
+ if (!apiBase) {
410
+ logger.warn('Guada browser RPC not started: missing Guada API base');
411
+ return;
412
+ }
413
+ this.config = config;
414
+ this.running = true;
415
+ chromeConnectorServer.start();
416
+ this.connect();
417
+ }
418
+ stop() {
419
+ this.running = false;
420
+ if (this.reconnectTimer)
421
+ clearTimeout(this.reconnectTimer);
422
+ if (this.heartbeatTimer)
423
+ clearInterval(this.heartbeatTimer);
424
+ this.ws?.close();
425
+ this.ws = null;
426
+ void this.executor.close();
427
+ chromeConnectorServer.stop();
428
+ }
429
+ connect() {
430
+ if (!this.running)
431
+ return;
432
+ const wsUrl = this.getWebSocketUrl(this.config);
433
+ logger.info(`Connecting Guada browser RPC: ${wsUrl}`);
434
+ const ws = new WebSocket(wsUrl);
435
+ this.ws = ws;
436
+ ws.on('open', () => {
437
+ const auth = loadNodeAuth();
438
+ ws.send(JSON.stringify({
439
+ type: 'hello',
440
+ nodeId: this.config.nodeId,
441
+ nodeAuthId: auth?.nodeAuthId,
442
+ ownerErp: auth?.ownerErp,
443
+ hostname: os.hostname(),
444
+ ipAddresses: getLocalIPs(),
445
+ capabilities: [
446
+ 'browser-rpc',
447
+ 'playwright',
448
+ 'shared-browser-session',
449
+ 'chrome-connector',
450
+ 'chrome-tab-groups',
451
+ ],
452
+ chromeConnector: chromeConnectorServer.getInfo(),
453
+ }));
454
+ this.startHeartbeat();
455
+ logger.info('Guada browser RPC connected');
456
+ });
457
+ ws.on('message', (raw) => {
458
+ void this.handleMessage(ws, raw).catch((error) => {
459
+ logger.error(`Browser RPC message failed: ${error.message}`);
460
+ });
461
+ });
462
+ ws.on('close', () => {
463
+ logger.warn('Guada browser RPC disconnected');
464
+ this.scheduleReconnect();
465
+ });
466
+ ws.on('error', (error) => {
467
+ logger.warn(`Guada browser RPC socket error: ${error.message}`);
468
+ });
469
+ }
470
+ async handleMessage(ws, raw) {
471
+ let message;
472
+ try {
473
+ message = JSON.parse(String(raw));
474
+ }
475
+ catch {
476
+ return;
477
+ }
478
+ if (message.type === 'hello_ack')
479
+ return;
480
+ if (message.type === 'ping') {
481
+ ws.send(JSON.stringify({ type: 'pong' }));
482
+ return;
483
+ }
484
+ if (message.type !== 'command')
485
+ return;
486
+ const command = message;
487
+ const startedAt = Date.now();
488
+ logger.info(`Browser RPC command received: id=${command.id}, method=${command.method}, params=${this.summarizeParams(command.params || {})}`);
489
+ try {
490
+ const result = await this.withTimeout(this.executor.execute(command.method, command.params || {}), this.commandTimeoutMs, `Browser RPC command timeout after ${this.commandTimeoutMs}ms: ${command.method}`);
491
+ ws.send(JSON.stringify({
492
+ type: 'result',
493
+ id: command.id,
494
+ success: true,
495
+ result,
496
+ }));
497
+ logger.info(`Browser RPC command succeeded: id=${command.id}, method=${command.method}, elapsed=${Date.now() - startedAt}ms`);
498
+ }
499
+ catch (error) {
500
+ logger.error(`Browser RPC command failed: id=${command.id}, method=${command.method}, elapsed=${Date.now() - startedAt}ms, error=${error.message}`);
501
+ ws.send(JSON.stringify({
502
+ type: 'result',
503
+ id: command.id,
504
+ success: false,
505
+ error: error.message,
506
+ }));
507
+ }
508
+ }
509
+ startHeartbeat() {
510
+ if (this.heartbeatTimer)
511
+ clearInterval(this.heartbeatTimer);
512
+ this.heartbeatTimer = setInterval(() => {
513
+ if (this.ws?.readyState === WebSocket.OPEN) {
514
+ this.ws.send(JSON.stringify({
515
+ type: 'heartbeat',
516
+ ts: Date.now(),
517
+ chromeConnector: chromeConnectorServer.getInfo(),
518
+ }));
519
+ }
520
+ }, 30000);
521
+ }
522
+ scheduleReconnect() {
523
+ if (!this.running)
524
+ return;
525
+ if (this.heartbeatTimer) {
526
+ clearInterval(this.heartbeatTimer);
527
+ this.heartbeatTimer = null;
528
+ }
529
+ if (this.reconnectTimer)
530
+ return;
531
+ this.reconnectTimer = setTimeout(() => {
532
+ this.reconnectTimer = null;
533
+ this.connect();
534
+ }, Number(process.env.GUADA_BROWSER_RPC_RECONNECT_MS || 5000));
535
+ }
536
+ getWebSocketUrl(config) {
537
+ const apiBase = this.getGuadaApiBase(config);
538
+ const base = apiBase.replace(/^http:/i, 'ws:').replace(/^https:/i, 'wss:');
539
+ return `${base}/browser-rpc/ws`;
540
+ }
541
+ getGuadaApiBase(config) {
542
+ const raw = process.env.GUADA_AI_API_BASE_URL ||
543
+ process.env.LOGIN_SCRIPT_API_URL ||
544
+ config.loginScriptApiUrl ||
545
+ '';
546
+ if (!raw.trim())
547
+ return '';
548
+ const base = trimRightSlash(raw);
549
+ return base.endsWith('/api/v1') ? base : `${base}/api/v1`;
550
+ }
551
+ withTimeout(promise, timeoutMs, message) {
552
+ let timer = null;
553
+ const timeout = new Promise((_, reject) => {
554
+ timer = setTimeout(() => reject(new Error(message)), timeoutMs);
555
+ });
556
+ return Promise.race([promise, timeout]).finally(() => {
557
+ if (timer)
558
+ clearTimeout(timer);
559
+ });
560
+ }
561
+ summarizeParams(params) {
562
+ const summary = {};
563
+ for (const key of ['url', 'window_id', 'windowId', 'session_mode', 'sessionMode', 'session_id', 'sessionId']) {
564
+ if (params[key] !== undefined)
565
+ summary[key] = params[key];
566
+ }
567
+ const text = JSON.stringify(summary);
568
+ return text.length > 500 ? `${text.slice(0, 500)}...` : text;
569
+ }
570
+ }
571
+ export const guadaBrowserRpcClient = new GuadaBrowserRpcClient();
572
+ //# sourceMappingURL=guada-browser-rpc-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guada-browser-rpc-client.js","sourceRoot":"","sources":["../../src/task/guada-browser-rpc-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAknB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,oBAAoB,CAAsG;IAClI,OAAO,CAAC,WAAW,CAIX;;IAUR,wBAAwB,CAAC,MAAM,EAAE;QAAE,0BAA0B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,IAAI;IAI7H,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,cAAc;IAs4BtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IA0evB,OAAO,CAAC,iBAAiB;IAqFzB,OAAO,CAAC,kBAAkB;IAgF1B,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1C,KAAK,IAAI,IAAI;IAYb,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAShF,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,yBAAyB;CAOlC;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAunB5D,qBAAa,SAAS;IACpB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,oBAAoB,CAAsG;IAClI,OAAO,CAAC,WAAW,CAIX;;IAUR,wBAAwB,CAAC,MAAM,EAAE;QAAE,0BAA0B,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,GAAG,IAAI;IAI7H,OAAO,CAAC,eAAe;IAcvB,OAAO,CAAC,cAAc;IA84BtB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IA0evB,OAAO,CAAC,iBAAiB;IAqFzB,OAAO,CAAC,kBAAkB;IAgF1B,KAAK,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1C,KAAK,IAAI,IAAI;IAYb,eAAe,CAAC,iBAAiB,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAShF,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,yBAAyB;CAOlC;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"}