@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.
Files changed (111) hide show
  1. package/README.md +107 -0
  2. package/dist/extraction/content-cleaner.d.ts +40 -0
  3. package/dist/extraction/content-cleaner.d.ts.map +1 -0
  4. package/dist/extraction/content-cleaner.js +393 -0
  5. package/dist/extraction/content-cleaner.js.map +1 -0
  6. package/dist/extraction/extractor.d.ts +139 -0
  7. package/dist/extraction/extractor.d.ts.map +1 -0
  8. package/dist/extraction/extractor.js +212 -0
  9. package/dist/extraction/extractor.js.map +1 -0
  10. package/dist/extraction/html-processor.d.ts +75 -0
  11. package/dist/extraction/html-processor.d.ts.map +1 -0
  12. package/dist/extraction/html-processor.js +192 -0
  13. package/dist/extraction/html-processor.js.map +1 -0
  14. package/dist/extraction/index.d.ts +14 -0
  15. package/dist/extraction/index.d.ts.map +1 -0
  16. package/dist/extraction/index.js +19 -0
  17. package/dist/extraction/index.js.map +1 -0
  18. package/dist/extraction/list-extractor.d.ts +24 -0
  19. package/dist/extraction/list-extractor.d.ts.map +1 -0
  20. package/dist/extraction/list-extractor.js +303 -0
  21. package/dist/extraction/list-extractor.js.map +1 -0
  22. package/dist/extraction/meta-extractor.d.ts +40 -0
  23. package/dist/extraction/meta-extractor.d.ts.map +1 -0
  24. package/dist/extraction/meta-extractor.js +216 -0
  25. package/dist/extraction/meta-extractor.js.map +1 -0
  26. package/dist/extraction/pagination.d.ts +29 -0
  27. package/dist/extraction/pagination.d.ts.map +1 -0
  28. package/dist/extraction/pagination.js +323 -0
  29. package/dist/extraction/pagination.js.map +1 -0
  30. package/dist/extraction/pattern-detector.d.ts +16 -0
  31. package/dist/extraction/pattern-detector.d.ts.map +1 -0
  32. package/dist/extraction/pattern-detector.js +390 -0
  33. package/dist/extraction/pattern-detector.js.map +1 -0
  34. package/dist/extraction/scrape-session.d.ts +23 -0
  35. package/dist/extraction/scrape-session.d.ts.map +1 -0
  36. package/dist/extraction/scrape-session.js +192 -0
  37. package/dist/extraction/scrape-session.js.map +1 -0
  38. package/dist/extraction/selector-engine.d.ts +23 -0
  39. package/dist/extraction/selector-engine.d.ts.map +1 -0
  40. package/dist/extraction/selector-engine.js +127 -0
  41. package/dist/extraction/selector-engine.js.map +1 -0
  42. package/dist/extraction/table-extractor.d.ts +29 -0
  43. package/dist/extraction/table-extractor.d.ts.map +1 -0
  44. package/dist/extraction/table-extractor.js +282 -0
  45. package/dist/extraction/table-extractor.js.map +1 -0
  46. package/dist/extraction/transforms.d.ts +47 -0
  47. package/dist/extraction/transforms.d.ts.map +1 -0
  48. package/dist/extraction/transforms.js +277 -0
  49. package/dist/extraction/transforms.js.map +1 -0
  50. package/dist/extraction/types.d.ts +199 -0
  51. package/dist/extraction/types.d.ts.map +1 -0
  52. package/dist/extraction/types.js +5 -0
  53. package/dist/extraction/types.js.map +1 -0
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +2 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/playwright/browser-type.d.ts +101 -0
  59. package/dist/playwright/browser-type.d.ts.map +1 -0
  60. package/dist/playwright/browser-type.js +134 -0
  61. package/dist/playwright/browser-type.js.map +1 -0
  62. package/dist/playwright/browser.d.ts +98 -0
  63. package/dist/playwright/browser.d.ts.map +1 -0
  64. package/dist/playwright/browser.js +229 -0
  65. package/dist/playwright/browser.js.map +1 -0
  66. package/dist/playwright/context.d.ts +217 -0
  67. package/dist/playwright/context.d.ts.map +1 -0
  68. package/dist/playwright/context.js +518 -0
  69. package/dist/playwright/context.js.map +1 -0
  70. package/dist/playwright/extractor.d.ts +108 -0
  71. package/dist/playwright/extractor.d.ts.map +1 -0
  72. package/dist/playwright/extractor.js +404 -0
  73. package/dist/playwright/extractor.js.map +1 -0
  74. package/dist/playwright/frame.d.ts +147 -0
  75. package/dist/playwright/frame.d.ts.map +1 -0
  76. package/dist/playwright/frame.js +492 -0
  77. package/dist/playwright/frame.js.map +1 -0
  78. package/dist/playwright/index.d.ts +163 -0
  79. package/dist/playwright/index.d.ts.map +1 -0
  80. package/dist/playwright/index.js +313 -0
  81. package/dist/playwright/index.js.map +1 -0
  82. package/dist/playwright/keyboard.d.ts +74 -0
  83. package/dist/playwright/keyboard.d.ts.map +1 -0
  84. package/dist/playwright/keyboard.js +187 -0
  85. package/dist/playwright/keyboard.js.map +1 -0
  86. package/dist/playwright/locator.d.ts +237 -0
  87. package/dist/playwright/locator.d.ts.map +1 -0
  88. package/dist/playwright/locator.js +667 -0
  89. package/dist/playwright/locator.js.map +1 -0
  90. package/dist/playwright/mouse.d.ts +82 -0
  91. package/dist/playwright/mouse.d.ts.map +1 -0
  92. package/dist/playwright/mouse.js +137 -0
  93. package/dist/playwright/mouse.js.map +1 -0
  94. package/dist/playwright/page-helpers.d.ts +267 -0
  95. package/dist/playwright/page-helpers.d.ts.map +1 -0
  96. package/dist/playwright/page-helpers.js +449 -0
  97. package/dist/playwright/page-helpers.js.map +1 -0
  98. package/dist/playwright/page.d.ts +605 -0
  99. package/dist/playwright/page.d.ts.map +1 -0
  100. package/dist/playwright/page.js +1698 -0
  101. package/dist/playwright/page.js.map +1 -0
  102. package/dist/playwright/response.d.ts +100 -0
  103. package/dist/playwright/response.d.ts.map +1 -0
  104. package/dist/playwright/response.js +194 -0
  105. package/dist/playwright/response.js.map +1 -0
  106. package/dist/playwright/types.d.ts +354 -0
  107. package/dist/playwright/types.d.ts.map +1 -0
  108. package/dist/playwright/types.js +8 -0
  109. package/dist/playwright/types.js.map +1 -0
  110. package/openapi.json +327 -35
  111. package/package.json +10 -1
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Pure value transform pipeline for extraction.
3
+ *
4
+ * No browser dependency. All functions are stateless and side-effect free.
5
+ *
6
+ * Built-in transforms:
7
+ * - trim, lowercase, uppercase, number, clean, slug (from playwright extractor)
8
+ * - date: parse various date formats to ISO-8601 (including relative dates)
9
+ * - price: "$1,299.99" → 1299.99
10
+ * - url: resolve relative URLs to absolute
11
+ * - email: extract email address from text
12
+ * - stripHtml: remove HTML tags and decode all HTML entities
13
+ * - boolean: normalize truthy/falsy strings to "true"/"false"
14
+ * - compact: remove ALL whitespace (including newlines, tabs)
15
+ */
16
+ /**
17
+ * Apply a single named transform to a string value.
18
+ */
19
+ export function applyTransform(value, transform) {
20
+ switch (transform) {
21
+ case 'trim':
22
+ return value.trim();
23
+ case 'lowercase':
24
+ return value.toLowerCase();
25
+ case 'uppercase':
26
+ return value.toUpperCase();
27
+ case 'number': {
28
+ const cleaned = value.replace(/[^0-9.\-,]/g, '').replace(/,/g, '');
29
+ const n = parseFloat(cleaned);
30
+ return isNaN(n) ? null : String(n);
31
+ }
32
+ case 'clean':
33
+ return value.replace(/\s+/g, ' ').trim();
34
+ case 'slug':
35
+ return value
36
+ .toLowerCase()
37
+ .replace(/[^a-z0-9]+/g, '-')
38
+ .replace(/^-|-$/g, '');
39
+ case 'date':
40
+ return parseDate(value);
41
+ case 'price':
42
+ return parsePriceToString(value);
43
+ case 'url':
44
+ // URL resolution needs a base — just clean the value here
45
+ return value.trim();
46
+ case 'email':
47
+ return extractEmail(value);
48
+ case 'stripHtml':
49
+ return stripHtml(value);
50
+ case 'boolean': {
51
+ const lower = value.trim().toLowerCase();
52
+ const truthy = new Set(['yes', 'true', '1', 'on', 'enabled', '✓', '✔', '☑']);
53
+ const falsy = new Set(['no', 'false', '0', 'off', 'disabled', '✗', '✘', '☐']);
54
+ if (truthy.has(lower))
55
+ return 'true';
56
+ if (falsy.has(lower))
57
+ return 'false';
58
+ return value ? 'true' : 'false';
59
+ }
60
+ case 'compact':
61
+ return value.replace(/\s+/g, '').trim();
62
+ default:
63
+ return value;
64
+ }
65
+ }
66
+ /**
67
+ * Apply a pipeline of transforms to a string value.
68
+ */
69
+ export function applyTransforms(value, transforms) {
70
+ if (!transforms || value === null)
71
+ return value;
72
+ const pipeline = Array.isArray(transforms) ? transforms : [transforms];
73
+ let result = value;
74
+ for (const t of pipeline) {
75
+ if (result === null)
76
+ break;
77
+ result = applyTransform(result, t);
78
+ }
79
+ return result;
80
+ }
81
+ /**
82
+ * Apply a regex pattern to extract a substring.
83
+ */
84
+ export function applyPattern(value, pattern, group) {
85
+ if (!pattern || value === null)
86
+ return value;
87
+ try {
88
+ const re = new RegExp(pattern);
89
+ const match = re.exec(value);
90
+ if (!match)
91
+ return null;
92
+ return match[group ?? 0] ?? null;
93
+ }
94
+ catch {
95
+ return value;
96
+ }
97
+ }
98
+ /**
99
+ * Coerce a string to the specified type.
100
+ */
101
+ export function coerceType(value, type) {
102
+ if (value === null)
103
+ return null;
104
+ if (type === 'number') {
105
+ const cleaned = value.replace(/[^0-9.\-,]/g, '').replace(/,/g, '');
106
+ const n = parseFloat(cleaned);
107
+ return isNaN(n) ? null : n;
108
+ }
109
+ return value;
110
+ }
111
+ /**
112
+ * Parse a price string to a number.
113
+ * Handles: "$1,299.99", "EUR 1.299,99", "1 299,99 kr", etc.
114
+ */
115
+ export function parsePrice(value) {
116
+ // Remove currency symbols and whitespace
117
+ let cleaned = value.replace(/[^0-9.,\-\s]/g, '').trim();
118
+ if (!cleaned)
119
+ return null;
120
+ // Detect European format: "1.299,99" or "1 299,99"
121
+ const commaPos = cleaned.lastIndexOf(',');
122
+ const dotPos = cleaned.lastIndexOf('.');
123
+ if (commaPos > dotPos && commaPos > 0) {
124
+ // Comma is the decimal separator (European)
125
+ cleaned = cleaned.replace(/[.\s]/g, '').replace(',', '.');
126
+ }
127
+ else {
128
+ // Dot is the decimal separator (US/UK)
129
+ cleaned = cleaned.replace(/[,\s]/g, '');
130
+ }
131
+ const n = parseFloat(cleaned);
132
+ return isNaN(n) ? null : n;
133
+ }
134
+ /**
135
+ * Parse a date string to ISO-8601 format.
136
+ * Handles common formats: "Jan 15, 2024", "15/01/2024", "2024-01-15", etc.
137
+ */
138
+ export function parseDate(value) {
139
+ const trimmed = value.trim();
140
+ if (!trimmed)
141
+ return null;
142
+ // Relative date patterns
143
+ const relativeResult = parseRelativeDate(trimmed);
144
+ if (relativeResult)
145
+ return relativeResult;
146
+ // Try native Date parsing first
147
+ const d = new Date(trimmed);
148
+ if (!isNaN(d.getTime())) {
149
+ return d.toISOString();
150
+ }
151
+ // Try DD/MM/YYYY or DD-MM-YYYY
152
+ const dmyMatch = /^(\d{1,2})[/\-.](\d{1,2})[/\-.](\d{4})$/.exec(trimmed);
153
+ if (dmyMatch) {
154
+ const [, day, month, year] = dmyMatch;
155
+ const parsed = new Date(`${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}`);
156
+ if (!isNaN(parsed.getTime()))
157
+ return parsed.toISOString();
158
+ }
159
+ // Try "15 Jan 2024" or "15 January 2024"
160
+ const dayMonthYear = /^(\d{1,2})\s+(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s+(\d{4})$/i.exec(trimmed);
161
+ if (dayMonthYear) {
162
+ const parsed = new Date(`${dayMonthYear[2]} ${dayMonthYear[1]}, ${dayMonthYear[3]}`);
163
+ if (!isNaN(parsed.getTime()))
164
+ return parsed.toISOString();
165
+ }
166
+ return null;
167
+ }
168
+ /**
169
+ * Resolve a relative URL against a base URL.
170
+ */
171
+ export function resolveUrl(relative, baseUrl) {
172
+ try {
173
+ return new URL(relative, baseUrl).href;
174
+ }
175
+ catch {
176
+ return relative;
177
+ }
178
+ }
179
+ // ==================== Internal Helpers ====================
180
+ function parseRelativeDate(text) {
181
+ const lower = text.toLowerCase().trim();
182
+ const now = new Date();
183
+ if (lower === 'just now' || lower === 'now') {
184
+ return now.toISOString();
185
+ }
186
+ if (lower === 'today') {
187
+ return new Date(now.getFullYear(), now.getMonth(), now.getDate()).toISOString();
188
+ }
189
+ if (lower === 'yesterday') {
190
+ const d = new Date(now);
191
+ d.setDate(d.getDate() - 1);
192
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate()).toISOString();
193
+ }
194
+ const agoMatch = /^(\d+)\s+(second|minute|hour|day|week|month|year)s?\s+ago$/i.exec(lower);
195
+ if (agoMatch) {
196
+ const amount = parseInt(agoMatch[1], 10);
197
+ const unit = agoMatch[2].toLowerCase();
198
+ const d = new Date(now);
199
+ switch (unit) {
200
+ case 'second':
201
+ d.setSeconds(d.getSeconds() - amount);
202
+ break;
203
+ case 'minute':
204
+ d.setMinutes(d.getMinutes() - amount);
205
+ break;
206
+ case 'hour':
207
+ d.setHours(d.getHours() - amount);
208
+ break;
209
+ case 'day':
210
+ d.setDate(d.getDate() - amount);
211
+ break;
212
+ case 'week':
213
+ d.setDate(d.getDate() - amount * 7);
214
+ break;
215
+ case 'month':
216
+ d.setMonth(d.getMonth() - amount);
217
+ break;
218
+ case 'year':
219
+ d.setFullYear(d.getFullYear() - amount);
220
+ break;
221
+ }
222
+ return d.toISOString();
223
+ }
224
+ return null;
225
+ }
226
+ function parsePriceToString(value) {
227
+ const n = parsePrice(value);
228
+ return n !== null ? String(n) : null;
229
+ }
230
+ function extractEmail(value) {
231
+ const match = /[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}/.exec(value);
232
+ return match ? match[0] : null;
233
+ }
234
+ function stripHtml(value) {
235
+ let result = value
236
+ .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
237
+ .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
238
+ .replace(/<[^>]+>/g, '');
239
+ // Decode numeric HTML entities (decimal and hex)
240
+ result = result.replace(/&#x([0-9a-fA-F]+);/g, (_m, hex) => {
241
+ try {
242
+ return String.fromCodePoint(parseInt(hex, 16));
243
+ }
244
+ catch {
245
+ return '';
246
+ }
247
+ });
248
+ result = result.replace(/&#(\d+);/g, (_m, dec) => {
249
+ try {
250
+ return String.fromCodePoint(parseInt(dec, 10));
251
+ }
252
+ catch {
253
+ return '';
254
+ }
255
+ });
256
+ // Named entities — common ones
257
+ const entities = {
258
+ '&nbsp;': ' ', '&amp;': '&', '&lt;': '<', '&gt;': '>',
259
+ '&quot;': '"', '&#39;': "'", '&apos;': "'",
260
+ '&mdash;': '\u2014', '&ndash;': '\u2013', '&hellip;': '\u2026',
261
+ '&lsquo;': '\u2018', '&rsquo;': '\u2019',
262
+ '&ldquo;': '\u201C', '&rdquo;': '\u201D',
263
+ '&bull;': '\u2022', '&middot;': '\u00B7',
264
+ '&copy;': '\u00A9', '&reg;': '\u00AE', '&trade;': '\u2122',
265
+ '&deg;': '\u00B0', '&plusmn;': '\u00B1', '&times;': '\u00D7', '&divide;': '\u00F7',
266
+ '&frac12;': '\u00BD', '&frac14;': '\u00BC', '&frac34;': '\u00BE',
267
+ '&euro;': '\u20AC', '&pound;': '\u00A3', '&yen;': '\u00A5', '&cent;': '\u00A2',
268
+ '&laquo;': '\u00AB', '&raquo;': '\u00BB',
269
+ '&iexcl;': '\u00A1', '&iquest;': '\u00BF',
270
+ '&sect;': '\u00A7', '&para;': '\u00B6', '&dagger;': '\u2020', '&Dagger;': '\u2021',
271
+ };
272
+ for (const [entity, char] of Object.entries(entities)) {
273
+ result = result.replaceAll(entity, char);
274
+ }
275
+ return result.replace(/\s+/g, ' ').trim();
276
+ }
277
+ //# sourceMappingURL=transforms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transforms.js","sourceRoot":"","sources":["../../src/extraction/transforms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Shared type definitions for the extraction module.
3
+ */
4
+ /** Built-in transform names. */
5
+ export type Transform = 'trim' | 'lowercase' | 'uppercase' | 'number' | 'clean' | 'slug' | 'date' | 'price' | 'url' | 'email' | 'stripHtml' | 'boolean' | 'compact';
6
+ /** Object-based field spec for advanced extraction. */
7
+ export interface ObjectFieldSpec {
8
+ /** CSS selector (default: container itself). */
9
+ selector?: string;
10
+ /** Attribute to extract (default: textContent). */
11
+ attribute?: string;
12
+ /** Return string[] of ALL matches, not just first. */
13
+ all?: boolean;
14
+ /** Type coercion: 'text' (default), 'number', 'html', 'innerHtml'. */
15
+ type?: 'text' | 'number' | 'html' | 'innerHtml';
16
+ /** Regex pattern to apply on extracted text. */
17
+ pattern?: string;
18
+ /** Capture group index (default: 0 = full match). */
19
+ group?: number;
20
+ /** Transform pipeline applied after extraction. */
21
+ transform?: Transform | Transform[];
22
+ /** Fallback value when extraction returns null. */
23
+ default?: string | number | null;
24
+ /** Nested extraction: extract sub-items within each container. */
25
+ nested?: {
26
+ selector: string;
27
+ fields: Record<string, FieldSpec>;
28
+ limit?: number;
29
+ };
30
+ }
31
+ /** A field spec is either a string shorthand or an object spec. */
32
+ export type FieldSpec = string | ObjectFieldSpec;
33
+ /** Extracted record — values can be string, number, null, string[], or nested records. */
34
+ export type ExtractedRecord = Record<string, unknown>;
35
+ /** Result of an extraction operation. */
36
+ export interface ExtractionResult {
37
+ /** Extracted items. */
38
+ items: ExtractedRecord[];
39
+ /** Total number of items extracted. */
40
+ totalItems: number;
41
+ /** Number of pages scraped (for multi-page). */
42
+ pagesScraped: number;
43
+ /** Page URLs visited. */
44
+ pageUrls: string[];
45
+ /** Whether the scrape completed or was aborted/limited. */
46
+ complete: boolean;
47
+ /** Duration in milliseconds. */
48
+ durationMs: number;
49
+ }
50
+ /** Meta tag extraction result. */
51
+ export interface MetaData {
52
+ title: string | null;
53
+ description: string | null;
54
+ canonical: string | null;
55
+ og: Record<string, string>;
56
+ twitter: Record<string, string>;
57
+ jsonLd: object[];
58
+ microdata: ExtractedRecord[];
59
+ feeds: FeedLink[];
60
+ favicon: string | null;
61
+ other: Record<string, string>;
62
+ }
63
+ /** RSS/Atom feed link. */
64
+ export interface FeedLink {
65
+ type: 'rss' | 'atom' | 'unknown';
66
+ href: string;
67
+ title: string | null;
68
+ }
69
+ /** Detected repeating DOM pattern. */
70
+ export interface DetectedPattern {
71
+ /** CSS selector for the container. */
72
+ containerSelector: string;
73
+ /** CSS selector for individual items. */
74
+ itemSelector: string;
75
+ /** Number of items found. */
76
+ itemCount: number;
77
+ /** Confidence score (0-1). */
78
+ confidence: number;
79
+ /** Inferred field names and selectors. */
80
+ fields: Record<string, FieldSpec>;
81
+ /** Sample extracted items. */
82
+ sample: ExtractedRecord[];
83
+ }
84
+ /** Options for pattern detection. */
85
+ export interface DetectOptions {
86
+ /** Minimum number of repeating items to consider (default: 3). */
87
+ minCount?: number;
88
+ /** Minimum confidence score (default: 0.5). */
89
+ minConfidence?: number;
90
+ /** Hint about what you're looking for. */
91
+ hint?: string;
92
+ /** Limit detection to a specific region selector. */
93
+ region?: string;
94
+ }
95
+ /** Options for table extraction. */
96
+ export interface TableOptions {
97
+ /** Override header names. */
98
+ headers?: string[];
99
+ /** Number of rows to skip after header. */
100
+ skipRows?: number;
101
+ /** Maximum rows to extract. */
102
+ maxRows?: number;
103
+ /** Transpose the table (swap rows/columns). */
104
+ transpose?: boolean;
105
+ /** Column type coercion map. */
106
+ columnTypes?: Record<string, 'text' | 'number'>;
107
+ }
108
+ /** Options for content cleaning. */
109
+ export interface CleanOptions {
110
+ /** Remove cookie consent banners (default: true). */
111
+ cookieBanners?: boolean;
112
+ /** Close modal dialogs (default: true). */
113
+ modals?: boolean;
114
+ /** Remove position:fixed/sticky elements (default: true). */
115
+ fixedElements?: boolean;
116
+ /** Remove ad elements (default: false). */
117
+ ads?: boolean;
118
+ /** Trigger lazy-loaded content (default: false). */
119
+ lazyLoad?: boolean;
120
+ /** Number of scrolls for lazy loading (default: 3). */
121
+ lazyLoadScrolls?: number;
122
+ /** Wait time between lazy load scrolls in ms (default: 500). */
123
+ lazyLoadWait?: number;
124
+ }
125
+ /** Result of content cleaning. */
126
+ export interface CleanResult {
127
+ /** Number of elements removed. */
128
+ removedCount: number;
129
+ /** Types of elements removed. */
130
+ removedTypes: string[];
131
+ }
132
+ /** Pagination configuration. */
133
+ export interface PaginationConfig {
134
+ /** Pagination type. */
135
+ type: 'click-next' | 'url-pattern' | 'infinite-scroll' | 'load-more' | 'url-list';
136
+ /** CSS selector for the "next" button (for click-next, load-more). */
137
+ nextSelector?: string;
138
+ /** URL pattern with {page} placeholder (for url-pattern). */
139
+ urlPattern?: string;
140
+ /** Starting page number (for url-pattern, default: 1). */
141
+ startPage?: number;
142
+ /** Explicit list of URLs to visit (for url-list). */
143
+ urls?: string[];
144
+ /** CSS selector for the scroll sentinel (for infinite-scroll). */
145
+ scrollSelector?: string;
146
+ /** Wait time after navigation/scroll in ms (default: 1000). */
147
+ waitAfter?: number;
148
+ }
149
+ /** Options for multi-page scraping. */
150
+ export interface ScrapeOptions {
151
+ /** Field specs for extraction. */
152
+ fields?: Record<string, FieldSpec>;
153
+ /** Pagination config (auto-detected if not provided). */
154
+ pagination?: PaginationConfig;
155
+ /** Maximum pages to scrape (default: 10). */
156
+ maxPages?: number;
157
+ /** Maximum items to collect (default: unlimited). */
158
+ maxItems?: number;
159
+ /** Clean obstructions before extraction (default: true). */
160
+ clean?: boolean;
161
+ /** Delay between pages in ms (default: 500). */
162
+ pageDelay?: number;
163
+ /** Deduplicate items by field name. */
164
+ deduplicateBy?: string;
165
+ /** Follow detail page links. */
166
+ follow?: FollowConfig;
167
+ /** Callback fired after each page. */
168
+ onPage?: (pageNum: number, items: ExtractedRecord[]) => void;
169
+ /** Callback fired for each item. */
170
+ onItem?: (item: ExtractedRecord) => void;
171
+ }
172
+ /** Configuration for following detail page links. */
173
+ export interface FollowConfig {
174
+ /** CSS selector for the detail link (relative to item container). */
175
+ selector: string;
176
+ /** Attribute containing the URL (default: 'href'). */
177
+ attribute?: string;
178
+ /** Fields to extract from the detail page. */
179
+ fields: Record<string, FieldSpec>;
180
+ /** Container selector on the detail page (default: 'body'). */
181
+ containerSelector?: string;
182
+ /** Wait time after navigating to detail page in ms (default: 1000). */
183
+ waitAfter?: number;
184
+ }
185
+ /** Page info returned by browser. */
186
+ export interface PageInfo {
187
+ url: string;
188
+ title: string;
189
+ }
190
+ /** Options for list extraction. */
191
+ export interface ListOptions {
192
+ /** CSS selector for individual items within the container. */
193
+ itemSelector?: string;
194
+ /** Field specs (auto-detected if not provided). */
195
+ fields?: Record<string, FieldSpec>;
196
+ /** Maximum items to extract. */
197
+ limit?: number;
198
+ }
199
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extraction/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Shared type definitions for the extraction module.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extraction/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/dist/index.d.ts CHANGED
@@ -36,5 +36,6 @@ export { HTTPTransport } from './transport/http.js';
36
36
  export { WebSocketTransport } from './transport/websocket.js';
37
37
  export { TokenAuth } from './auth/token.js';
38
38
  export { JWTAuth, decodeJWT, isJWTExpired } from './auth/jwt.js';
39
+ export { Extractor } from './extraction/index.js';
39
40
  export declare const VERSION = "2.0.0";
40
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAEL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,EAEZ,YAAY,EACZ,SAAS,EACT,WAAW,EAEX,cAAc,EACd,YAAY,EAEZ,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EAEjB,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGpF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGjE,eAAO,MAAM,OAAO,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,OAAO,EAEL,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,EAEZ,YAAY,EACZ,SAAS,EACT,WAAW,EAEX,cAAc,EACd,YAAY,EAEZ,IAAI,EACJ,QAAQ,EACR,aAAa,EACb,UAAU,EACV,UAAU,EACV,eAAe,EACf,iBAAiB,EAEjB,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGpF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGlD,eAAO,MAAM,OAAO,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -45,6 +45,8 @@ export { WebSocketTransport } from './transport/websocket.js';
45
45
  // Auth (for advanced use)
46
46
  export { TokenAuth } from './auth/token.js';
47
47
  export { JWTAuth, decodeJWT, isJWTExpired } from './auth/jwt.js';
48
+ // Extraction
49
+ export { Extractor } from './extraction/index.js';
48
50
  // Version
49
51
  export const VERSION = '2.0.0';
50
52
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,QAAQ;AACR,OAAO;AACL,QAAQ;AACR,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,GAoBb,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEpF,iBAAiB;AACjB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,0BAA0B;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE,UAAU;AACV,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,QAAQ;AACR,OAAO;AACL,QAAQ;AACR,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,YAAY,GAoBb,MAAM,YAAY,CAAC;AAEpB,SAAS;AACT,OAAO,EACL,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,GACrB,MAAM,aAAa,CAAC;AAErB,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAEpF,iBAAiB;AACjB,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,+BAA+B;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,0BAA0B;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEjE,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,UAAU;AACV,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Playwright-compatible BrowserType class for Owl Browser.
3
+ *
4
+ * Provides chromium.connect() and chromium.launch() entry points
5
+ * that mirror Playwright's top-level API. Owl Browser only supports
6
+ * remote connections (connect), not local browser launches.
7
+ *
8
+ * Includes connectOverCDP(), launchPersistentContext(), and launchServer()
9
+ * stubs for full Playwright API coverage.
10
+ */
11
+ import { Browser } from './browser.js';
12
+ import type { BrowserConnectOptions, BrowserContextOptions, LaunchOptions } from './types.js';
13
+ /**
14
+ * BrowserType provides factory methods for creating Browser instances.
15
+ *
16
+ * In Playwright, you access this as `chromium`, `firefox`, or `webkit`.
17
+ * With Owl Browser, all three aliases point to the same implementation
18
+ * since Owl Browser uses its own Chromium-based engine.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { chromium } from '@olib-ai/owl-browser-sdk/playwright';
23
+ *
24
+ * // Connect to a running Owl Browser instance
25
+ * const browser = await chromium.connect({
26
+ * wsEndpoint: 'http://localhost:8080',
27
+ * token: 'your-token',
28
+ * });
29
+ *
30
+ * const context = await browser.newContext();
31
+ * const page = await context.newPage();
32
+ * await page.goto('https://example.com');
33
+ * ```
34
+ */
35
+ export declare class BrowserType {
36
+ private readonly _name;
37
+ constructor(name: string);
38
+ /** Browser engine name. */
39
+ name(): string;
40
+ /** Executable path (not applicable for Owl Browser). */
41
+ executablePath(): string;
42
+ /**
43
+ * Connect to a running Owl Browser server.
44
+ *
45
+ * This is the primary way to create a Browser instance.
46
+ * The server must already be running and accessible at the given URL.
47
+ *
48
+ * @param options - Connection options (endpoint URL and auth token)
49
+ * @returns A connected Browser instance
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * const browser = await chromium.connect({
54
+ * wsEndpoint: 'http://localhost:8080',
55
+ * token: 'test-token',
56
+ * });
57
+ * ```
58
+ */
59
+ connect(options: BrowserConnectOptions): Promise<Browser>;
60
+ /**
61
+ * Connect to a browser over CDP.
62
+ *
63
+ * Alias for connect() in Owl Browser context.
64
+ *
65
+ * @param options - Connection options
66
+ * @returns A connected Browser instance
67
+ */
68
+ connectOverCDP(options: BrowserConnectOptions): Promise<Browser>;
69
+ /**
70
+ * Launch a new browser instance.
71
+ *
72
+ * Owl Browser does not support local browser launches.
73
+ * Use connect() to connect to a running Owl Browser server instead.
74
+ *
75
+ * @param options - Launch options (ignored)
76
+ * @throws Error always - use connect() instead
77
+ */
78
+ launch(options?: LaunchOptions): Promise<never>;
79
+ /**
80
+ * Launch a browser with a persistent context (user data directory).
81
+ *
82
+ * Not supported by Owl Browser. Use connect() with profile_path option
83
+ * via browser_create_context for persistent profiles.
84
+ *
85
+ * @param userDataDir - User data directory path
86
+ * @param options - Launch and context options
87
+ * @throws Error always - use connect() instead
88
+ */
89
+ launchPersistentContext(userDataDir: string, options?: LaunchOptions & BrowserContextOptions): Promise<never>;
90
+ /**
91
+ * Launch a browser server.
92
+ *
93
+ * Not supported by Owl Browser. The server must be started independently
94
+ * (via Docker or direct binary execution).
95
+ *
96
+ * @param options - Launch options
97
+ * @throws Error always - start server externally
98
+ */
99
+ launchServer(options?: LaunchOptions): Promise<never>;
100
+ }
101
+ //# sourceMappingURL=browser-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-type.d.ts","sourceRoot":"","sources":["../../src/playwright/browser-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAEnB,IAAI,EAAE,MAAM;IAIxB,2BAA2B;IAC3B,IAAI,IAAI,MAAM;IAId,wDAAwD;IACxD,cAAc,IAAI,MAAM;IAIxB;;;;;;;;;;;;;;;;OAgBG;IACG,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAY/D;;;;;;;OAOG;IACG,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAItE;;;;;;;;OAQG;IACG,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IASrD;;;;;;;;;OASG;IACG,uBAAuB,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GAAG,qBAAqB,GAC9C,OAAO,CAAC,KAAK,CAAC;IAUjB;;;;;;;;OAQG;IACG,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;CAQ5D"}