@olib-ai/owl-browser-sdk 1.0.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.
@@ -0,0 +1,641 @@
1
+ "use strict";
2
+ /**
3
+ * Connection abstraction for Owl Browser SDK
4
+ *
5
+ * Provides a unified interface for communicating with the browser,
6
+ * supporting both local (IPC) and remote (HTTP) modes.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ exports.HttpConnection = exports.LocalConnection = void 0;
43
+ exports.createConnection = createConnection;
44
+ const child_process_1 = require("child_process");
45
+ const path = __importStar(require("path"));
46
+ const fs = __importStar(require("fs"));
47
+ const http = __importStar(require("http"));
48
+ const https = __importStar(require("https"));
49
+ const errors_1 = require("./errors");
50
+ // License error detection patterns (matching output from native binary)
51
+ const LICENSE_ERROR_PATTERNS = {
52
+ NOT_FOUND: /LICENSE ERROR: No valid license found|License file not found/i,
53
+ EXPIRED: /LICENSE ERROR: License expired|license.*expired/i,
54
+ INVALID_SIGNATURE: /LICENSE ERROR: Invalid signature|signature.*invalid/i,
55
+ CORRUPTED: /LICENSE ERROR: Corrupted|license.*corrupted/i,
56
+ HARDWARE_MISMATCH: /LICENSE ERROR: Hardware mismatch|hardware.*mismatch/i,
57
+ TAMPERED: /LICENSE ERROR: Tampered|tampering.*detected/i,
58
+ DEBUG_DETECTED: /LICENSE ERROR: Debug|debugger.*detected/i,
59
+ CLOCK_MANIPULATED: /LICENSE ERROR: Clock|time.*manipulation/i,
60
+ SUBSCRIPTION_INACTIVE: /LICENSE ERROR: Subscription inactive|subscription.*inactive/i,
61
+ SUBSCRIPTION_CHECK_FAILED: /LICENSE ERROR: Subscription check failed|Could not validate subscription/i,
62
+ SEAT_EXCEEDED: /LICENSE ERROR: Seat|Maximum.*devices.*reached/i,
63
+ };
64
+ const FINGERPRINT_PATTERN = /Hardware fingerprint: ([a-fA-F0-9]+)/i;
65
+ /**
66
+ * Local connection using child process IPC (stdin/stdout)
67
+ */
68
+ class LocalConnection {
69
+ constructor(config) {
70
+ this.browserProcess = null;
71
+ this.commandId = 0;
72
+ this.pendingCommands = new Map();
73
+ this.buffer = '';
74
+ // License error tracking
75
+ this.licenseError = null;
76
+ this.hardwareFingerprint = null;
77
+ this.browserPath = config.browserPath || this.detectBrowserPath();
78
+ this.initTimeout = config.initTimeout ?? 30000;
79
+ this.verbose = config.verbose ?? false;
80
+ this.instanceId = `browser_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
81
+ }
82
+ /**
83
+ * Auto-detect browser binary path
84
+ */
85
+ detectBrowserPath() {
86
+ const platform = process.platform;
87
+ const isLinux = platform === 'linux';
88
+ // Try common paths relative to SDK
89
+ const possiblePaths = isLinux
90
+ ? [
91
+ // Linux paths
92
+ path.join(__dirname, '../../build/owl_browser'),
93
+ path.join(process.cwd(), 'node_modules/owl-browser/build/owl_browser'),
94
+ path.join(process.cwd(), 'build/owl_browser'),
95
+ ]
96
+ : [
97
+ // macOS paths
98
+ path.join(__dirname, '../../build/Release/owl_browser.app/Contents/MacOS/owl_browser'),
99
+ path.join(process.cwd(), 'node_modules/owl-browser/build/Release/owl_browser.app/Contents/MacOS/owl_browser'),
100
+ path.join(process.cwd(), 'build/Release/owl_browser.app/Contents/MacOS/owl_browser'),
101
+ ];
102
+ for (const browserPath of possiblePaths) {
103
+ if (fs.existsSync(browserPath)) {
104
+ return browserPath;
105
+ }
106
+ }
107
+ throw new Error('Browser binary not found. Please build the browser first or provide browserPath in config.');
108
+ }
109
+ async initialize() {
110
+ if (!fs.existsSync(this.browserPath)) {
111
+ throw new Error(`Browser binary not found at: ${this.browserPath}`);
112
+ }
113
+ return new Promise((resolve, reject) => {
114
+ this.browserProcess = (0, child_process_1.spawn)(this.browserPath, ['--instance-id', this.instanceId], {
115
+ stdio: ['pipe', 'pipe', 'pipe'],
116
+ detached: false,
117
+ env: {
118
+ ...process.env,
119
+ OWL_INSTANCE_ID: this.instanceId,
120
+ },
121
+ });
122
+ let initialized = false;
123
+ // Handle stdout
124
+ this.browserProcess.stdout.on('data', (data) => {
125
+ this.buffer += data.toString();
126
+ const lines = this.buffer.split('\n');
127
+ this.buffer = lines.pop() || '';
128
+ lines.forEach((line) => {
129
+ if (line.trim() === 'READY' && !initialized) {
130
+ initialized = true;
131
+ if (this.verbose) {
132
+ console.error(`[Browser] Ready (instance: ${this.instanceId}, PID: ${this.browserProcess.pid})`);
133
+ }
134
+ resolve();
135
+ }
136
+ else {
137
+ this.handleResponse(line);
138
+ }
139
+ });
140
+ });
141
+ // Handle stderr
142
+ this.browserProcess.stderr.on('data', (data) => {
143
+ const output = data.toString();
144
+ if (output.includes('READY') && !initialized) {
145
+ initialized = true;
146
+ if (this.verbose) {
147
+ console.error(`[Browser] Ready from stderr (instance: ${this.instanceId})`);
148
+ }
149
+ resolve();
150
+ }
151
+ // Check for hardware fingerprint
152
+ const fingerprintMatch = output.match(FINGERPRINT_PATTERN);
153
+ if (fingerprintMatch) {
154
+ this.hardwareFingerprint = fingerprintMatch[1];
155
+ }
156
+ // Check for license errors
157
+ for (const [status, pattern] of Object.entries(LICENSE_ERROR_PATTERNS)) {
158
+ if (pattern.test(output)) {
159
+ this.licenseError = {
160
+ status: status,
161
+ message: output.trim(),
162
+ };
163
+ break;
164
+ }
165
+ }
166
+ // Only show critical errors
167
+ if (output.includes('[ERROR]') && !output.includes('503') && !output.includes('Loading model')) {
168
+ if (this.verbose) {
169
+ console.error('[Browser]', output.trim());
170
+ }
171
+ }
172
+ });
173
+ // Handle errors
174
+ this.browserProcess.on('error', (err) => {
175
+ reject(new Error(`Failed to start browser: ${err.message}`));
176
+ });
177
+ // Handle exit
178
+ this.browserProcess.on('exit', (code) => {
179
+ if (code !== 0 && code !== null && this.verbose) {
180
+ console.error(`[Browser] Process exited with code ${code}`);
181
+ }
182
+ // Reject all pending commands
183
+ for (const [id, pending] of this.pendingCommands) {
184
+ pending.reject(new Error('Browser process exited'));
185
+ this.pendingCommands.delete(id);
186
+ }
187
+ });
188
+ // Timeout
189
+ setTimeout(() => {
190
+ if (!initialized) {
191
+ // Check if we have a license error
192
+ if (this.licenseError) {
193
+ reject(new errors_1.LicenseError(this.licenseError.message, this.licenseError.status, this.hardwareFingerprint || undefined));
194
+ }
195
+ else {
196
+ reject(new errors_1.BrowserInitializationError('Browser initialization timeout'));
197
+ }
198
+ }
199
+ }, this.initTimeout);
200
+ });
201
+ }
202
+ /**
203
+ * Handle JSON response from browser
204
+ */
205
+ handleResponse(line) {
206
+ if (!line.trim())
207
+ return;
208
+ try {
209
+ const response = JSON.parse(line);
210
+ const pending = this.pendingCommands.get(response.id);
211
+ if (pending) {
212
+ this.pendingCommands.delete(response.id);
213
+ if (response.error) {
214
+ pending.reject(new Error(response.error));
215
+ }
216
+ else {
217
+ pending.resolve(response.result);
218
+ }
219
+ }
220
+ }
221
+ catch (e) {
222
+ // Ignore non-JSON lines (logs, etc.)
223
+ }
224
+ }
225
+ async sendCommand(method, params = {}) {
226
+ if (!this.browserProcess) {
227
+ throw new errors_1.BrowserNotRunningError('Browser not initialized. Call initialize() first.');
228
+ }
229
+ const id = ++this.commandId;
230
+ const command = { id, method, ...params };
231
+ return new Promise((resolve, reject) => {
232
+ this.pendingCommands.set(id, { resolve, reject });
233
+ const commandStr = JSON.stringify(command);
234
+ if (this.verbose) {
235
+ console.error(`[Browser] Sending: ${method}`, params);
236
+ }
237
+ this.browserProcess.stdin.write(commandStr + '\n');
238
+ // Timeout after 30 seconds
239
+ setTimeout(() => {
240
+ if (this.pendingCommands.has(id)) {
241
+ this.pendingCommands.delete(id);
242
+ reject(new errors_1.CommandTimeoutError(method));
243
+ }
244
+ }, 30000);
245
+ });
246
+ }
247
+ async shutdown() {
248
+ if (this.browserProcess) {
249
+ const pid = this.browserProcess.pid;
250
+ if (this.verbose) {
251
+ console.error(`[Browser] Shutting down process (PID: ${pid})...`);
252
+ }
253
+ // Send shutdown command to browser (graceful)
254
+ try {
255
+ await this.sendCommand('shutdown', {});
256
+ if (this.verbose) {
257
+ console.error('[Browser] Sent shutdown command');
258
+ }
259
+ }
260
+ catch (err) {
261
+ if (this.verbose) {
262
+ console.error('[Browser] Failed to send shutdown command:', err.message);
263
+ }
264
+ }
265
+ // Close stdin
266
+ this.browserProcess.stdin.end();
267
+ // Wait for graceful termination (3 seconds)
268
+ const waitForExit = new Promise((resolve) => {
269
+ const timeout = setTimeout(() => {
270
+ if (this.verbose) {
271
+ console.error('[Browser] Did not exit gracefully, force killing...');
272
+ }
273
+ resolve(false);
274
+ }, 3000);
275
+ this.browserProcess.once('exit', () => {
276
+ clearTimeout(timeout);
277
+ if (this.verbose) {
278
+ console.error('[Browser] Exited gracefully');
279
+ }
280
+ resolve(true);
281
+ });
282
+ });
283
+ const graceful = await waitForExit;
284
+ // Force kill if still alive
285
+ if (!graceful && pid) {
286
+ try {
287
+ process.kill(pid, 'SIGKILL');
288
+ if (this.verbose) {
289
+ console.error(`[Browser] Force killed process (PID: ${pid})`);
290
+ }
291
+ }
292
+ catch (err) {
293
+ // Process already dead
294
+ if (this.verbose) {
295
+ console.error('[Browser] Process already terminated');
296
+ }
297
+ }
298
+ }
299
+ this.browserProcess = null;
300
+ if (this.verbose) {
301
+ console.error('[Browser] Shutdown complete');
302
+ }
303
+ }
304
+ }
305
+ isRunning() {
306
+ return this.browserProcess !== null && this.browserProcess.exitCode === null;
307
+ }
308
+ }
309
+ exports.LocalConnection = LocalConnection;
310
+ // ==================== HTTP CONNECTION ====================
311
+ /**
312
+ * HTTP connection using REST API to remote browser server
313
+ */
314
+ class HttpConnection {
315
+ constructor(config) {
316
+ this.connected = false;
317
+ if (!config.http) {
318
+ throw new Error('HTTP configuration is required for HTTP connection mode');
319
+ }
320
+ this.baseUrl = config.http.baseUrl.replace(/\/$/, ''); // Remove trailing slash
321
+ this.token = config.http.token;
322
+ this.timeout = config.http.timeout ?? config.initTimeout ?? 30000;
323
+ this.verbose = config.verbose ?? false;
324
+ }
325
+ async initialize() {
326
+ // Check server health
327
+ try {
328
+ const health = await this.httpRequest('GET', '/health');
329
+ if (this.verbose) {
330
+ console.error(`[HTTP] Connected to server: ${this.baseUrl}`);
331
+ console.error(`[HTTP] Server status: ${health.status}, browser ready: ${health.browser_ready}`);
332
+ }
333
+ if (health.status !== 'healthy') {
334
+ throw new errors_1.BrowserInitializationError(`Server is not healthy: ${health.status}`);
335
+ }
336
+ if (!health.browser_ready) {
337
+ // Check for license error
338
+ if (health.browser_state === 'license_error') {
339
+ throw new errors_1.LicenseError(health.license_message || 'Browser license error', health.license_status, health.hardware_fingerprint);
340
+ }
341
+ throw new errors_1.BrowserInitializationError(`Browser is not ready: ${health.browser_state}`);
342
+ }
343
+ this.connected = true;
344
+ }
345
+ catch (error) {
346
+ if (error instanceof errors_1.LicenseError || error instanceof errors_1.BrowserInitializationError) {
347
+ throw error;
348
+ }
349
+ throw new errors_1.BrowserInitializationError(`Failed to connect to browser server at ${this.baseUrl}: ${error.message}`);
350
+ }
351
+ }
352
+ /**
353
+ * Map SDK method names to HTTP API tool names
354
+ */
355
+ mapMethodToTool(method) {
356
+ // Map internal SDK method names to HTTP API tool names
357
+ const methodToToolMap = {
358
+ createContext: 'browser_create_context',
359
+ releaseContext: 'browser_close_context',
360
+ navigate: 'browser_navigate',
361
+ reload: 'browser_reload',
362
+ goBack: 'browser_go_back',
363
+ goForward: 'browser_go_forward',
364
+ click: 'browser_click',
365
+ type: 'browser_type',
366
+ pick: 'browser_pick',
367
+ pressKey: 'browser_press_key',
368
+ submitForm: 'browser_submit_form',
369
+ highlight: 'browser_highlight',
370
+ extractText: 'browser_extract_text',
371
+ getHTML: 'browser_get_html',
372
+ getMarkdown: 'browser_get_markdown',
373
+ extractJSON: 'browser_extract_json',
374
+ detectWebsiteType: 'browser_detect_site',
375
+ summarizePage: 'browser_summarize_page',
376
+ listTemplates: 'browser_list_templates',
377
+ queryPage: 'browser_query_page',
378
+ llmStatus: 'browser_llm_status',
379
+ getLLMStatus: 'browser_llm_status',
380
+ executeNLA: 'browser_nla',
381
+ screenshot: 'browser_screenshot',
382
+ startVideoRecording: 'browser_start_video_recording',
383
+ pauseVideoRecording: 'browser_pause_video_recording',
384
+ resumeVideoRecording: 'browser_resume_video_recording',
385
+ stopVideoRecording: 'browser_stop_video_recording',
386
+ getVideoRecordingStats: 'browser_get_video_recording_stats',
387
+ scrollBy: 'browser_scroll_by',
388
+ scrollTo: 'browser_scroll_by', // scrollTo can use scrollBy
389
+ scrollToElement: 'browser_scroll_to_element',
390
+ scrollToTop: 'browser_scroll_to_top',
391
+ scrollToBottom: 'browser_scroll_to_bottom',
392
+ waitForSelector: 'browser_wait_for_selector',
393
+ waitForTimeout: 'browser_wait',
394
+ getCurrentURL: 'browser_get_page_info',
395
+ getPageTitle: 'browser_get_page_info',
396
+ getPageInfo: 'browser_get_page_info',
397
+ setViewport: 'browser_set_viewport',
398
+ getViewport: 'browser_get_page_info',
399
+ getDemographics: 'browser_get_demographics',
400
+ getLocation: 'browser_get_location',
401
+ getDateTime: 'browser_get_datetime',
402
+ getWeather: 'browser_get_weather',
403
+ detectCaptcha: 'browser_detect_captcha',
404
+ classifyCaptcha: 'browser_classify_captcha',
405
+ solveTextCaptcha: 'browser_solve_text_captcha',
406
+ solveImageCaptcha: 'browser_solve_image_captcha',
407
+ solveCaptcha: 'browser_solve_captcha',
408
+ getCookies: 'browser_get_cookies',
409
+ setCookie: 'browser_set_cookie',
410
+ deleteCookies: 'browser_delete_cookies',
411
+ setProxy: 'browser_set_proxy',
412
+ getProxyStatus: 'browser_get_proxy_status',
413
+ connectProxy: 'browser_connect_proxy',
414
+ disconnectProxy: 'browser_disconnect_proxy',
415
+ saveProfile: 'browser_save_profile',
416
+ getProfile: 'browser_get_profile',
417
+ updateProfileCookies: 'browser_update_profile_cookies',
418
+ shutdown: 'shutdown', // Special case - no HTTP equivalent
419
+ getHomepage: 'browser_get_page_info', // Homepage is local-only feature
420
+ };
421
+ return methodToToolMap[method] || method;
422
+ }
423
+ /**
424
+ * Map SDK parameters to HTTP API parameters
425
+ */
426
+ mapParams(method, params) {
427
+ const mapped = {};
428
+ for (const [key, value] of Object.entries(params)) {
429
+ if (value === undefined || value === null)
430
+ continue;
431
+ // Map common parameter name differences
432
+ switch (key) {
433
+ case 'context_id':
434
+ mapped.context_id = value;
435
+ break;
436
+ case 'clean_level':
437
+ mapped.clean_level = value;
438
+ break;
439
+ case 'include_links':
440
+ mapped.include_links = value;
441
+ break;
442
+ case 'include_images':
443
+ mapped.include_images = value;
444
+ break;
445
+ case 'max_length':
446
+ mapped.max_length = value;
447
+ break;
448
+ case 'template_name':
449
+ mapped.template = value;
450
+ break;
451
+ case 'force_refresh':
452
+ mapped.force_refresh = value;
453
+ break;
454
+ case 'query':
455
+ // For NLA, map query to command
456
+ if (method === 'executeNLA') {
457
+ mapped.command = value;
458
+ }
459
+ else {
460
+ mapped.query = value;
461
+ }
462
+ break;
463
+ case 'ignore_cache':
464
+ mapped.ignore_cache = value;
465
+ break;
466
+ case 'border_color':
467
+ mapped.border_color = value;
468
+ break;
469
+ case 'background_color':
470
+ mapped.background_color = value;
471
+ break;
472
+ case 'max_attempts':
473
+ mapped.max_attempts = value;
474
+ break;
475
+ case 'cookie_name':
476
+ mapped.cookie_name = value;
477
+ break;
478
+ case 'block_webrtc':
479
+ mapped.block_webrtc = value;
480
+ break;
481
+ case 'spoof_timezone':
482
+ mapped.spoof_timezone = value;
483
+ break;
484
+ case 'spoof_language':
485
+ mapped.spoof_language = value;
486
+ break;
487
+ case 'timezone_override':
488
+ mapped.timezone_override = value;
489
+ break;
490
+ case 'language_override':
491
+ mapped.language_override = value;
492
+ break;
493
+ case 'profile_path':
494
+ mapped.profile_path = value;
495
+ break;
496
+ default:
497
+ mapped[key] = value;
498
+ }
499
+ }
500
+ return mapped;
501
+ }
502
+ async sendCommand(method, params = {}) {
503
+ if (!this.connected) {
504
+ throw new errors_1.BrowserNotRunningError('Not connected to browser server. Call initialize() first.');
505
+ }
506
+ // Handle special methods that don't map to HTTP endpoints
507
+ if (method === 'shutdown') {
508
+ // No-op for HTTP mode - server manages browser lifecycle
509
+ if (this.verbose) {
510
+ console.error('[HTTP] Shutdown requested - closing client connection');
511
+ }
512
+ this.connected = false;
513
+ return;
514
+ }
515
+ if (method === 'getHomepage') {
516
+ // Homepage is a local-only feature, return empty for HTTP mode
517
+ return '';
518
+ }
519
+ const tool = this.mapMethodToTool(method);
520
+ const mappedParams = this.mapParams(method, params);
521
+ if (this.verbose) {
522
+ console.error(`[HTTP] Sending: ${tool}`, mappedParams);
523
+ }
524
+ try {
525
+ const response = await this.httpRequest('POST', `/execute/${tool}`, mappedParams);
526
+ if (!response.success) {
527
+ throw new Error(response.error || 'Unknown error');
528
+ }
529
+ // Handle special return value transformations
530
+ if (method === 'getCurrentURL' || method === 'getPageTitle') {
531
+ // These methods call getPageInfo but need specific fields
532
+ if (method === 'getCurrentURL') {
533
+ return response.result?.url || response.result;
534
+ }
535
+ if (method === 'getPageTitle') {
536
+ return response.result?.title || response.result;
537
+ }
538
+ }
539
+ return response.result;
540
+ }
541
+ catch (error) {
542
+ if (this.verbose) {
543
+ console.error(`[HTTP] Error for ${tool}:`, error.message);
544
+ }
545
+ throw error;
546
+ }
547
+ }
548
+ async shutdown() {
549
+ this.connected = false;
550
+ if (this.verbose) {
551
+ console.error('[HTTP] Client disconnected');
552
+ }
553
+ }
554
+ isRunning() {
555
+ return this.connected;
556
+ }
557
+ /**
558
+ * Make an HTTP request to the browser server
559
+ */
560
+ httpRequest(method, path, body) {
561
+ return new Promise((resolve, reject) => {
562
+ const url = new URL(path, this.baseUrl);
563
+ const isHttps = url.protocol === 'https:';
564
+ const lib = isHttps ? https : http;
565
+ const bodyStr = body ? JSON.stringify(body) : '';
566
+ const headers = {
567
+ 'Content-Type': 'application/json',
568
+ };
569
+ // Add Content-Length for POST requests
570
+ if (method === 'POST' && bodyStr) {
571
+ headers['Content-Length'] = String(Buffer.byteLength(bodyStr));
572
+ }
573
+ // Add auth header for non-health endpoints
574
+ if (path !== '/health') {
575
+ headers['Authorization'] = `Bearer ${this.token}`;
576
+ }
577
+ const options = {
578
+ hostname: url.hostname,
579
+ port: url.port || (isHttps ? 443 : 80),
580
+ path: url.pathname + url.search,
581
+ method,
582
+ headers,
583
+ timeout: this.timeout,
584
+ };
585
+ const req = lib.request(options, (res) => {
586
+ let data = '';
587
+ res.on('data', (chunk) => {
588
+ data += chunk;
589
+ });
590
+ res.on('end', () => {
591
+ try {
592
+ const json = JSON.parse(data);
593
+ // Handle HTTP error status codes
594
+ if (res.statusCode && res.statusCode >= 400) {
595
+ if (res.statusCode === 401) {
596
+ reject(new Error('Authentication failed: Invalid or missing token'));
597
+ }
598
+ else if (res.statusCode === 503 && json.license_status) {
599
+ reject(new errors_1.LicenseError(json.license_message || 'License error', json.license_status, json.hardware_fingerprint));
600
+ }
601
+ else {
602
+ reject(new Error(json.error || `HTTP ${res.statusCode}`));
603
+ }
604
+ return;
605
+ }
606
+ resolve(json);
607
+ }
608
+ catch (e) {
609
+ reject(new Error(`Invalid JSON response: ${data.substring(0, 100)}`));
610
+ }
611
+ });
612
+ });
613
+ req.on('error', (err) => {
614
+ reject(new Error(`HTTP request failed: ${err.message}`));
615
+ });
616
+ req.on('timeout', () => {
617
+ req.destroy();
618
+ reject(new errors_1.CommandTimeoutError(`HTTP ${method} ${path}`));
619
+ });
620
+ if (bodyStr) {
621
+ req.write(bodyStr);
622
+ }
623
+ req.end();
624
+ });
625
+ }
626
+ }
627
+ exports.HttpConnection = HttpConnection;
628
+ /**
629
+ * Factory function to create the appropriate connection based on config
630
+ */
631
+ function createConnection(config) {
632
+ const mode = config.mode || 'local';
633
+ if (mode === 'http') {
634
+ if (!config.http) {
635
+ throw new Error('HTTP configuration is required for HTTP connection mode');
636
+ }
637
+ return new HttpConnection(config);
638
+ }
639
+ return new LocalConnection(config);
640
+ }
641
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"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"}