@olib-ai/owl-browser-sdk 2.0.5 → 2.0.7
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.
- package/README.md +107 -0
- package/dist/extraction/content-cleaner.d.ts +40 -0
- package/dist/extraction/content-cleaner.d.ts.map +1 -0
- package/dist/extraction/content-cleaner.js +393 -0
- package/dist/extraction/content-cleaner.js.map +1 -0
- package/dist/extraction/extractor.d.ts +139 -0
- package/dist/extraction/extractor.d.ts.map +1 -0
- package/dist/extraction/extractor.js +212 -0
- package/dist/extraction/extractor.js.map +1 -0
- package/dist/extraction/html-processor.d.ts +75 -0
- package/dist/extraction/html-processor.d.ts.map +1 -0
- package/dist/extraction/html-processor.js +192 -0
- package/dist/extraction/html-processor.js.map +1 -0
- package/dist/extraction/index.d.ts +14 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +19 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/list-extractor.d.ts +24 -0
- package/dist/extraction/list-extractor.d.ts.map +1 -0
- package/dist/extraction/list-extractor.js +303 -0
- package/dist/extraction/list-extractor.js.map +1 -0
- package/dist/extraction/meta-extractor.d.ts +40 -0
- package/dist/extraction/meta-extractor.d.ts.map +1 -0
- package/dist/extraction/meta-extractor.js +216 -0
- package/dist/extraction/meta-extractor.js.map +1 -0
- package/dist/extraction/pagination.d.ts +29 -0
- package/dist/extraction/pagination.d.ts.map +1 -0
- package/dist/extraction/pagination.js +323 -0
- package/dist/extraction/pagination.js.map +1 -0
- package/dist/extraction/pattern-detector.d.ts +16 -0
- package/dist/extraction/pattern-detector.d.ts.map +1 -0
- package/dist/extraction/pattern-detector.js +390 -0
- package/dist/extraction/pattern-detector.js.map +1 -0
- package/dist/extraction/scrape-session.d.ts +23 -0
- package/dist/extraction/scrape-session.d.ts.map +1 -0
- package/dist/extraction/scrape-session.js +192 -0
- package/dist/extraction/scrape-session.js.map +1 -0
- package/dist/extraction/selector-engine.d.ts +23 -0
- package/dist/extraction/selector-engine.d.ts.map +1 -0
- package/dist/extraction/selector-engine.js +127 -0
- package/dist/extraction/selector-engine.js.map +1 -0
- package/dist/extraction/table-extractor.d.ts +29 -0
- package/dist/extraction/table-extractor.d.ts.map +1 -0
- package/dist/extraction/table-extractor.js +282 -0
- package/dist/extraction/table-extractor.js.map +1 -0
- package/dist/extraction/transforms.d.ts +47 -0
- package/dist/extraction/transforms.d.ts.map +1 -0
- package/dist/extraction/transforms.js +277 -0
- package/dist/extraction/transforms.js.map +1 -0
- package/dist/extraction/types.d.ts +199 -0
- package/dist/extraction/types.d.ts.map +1 -0
- package/dist/extraction/types.js +5 -0
- package/dist/extraction/types.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/playwright/browser-type.d.ts +101 -0
- package/dist/playwright/browser-type.d.ts.map +1 -0
- package/dist/playwright/browser-type.js +134 -0
- package/dist/playwright/browser-type.js.map +1 -0
- package/dist/playwright/browser.d.ts +98 -0
- package/dist/playwright/browser.d.ts.map +1 -0
- package/dist/playwright/browser.js +229 -0
- package/dist/playwright/browser.js.map +1 -0
- package/dist/playwright/context.d.ts +217 -0
- package/dist/playwright/context.d.ts.map +1 -0
- package/dist/playwright/context.js +518 -0
- package/dist/playwright/context.js.map +1 -0
- package/dist/playwright/extractor.d.ts +108 -0
- package/dist/playwright/extractor.d.ts.map +1 -0
- package/dist/playwright/extractor.js +404 -0
- package/dist/playwright/extractor.js.map +1 -0
- package/dist/playwright/frame.d.ts +147 -0
- package/dist/playwright/frame.d.ts.map +1 -0
- package/dist/playwright/frame.js +492 -0
- package/dist/playwright/frame.js.map +1 -0
- package/dist/playwright/index.d.ts +163 -0
- package/dist/playwright/index.d.ts.map +1 -0
- package/dist/playwright/index.js +313 -0
- package/dist/playwright/index.js.map +1 -0
- package/dist/playwright/keyboard.d.ts +74 -0
- package/dist/playwright/keyboard.d.ts.map +1 -0
- package/dist/playwright/keyboard.js +187 -0
- package/dist/playwright/keyboard.js.map +1 -0
- package/dist/playwright/locator.d.ts +237 -0
- package/dist/playwright/locator.d.ts.map +1 -0
- package/dist/playwright/locator.js +667 -0
- package/dist/playwright/locator.js.map +1 -0
- package/dist/playwright/mouse.d.ts +82 -0
- package/dist/playwright/mouse.d.ts.map +1 -0
- package/dist/playwright/mouse.js +137 -0
- package/dist/playwright/mouse.js.map +1 -0
- package/dist/playwright/page-helpers.d.ts +267 -0
- package/dist/playwright/page-helpers.d.ts.map +1 -0
- package/dist/playwright/page-helpers.js +449 -0
- package/dist/playwright/page-helpers.js.map +1 -0
- package/dist/playwright/page.d.ts +605 -0
- package/dist/playwright/page.d.ts.map +1 -0
- package/dist/playwright/page.js +1698 -0
- package/dist/playwright/page.js.map +1 -0
- package/dist/playwright/response.d.ts +100 -0
- package/dist/playwright/response.d.ts.map +1 -0
- package/dist/playwright/response.js +194 -0
- package/dist/playwright/response.js.map +1 -0
- package/dist/playwright/types.d.ts +354 -0
- package/dist/playwright/types.d.ts.map +1 -0
- package/dist/playwright/types.js +8 -0
- package/dist/playwright/types.js.map +1 -0
- package/openapi.json +327 -35
- package/package.json +10 -1
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright-compatible API for Owl Browser.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a drop-in Playwright-style API that translates
|
|
5
|
+
* Playwright method calls into Owl Browser tool executions. Import
|
|
6
|
+
* `chromium` (or `firefox`/`webkit` aliases) and use `.connect()` to
|
|
7
|
+
* establish a connection to a running Owl Browser server.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { chromium } from '@olib-ai/owl-browser-sdk/playwright';
|
|
12
|
+
*
|
|
13
|
+
* const browser = await chromium.connect({
|
|
14
|
+
* wsEndpoint: 'http://localhost:8080',
|
|
15
|
+
* token: 'test-token',
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const context = await browser.newContext({
|
|
19
|
+
* viewport: { width: 1280, height: 720 },
|
|
20
|
+
* locale: 'en-US',
|
|
21
|
+
* });
|
|
22
|
+
* const page = await context.newPage();
|
|
23
|
+
*
|
|
24
|
+
* await page.goto('https://example.com');
|
|
25
|
+
* await page.click('#submit');
|
|
26
|
+
* await page.fill('#email', 'user@example.com');
|
|
27
|
+
*
|
|
28
|
+
* // Network interception
|
|
29
|
+
* await page.route('**\/api/**', async route => {
|
|
30
|
+
* await route.fulfill({ status: 200, body: '{"mock": true}' });
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // Locators
|
|
34
|
+
* await page.getByRole('button', { name: 'Submit' }).click();
|
|
35
|
+
* await page.getByText('Welcome').isVisible();
|
|
36
|
+
*
|
|
37
|
+
* const title = await page.title();
|
|
38
|
+
* console.log('Page title:', title);
|
|
39
|
+
*
|
|
40
|
+
* await page.screenshot({ path: 'screenshot.png' });
|
|
41
|
+
*
|
|
42
|
+
* await context.close();
|
|
43
|
+
* await browser.close();
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @packageDocumentation
|
|
47
|
+
*/
|
|
48
|
+
// ==================== Classes ====================
|
|
49
|
+
export { Browser } from './browser.js';
|
|
50
|
+
export { BrowserContext } from './context.js';
|
|
51
|
+
export { Page } from './page.js';
|
|
52
|
+
export { queryAll, queryFirst, extractTable, extractMeta, extractStructuredData, countElements, } from './extractor.js';
|
|
53
|
+
export { Locator, NthLocator } from './locator.js';
|
|
54
|
+
export { Frame, FrameLocator, FrameScopedLocator } from './frame.js';
|
|
55
|
+
export { Keyboard } from './keyboard.js';
|
|
56
|
+
export { Mouse } from './mouse.js';
|
|
57
|
+
export { Response, Request } from './response.js';
|
|
58
|
+
export { BrowserType } from './browser-type.js';
|
|
59
|
+
// Page helper classes
|
|
60
|
+
export { Route, RouteRequest, Dialog, ConsoleMessage, Download, Video, } from './page-helpers.js';
|
|
61
|
+
// ==================== Browser Type Instances ====================
|
|
62
|
+
import { BrowserType } from './browser-type.js';
|
|
63
|
+
/**
|
|
64
|
+
* Chromium browser type.
|
|
65
|
+
*
|
|
66
|
+
* Primary entry point for connecting to Owl Browser.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* const browser = await chromium.connect({
|
|
71
|
+
* wsEndpoint: 'http://localhost:8080',
|
|
72
|
+
* token: 'test-token',
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export const chromium = new BrowserType('chromium');
|
|
77
|
+
/**
|
|
78
|
+
* Firefox browser type (alias for chromium).
|
|
79
|
+
*
|
|
80
|
+
* Owl Browser uses its own Chromium-based engine regardless of
|
|
81
|
+
* which browser type is used. This alias exists for Playwright
|
|
82
|
+
* code compatibility.
|
|
83
|
+
*/
|
|
84
|
+
export const firefox = new BrowserType('firefox');
|
|
85
|
+
/**
|
|
86
|
+
* WebKit browser type (alias for chromium).
|
|
87
|
+
*
|
|
88
|
+
* Owl Browser uses its own Chromium-based engine regardless of
|
|
89
|
+
* which browser type is used. This alias exists for Playwright
|
|
90
|
+
* code compatibility.
|
|
91
|
+
*/
|
|
92
|
+
export const webkit = new BrowserType('webkit');
|
|
93
|
+
/**
|
|
94
|
+
* Device descriptors for device emulation.
|
|
95
|
+
*
|
|
96
|
+
* Matches Playwright's `devices` dictionary for common mobile and
|
|
97
|
+
* tablet devices. Use with browser.newContext() to emulate a device.
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* ```typescript
|
|
101
|
+
* import { chromium, devices } from '@olib-ai/owl-browser-sdk/playwright';
|
|
102
|
+
*
|
|
103
|
+
* const browser = await chromium.connect({ wsEndpoint: '...', token: '...' });
|
|
104
|
+
* const context = await browser.newContext({
|
|
105
|
+
* ...devices['iPhone 14'],
|
|
106
|
+
* });
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export const devices = {
|
|
110
|
+
'Desktop Chrome': {
|
|
111
|
+
viewport: { width: 1280, height: 720 },
|
|
112
|
+
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
113
|
+
deviceScaleFactor: 1,
|
|
114
|
+
isMobile: false,
|
|
115
|
+
hasTouch: false,
|
|
116
|
+
defaultBrowserType: 'chromium',
|
|
117
|
+
},
|
|
118
|
+
'Desktop Firefox': {
|
|
119
|
+
viewport: { width: 1280, height: 720 },
|
|
120
|
+
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',
|
|
121
|
+
deviceScaleFactor: 1,
|
|
122
|
+
isMobile: false,
|
|
123
|
+
hasTouch: false,
|
|
124
|
+
defaultBrowserType: 'firefox',
|
|
125
|
+
},
|
|
126
|
+
'Desktop Safari': {
|
|
127
|
+
viewport: { width: 1280, height: 720 },
|
|
128
|
+
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 14_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Safari/605.1.15',
|
|
129
|
+
deviceScaleFactor: 1,
|
|
130
|
+
isMobile: false,
|
|
131
|
+
hasTouch: false,
|
|
132
|
+
defaultBrowserType: 'webkit',
|
|
133
|
+
},
|
|
134
|
+
'iPhone 14': {
|
|
135
|
+
viewport: { width: 390, height: 844 },
|
|
136
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
137
|
+
deviceScaleFactor: 3,
|
|
138
|
+
isMobile: true,
|
|
139
|
+
hasTouch: true,
|
|
140
|
+
defaultBrowserType: 'webkit',
|
|
141
|
+
screen: { width: 390, height: 844 },
|
|
142
|
+
},
|
|
143
|
+
'iPhone 14 Pro': {
|
|
144
|
+
viewport: { width: 393, height: 852 },
|
|
145
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
146
|
+
deviceScaleFactor: 3,
|
|
147
|
+
isMobile: true,
|
|
148
|
+
hasTouch: true,
|
|
149
|
+
defaultBrowserType: 'webkit',
|
|
150
|
+
screen: { width: 393, height: 852 },
|
|
151
|
+
},
|
|
152
|
+
'iPhone 14 Pro Max': {
|
|
153
|
+
viewport: { width: 430, height: 932 },
|
|
154
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
155
|
+
deviceScaleFactor: 3,
|
|
156
|
+
isMobile: true,
|
|
157
|
+
hasTouch: true,
|
|
158
|
+
defaultBrowserType: 'webkit',
|
|
159
|
+
screen: { width: 430, height: 932 },
|
|
160
|
+
},
|
|
161
|
+
'iPhone 15': {
|
|
162
|
+
viewport: { width: 393, height: 852 },
|
|
163
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
164
|
+
deviceScaleFactor: 3,
|
|
165
|
+
isMobile: true,
|
|
166
|
+
hasTouch: true,
|
|
167
|
+
defaultBrowserType: 'webkit',
|
|
168
|
+
screen: { width: 393, height: 852 },
|
|
169
|
+
},
|
|
170
|
+
'iPhone 15 Pro': {
|
|
171
|
+
viewport: { width: 393, height: 852 },
|
|
172
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
173
|
+
deviceScaleFactor: 3,
|
|
174
|
+
isMobile: true,
|
|
175
|
+
hasTouch: true,
|
|
176
|
+
defaultBrowserType: 'webkit',
|
|
177
|
+
screen: { width: 393, height: 852 },
|
|
178
|
+
},
|
|
179
|
+
'iPhone 13': {
|
|
180
|
+
viewport: { width: 390, height: 844 },
|
|
181
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.0 Mobile/15E148 Safari/604.1',
|
|
182
|
+
deviceScaleFactor: 3,
|
|
183
|
+
isMobile: true,
|
|
184
|
+
hasTouch: true,
|
|
185
|
+
defaultBrowserType: 'webkit',
|
|
186
|
+
screen: { width: 390, height: 844 },
|
|
187
|
+
},
|
|
188
|
+
'iPhone 12': {
|
|
189
|
+
viewport: { width: 390, height: 844 },
|
|
190
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1',
|
|
191
|
+
deviceScaleFactor: 3,
|
|
192
|
+
isMobile: true,
|
|
193
|
+
hasTouch: true,
|
|
194
|
+
defaultBrowserType: 'webkit',
|
|
195
|
+
screen: { width: 390, height: 844 },
|
|
196
|
+
},
|
|
197
|
+
'iPhone SE': {
|
|
198
|
+
viewport: { width: 375, height: 667 },
|
|
199
|
+
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
200
|
+
deviceScaleFactor: 2,
|
|
201
|
+
isMobile: true,
|
|
202
|
+
hasTouch: true,
|
|
203
|
+
defaultBrowserType: 'webkit',
|
|
204
|
+
screen: { width: 375, height: 667 },
|
|
205
|
+
},
|
|
206
|
+
'iPad (gen 7)': {
|
|
207
|
+
viewport: { width: 810, height: 1080 },
|
|
208
|
+
userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
209
|
+
deviceScaleFactor: 2,
|
|
210
|
+
isMobile: true,
|
|
211
|
+
hasTouch: true,
|
|
212
|
+
defaultBrowserType: 'webkit',
|
|
213
|
+
screen: { width: 810, height: 1080 },
|
|
214
|
+
},
|
|
215
|
+
'iPad Pro 11': {
|
|
216
|
+
viewport: { width: 834, height: 1194 },
|
|
217
|
+
userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
218
|
+
deviceScaleFactor: 2,
|
|
219
|
+
isMobile: true,
|
|
220
|
+
hasTouch: true,
|
|
221
|
+
defaultBrowserType: 'webkit',
|
|
222
|
+
screen: { width: 834, height: 1194 },
|
|
223
|
+
},
|
|
224
|
+
'iPad Mini': {
|
|
225
|
+
viewport: { width: 768, height: 1024 },
|
|
226
|
+
userAgent: 'Mozilla/5.0 (iPad; CPU OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1',
|
|
227
|
+
deviceScaleFactor: 2,
|
|
228
|
+
isMobile: true,
|
|
229
|
+
hasTouch: true,
|
|
230
|
+
defaultBrowserType: 'webkit',
|
|
231
|
+
screen: { width: 768, height: 1024 },
|
|
232
|
+
},
|
|
233
|
+
'Pixel 7': {
|
|
234
|
+
viewport: { width: 412, height: 915 },
|
|
235
|
+
userAgent: 'Mozilla/5.0 (Linux; Android 14; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
|
236
|
+
deviceScaleFactor: 2.625,
|
|
237
|
+
isMobile: true,
|
|
238
|
+
hasTouch: true,
|
|
239
|
+
defaultBrowserType: 'chromium',
|
|
240
|
+
screen: { width: 412, height: 915 },
|
|
241
|
+
},
|
|
242
|
+
'Pixel 5': {
|
|
243
|
+
viewport: { width: 393, height: 851 },
|
|
244
|
+
userAgent: 'Mozilla/5.0 (Linux; Android 13; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
|
245
|
+
deviceScaleFactor: 2.75,
|
|
246
|
+
isMobile: true,
|
|
247
|
+
hasTouch: true,
|
|
248
|
+
defaultBrowserType: 'chromium',
|
|
249
|
+
screen: { width: 393, height: 851 },
|
|
250
|
+
},
|
|
251
|
+
'Galaxy S21': {
|
|
252
|
+
viewport: { width: 360, height: 800 },
|
|
253
|
+
userAgent: 'Mozilla/5.0 (Linux; Android 13; SM-G991B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
|
254
|
+
deviceScaleFactor: 3,
|
|
255
|
+
isMobile: true,
|
|
256
|
+
hasTouch: true,
|
|
257
|
+
defaultBrowserType: 'chromium',
|
|
258
|
+
screen: { width: 360, height: 800 },
|
|
259
|
+
},
|
|
260
|
+
'Galaxy S23': {
|
|
261
|
+
viewport: { width: 360, height: 780 },
|
|
262
|
+
userAgent: 'Mozilla/5.0 (Linux; Android 14; SM-S911B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
|
263
|
+
deviceScaleFactor: 3,
|
|
264
|
+
isMobile: true,
|
|
265
|
+
hasTouch: true,
|
|
266
|
+
defaultBrowserType: 'chromium',
|
|
267
|
+
screen: { width: 360, height: 780 },
|
|
268
|
+
},
|
|
269
|
+
'Galaxy Tab S8': {
|
|
270
|
+
viewport: { width: 800, height: 1280 },
|
|
271
|
+
userAgent: 'Mozilla/5.0 (Linux; Android 13; SM-X700) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
272
|
+
deviceScaleFactor: 1.5,
|
|
273
|
+
isMobile: true,
|
|
274
|
+
hasTouch: true,
|
|
275
|
+
defaultBrowserType: 'chromium',
|
|
276
|
+
screen: { width: 800, height: 1280 },
|
|
277
|
+
},
|
|
278
|
+
};
|
|
279
|
+
// ==================== Selectors ====================
|
|
280
|
+
/**
|
|
281
|
+
* Selectors utility for registering custom selector engines.
|
|
282
|
+
*
|
|
283
|
+
* Provides a Playwright-compatible API for selector engine management.
|
|
284
|
+
* In Owl Browser, selectors are handled natively by the semantic matcher.
|
|
285
|
+
*/
|
|
286
|
+
export const selectors = {
|
|
287
|
+
/**
|
|
288
|
+
* Register a custom selector engine.
|
|
289
|
+
*
|
|
290
|
+
* Stub: Owl Browser uses its own semantic matching engine.
|
|
291
|
+
*
|
|
292
|
+
* @param name - Engine name
|
|
293
|
+
* @param script - Engine implementation
|
|
294
|
+
*/
|
|
295
|
+
async register(name, script) {
|
|
296
|
+
void name;
|
|
297
|
+
void script;
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
// ==================== Errors ====================
|
|
301
|
+
export { OwlBrowserError, ConnectionError, AuthenticationError, ToolExecutionError, TimeoutError, } from '../errors.js';
|
|
302
|
+
// ==================== Default Export ====================
|
|
303
|
+
/**
|
|
304
|
+
* Default export matching Playwright's module structure.
|
|
305
|
+
*
|
|
306
|
+
* @example
|
|
307
|
+
* ```typescript
|
|
308
|
+
* import playwright from '@olib-ai/owl-browser-sdk/playwright';
|
|
309
|
+
* const browser = await playwright.chromium.connect({ ... });
|
|
310
|
+
* ```
|
|
311
|
+
*/
|
|
312
|
+
export default { chromium, firefox, webkit, devices, selectors };
|
|
313
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright-compatible Keyboard class for Owl Browser.
|
|
3
|
+
*
|
|
4
|
+
* Maps Playwright keyboard operations to Owl Browser tool executions.
|
|
5
|
+
* Supports key combinations via browser_keyboard_combo and single key
|
|
6
|
+
* presses via browser_press_key, with proper Playwright key name mapping.
|
|
7
|
+
*/
|
|
8
|
+
import type { OwlBrowser } from '../client.js';
|
|
9
|
+
/**
|
|
10
|
+
* Keyboard provides methods for simulating keyboard input.
|
|
11
|
+
*
|
|
12
|
+
* Mirrors the Playwright Keyboard API. Key names follow the
|
|
13
|
+
* Playwright/CDP key naming convention (e.g., 'Enter', 'Tab', 'ArrowDown').
|
|
14
|
+
*/
|
|
15
|
+
export declare class Keyboard {
|
|
16
|
+
private readonly _client;
|
|
17
|
+
private readonly _contextId;
|
|
18
|
+
private readonly _pressedModifiers;
|
|
19
|
+
constructor(client: OwlBrowser, contextId: string);
|
|
20
|
+
/**
|
|
21
|
+
* Press a key combination and release immediately.
|
|
22
|
+
*
|
|
23
|
+
* Supports key combinations with '+' separator (e.g., 'Control+a', 'Meta+Shift+p').
|
|
24
|
+
* Single keys are dispatched via browser_press_key.
|
|
25
|
+
* Combinations with modifiers use browser_keyboard_combo.
|
|
26
|
+
*
|
|
27
|
+
* @param key - Key name or combination (e.g., 'Enter', 'Control+c')
|
|
28
|
+
* @param options - Optional delay between keyDown and keyUp in ms
|
|
29
|
+
*/
|
|
30
|
+
press(key: string, options?: {
|
|
31
|
+
delay?: number;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Type text character by character with human-like keystroke simulation.
|
|
35
|
+
*
|
|
36
|
+
* Unlike press(), this dispatches individual character input events.
|
|
37
|
+
* For typing into a specific element, use page.type(selector, text) instead.
|
|
38
|
+
*
|
|
39
|
+
* @param text - Text to type
|
|
40
|
+
* @param options - Optional delay between keystrokes in ms
|
|
41
|
+
*/
|
|
42
|
+
type(text: string, options?: {
|
|
43
|
+
delay?: number;
|
|
44
|
+
}): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Insert text directly without dispatching individual key events.
|
|
47
|
+
*
|
|
48
|
+
* Faster than type() but does not trigger keydown/keyup events.
|
|
49
|
+
*
|
|
50
|
+
* @param text - Text to insert
|
|
51
|
+
*/
|
|
52
|
+
insertText(text: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Press and hold a key (dispatches keydown event).
|
|
55
|
+
*
|
|
56
|
+
* Must be followed by a corresponding up() call.
|
|
57
|
+
* Primarily used for modifier keys (Shift, Control, Alt, Meta).
|
|
58
|
+
*
|
|
59
|
+
* @param key - Key name to press down
|
|
60
|
+
*/
|
|
61
|
+
down(key: string): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Release a previously held key (dispatches keyup event).
|
|
64
|
+
*
|
|
65
|
+
* @param key - Key name to release
|
|
66
|
+
*/
|
|
67
|
+
up(key: string): Promise<void>;
|
|
68
|
+
/**
|
|
69
|
+
* Normalize Playwright modifier names to Owl combo format.
|
|
70
|
+
* Playwright uses 'Control', Owl expects 'Ctrl'.
|
|
71
|
+
*/
|
|
72
|
+
private _normalizeModifier;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=keyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/playwright/keyboard.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAqC/C;;;;;GAKG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0B;gBAEhD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM;IAKjD;;;;;;;;;OASG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BrE;;;;;;;;OAQG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrE;;;;;;OAMG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C;;;;;;;OAOG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtC;;;;OAIG;IACG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAsB3B"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Playwright-compatible Keyboard class for Owl Browser.
|
|
3
|
+
*
|
|
4
|
+
* Maps Playwright keyboard operations to Owl Browser tool executions.
|
|
5
|
+
* Supports key combinations via browser_keyboard_combo and single key
|
|
6
|
+
* presses via browser_press_key, with proper Playwright key name mapping.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Map of Playwright key names to Owl Browser key names.
|
|
10
|
+
* Owl Browser accepts CDP-compatible key names, but some Playwright
|
|
11
|
+
* shortcuts differ in casing or naming.
|
|
12
|
+
*/
|
|
13
|
+
const KEY_MAP = {
|
|
14
|
+
'ArrowUp': 'ArrowUp',
|
|
15
|
+
'ArrowDown': 'ArrowDown',
|
|
16
|
+
'ArrowLeft': 'ArrowLeft',
|
|
17
|
+
'ArrowRight': 'ArrowRight',
|
|
18
|
+
'Backspace': 'Backspace',
|
|
19
|
+
'Delete': 'Delete',
|
|
20
|
+
'End': 'End',
|
|
21
|
+
'Enter': 'Enter',
|
|
22
|
+
'Escape': 'Escape',
|
|
23
|
+
'Home': 'Home',
|
|
24
|
+
'Insert': 'Insert',
|
|
25
|
+
'PageDown': 'PageDown',
|
|
26
|
+
'PageUp': 'PageUp',
|
|
27
|
+
'Space': 'Space',
|
|
28
|
+
'Tab': 'Tab',
|
|
29
|
+
'F1': 'F1', 'F2': 'F2', 'F3': 'F3', 'F4': 'F4',
|
|
30
|
+
'F5': 'F5', 'F6': 'F6', 'F7': 'F7', 'F8': 'F8',
|
|
31
|
+
'F9': 'F9', 'F10': 'F10', 'F11': 'F11', 'F12': 'F12',
|
|
32
|
+
};
|
|
33
|
+
/** Modifier key names recognized by Playwright. */
|
|
34
|
+
const MODIFIER_KEYS = new Set([
|
|
35
|
+
'Shift', 'Control', 'Alt', 'Meta',
|
|
36
|
+
'ShiftLeft', 'ShiftRight',
|
|
37
|
+
'ControlLeft', 'ControlRight',
|
|
38
|
+
'AltLeft', 'AltRight',
|
|
39
|
+
'MetaLeft', 'MetaRight',
|
|
40
|
+
]);
|
|
41
|
+
/**
|
|
42
|
+
* Keyboard provides methods for simulating keyboard input.
|
|
43
|
+
*
|
|
44
|
+
* Mirrors the Playwright Keyboard API. Key names follow the
|
|
45
|
+
* Playwright/CDP key naming convention (e.g., 'Enter', 'Tab', 'ArrowDown').
|
|
46
|
+
*/
|
|
47
|
+
export class Keyboard {
|
|
48
|
+
_client;
|
|
49
|
+
_contextId;
|
|
50
|
+
_pressedModifiers = new Set();
|
|
51
|
+
constructor(client, contextId) {
|
|
52
|
+
this._client = client;
|
|
53
|
+
this._contextId = contextId;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Press a key combination and release immediately.
|
|
57
|
+
*
|
|
58
|
+
* Supports key combinations with '+' separator (e.g., 'Control+a', 'Meta+Shift+p').
|
|
59
|
+
* Single keys are dispatched via browser_press_key.
|
|
60
|
+
* Combinations with modifiers use browser_keyboard_combo.
|
|
61
|
+
*
|
|
62
|
+
* @param key - Key name or combination (e.g., 'Enter', 'Control+c')
|
|
63
|
+
* @param options - Optional delay between keyDown and keyUp in ms
|
|
64
|
+
*/
|
|
65
|
+
async press(key, options) {
|
|
66
|
+
void options;
|
|
67
|
+
const parts = key.split('+');
|
|
68
|
+
if (parts.length > 1) {
|
|
69
|
+
// Key combination: map to browser_keyboard_combo
|
|
70
|
+
const combo = parts.map(p => this._normalizeModifier(p.trim())).join('+');
|
|
71
|
+
await this._client.execute('browser_keyboard_combo', {
|
|
72
|
+
context_id: this._contextId,
|
|
73
|
+
combo,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
else if (KEY_MAP[key] !== undefined) {
|
|
77
|
+
// Known special key — use browser_press_key
|
|
78
|
+
await this._client.execute('browser_press_key', {
|
|
79
|
+
context_id: this._contextId,
|
|
80
|
+
key: KEY_MAP[key],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
else if (key.length === 1) {
|
|
84
|
+
// Single character (a-z, 0-9, punctuation) — use native browser_press_key
|
|
85
|
+
await this._client.execute('browser_press_key', {
|
|
86
|
+
context_id: this._contextId,
|
|
87
|
+
key,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
// Unknown key name — try browser_press_key and let the server validate
|
|
92
|
+
await this._client.execute('browser_press_key', {
|
|
93
|
+
context_id: this._contextId,
|
|
94
|
+
key,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Type text character by character with human-like keystroke simulation.
|
|
100
|
+
*
|
|
101
|
+
* Unlike press(), this dispatches individual character input events.
|
|
102
|
+
* For typing into a specific element, use page.type(selector, text) instead.
|
|
103
|
+
*
|
|
104
|
+
* @param text - Text to type
|
|
105
|
+
* @param options - Optional delay between keystrokes in ms
|
|
106
|
+
*/
|
|
107
|
+
async type(text, options) {
|
|
108
|
+
void options;
|
|
109
|
+
// Use browser_type with empty selector to type into the currently focused element.
|
|
110
|
+
await this._client.execute('browser_type', {
|
|
111
|
+
context_id: this._contextId,
|
|
112
|
+
selector: '',
|
|
113
|
+
text,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Insert text directly without dispatching individual key events.
|
|
118
|
+
*
|
|
119
|
+
* Faster than type() but does not trigger keydown/keyup events.
|
|
120
|
+
*
|
|
121
|
+
* @param text - Text to insert
|
|
122
|
+
*/
|
|
123
|
+
async insertText(text) {
|
|
124
|
+
// Use browser_type with empty selector to insert into the currently focused element.
|
|
125
|
+
await this._client.execute('browser_type', {
|
|
126
|
+
context_id: this._contextId,
|
|
127
|
+
selector: '',
|
|
128
|
+
text,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Press and hold a key (dispatches keydown event).
|
|
133
|
+
*
|
|
134
|
+
* Must be followed by a corresponding up() call.
|
|
135
|
+
* Primarily used for modifier keys (Shift, Control, Alt, Meta).
|
|
136
|
+
*
|
|
137
|
+
* @param key - Key name to press down
|
|
138
|
+
*/
|
|
139
|
+
async down(key) {
|
|
140
|
+
this._pressedModifiers.add(key);
|
|
141
|
+
if (!MODIFIER_KEYS.has(key)) {
|
|
142
|
+
// For non-modifier keys, dispatch as a press since Owl Browser
|
|
143
|
+
// does not have separate down/up semantics.
|
|
144
|
+
await this._client.execute('browser_press_key', {
|
|
145
|
+
context_id: this._contextId,
|
|
146
|
+
key: KEY_MAP[key] ?? key,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Release a previously held key (dispatches keyup event).
|
|
152
|
+
*
|
|
153
|
+
* @param key - Key name to release
|
|
154
|
+
*/
|
|
155
|
+
async up(key) {
|
|
156
|
+
this._pressedModifiers.delete(key);
|
|
157
|
+
// Owl Browser handles key release automatically with press_key.
|
|
158
|
+
// This method maintains state for API compatibility.
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Normalize Playwright modifier names to Owl combo format.
|
|
162
|
+
* Playwright uses 'Control', Owl expects 'Ctrl'.
|
|
163
|
+
*/
|
|
164
|
+
_normalizeModifier(key) {
|
|
165
|
+
switch (key) {
|
|
166
|
+
case 'Control':
|
|
167
|
+
case 'ControlLeft':
|
|
168
|
+
case 'ControlRight':
|
|
169
|
+
return 'Ctrl';
|
|
170
|
+
case 'Meta':
|
|
171
|
+
case 'MetaLeft':
|
|
172
|
+
case 'MetaRight':
|
|
173
|
+
return 'Meta';
|
|
174
|
+
case 'Shift':
|
|
175
|
+
case 'ShiftLeft':
|
|
176
|
+
case 'ShiftRight':
|
|
177
|
+
return 'Shift';
|
|
178
|
+
case 'Alt':
|
|
179
|
+
case 'AltLeft':
|
|
180
|
+
case 'AltRight':
|
|
181
|
+
return 'Alt';
|
|
182
|
+
default:
|
|
183
|
+
return key;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=keyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/playwright/keyboard.ts"],"names":[],"mappings":"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"}
|