@nahisaho/katashiro-collector 0.3.3 → 0.4.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,184 @@
1
+ /**
2
+ * BrowserOperator - REQ-008準拠のブラウザ操作クラス
3
+ *
4
+ * オーケストレーターと統合するためのシンプルなインターフェースを提供。
5
+ * 内部で既存のBrowserAutomationを活用する。
6
+ *
7
+ * @requirement REQ-008
8
+ * @design REQ-008-01〜REQ-008-06
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import { type PuppeteerLauncher } from './BrowserAutomation.js';
12
+ import type { BrowserConfig } from './types.js';
13
+ /**
14
+ * ブラウザアクションタイプ(REQ-008準拠)
15
+ */
16
+ export type BrowserActionType = 'goto' | 'click' | 'type' | 'scroll' | 'wait' | 'screenshot' | 'evaluate' | 'waitForSelector';
17
+ /**
18
+ * ブラウザアクション(REQ-008準拠)
19
+ */
20
+ export interface BrowserAction {
21
+ /** アクションタイプ */
22
+ type: BrowserActionType;
23
+ /** CSSセレクタ(click, type, scroll, waitForSelector用) */
24
+ selector?: string;
25
+ /** 値(type: テキスト, goto: URL, evaluate: スクリプト) */
26
+ value?: string;
27
+ /** オプション */
28
+ options?: Record<string, unknown>;
29
+ }
30
+ /**
31
+ * ブラウザ観察結果(REQ-008準拠)
32
+ */
33
+ export interface BrowserObservation {
34
+ /** 成功フラグ */
35
+ success: boolean;
36
+ /** アクションタイプ */
37
+ actionType: BrowserActionType;
38
+ /** 結果データ */
39
+ data?: unknown;
40
+ /** スクリーンショット */
41
+ screenshot?: Buffer;
42
+ /** エラーメッセージ(REQ-008-06: セレクタ詳細含む) */
43
+ error?: string;
44
+ /** 実行時間(ミリ秒) */
45
+ duration: number;
46
+ }
47
+ /**
48
+ * BrowserOperatorオプション
49
+ */
50
+ export interface BrowserOptions extends BrowserConfig {
51
+ /** 要素検索のデフォルトタイムアウト(ミリ秒) */
52
+ defaultSelectorTimeout?: number;
53
+ }
54
+ /**
55
+ * BrowserOperatorエラーコード
56
+ */
57
+ export type BrowserOperatorErrorCode = 'NOT_LAUNCHED' | 'ELEMENT_NOT_FOUND' | 'NAVIGATION_FAILED' | 'ACTION_FAILED' | 'EVALUATION_FAILED' | 'TIMEOUT';
58
+ /**
59
+ * BrowserOperatorエラー
60
+ */
61
+ export declare class BrowserOperatorError extends Error {
62
+ readonly code: BrowserOperatorErrorCode;
63
+ readonly selector?: string | undefined;
64
+ readonly cause?: Error | undefined;
65
+ constructor(code: BrowserOperatorErrorCode, message: string, selector?: string | undefined, cause?: Error | undefined);
66
+ }
67
+ /**
68
+ * BrowserOperator - オーケストレーター統合用ブラウザ操作クラス
69
+ *
70
+ * REQ-008準拠:
71
+ * - REQ-008-01: Puppeteer/Playwrightでヘッドレスブラウザを制御
72
+ * - REQ-008-02: goto アクションでURL遷移
73
+ * - REQ-008-03: click, type, scroll, wait 操作
74
+ * - REQ-008-04: screenshot でページキャプチャ
75
+ * - REQ-008-05: evaluate でJavaScript実行
76
+ * - REQ-008-06: 要素未検出時にセレクタ詳細付きエラー
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const operator = new BrowserOperator({ headless: true });
81
+ * await operator.launch();
82
+ *
83
+ * const result = await operator.execute({
84
+ * type: 'goto',
85
+ * value: 'https://example.com'
86
+ * });
87
+ *
88
+ * const clickResult = await operator.execute({
89
+ * type: 'click',
90
+ * selector: '#submit-button'
91
+ * });
92
+ *
93
+ * await operator.close();
94
+ * ```
95
+ */
96
+ export declare class BrowserOperator extends EventEmitter {
97
+ private automation;
98
+ private options;
99
+ private currentUrl;
100
+ private launched;
101
+ constructor(options?: Partial<BrowserOptions>);
102
+ /**
103
+ * Puppeteerランチャーを設定(DI用)
104
+ */
105
+ setPuppeteer(puppeteer: PuppeteerLauncher): void;
106
+ /**
107
+ * ブラウザを起動(REQ-008-01)
108
+ */
109
+ launch(): Promise<void>;
110
+ /**
111
+ * ブラウザを終了
112
+ */
113
+ close(): Promise<void>;
114
+ /**
115
+ * 起動状態を確認
116
+ */
117
+ isLaunched(): boolean;
118
+ /**
119
+ * 現在のURLを取得
120
+ */
121
+ getCurrentUrl(): string | null;
122
+ /**
123
+ * アクションを実行(REQ-008-02〜05)
124
+ */
125
+ execute(action: BrowserAction): Promise<BrowserObservation>;
126
+ /**
127
+ * 複数アクションを順次実行
128
+ */
129
+ executeSequence(actions: BrowserAction[]): Promise<BrowserObservation[]>;
130
+ /**
131
+ * goto - URL遷移(REQ-008-02)
132
+ */
133
+ private executeGoto;
134
+ /**
135
+ * click - クリック操作(REQ-008-03)
136
+ */
137
+ private executeClick;
138
+ /**
139
+ * type - テキスト入力(REQ-008-03)
140
+ */
141
+ private executeType;
142
+ /**
143
+ * scroll - スクロール操作(REQ-008-03)
144
+ */
145
+ private executeScroll;
146
+ /**
147
+ * wait - 待機(REQ-008-03)
148
+ */
149
+ private executeWait;
150
+ /**
151
+ * screenshot - スクリーンショット(REQ-008-04)
152
+ */
153
+ private executeScreenshot;
154
+ /**
155
+ * evaluate - JavaScript実行(REQ-008-05)
156
+ */
157
+ private executeEvaluate;
158
+ /**
159
+ * waitForSelector - セレクタ待機
160
+ */
161
+ private executeWaitForSelector;
162
+ /**
163
+ * ActionResultをBrowserObservationに変換
164
+ */
165
+ private convertActionResult;
166
+ /**
167
+ * エラーObservationを作成
168
+ */
169
+ private createErrorObservation;
170
+ /**
171
+ * セレクタエラーObservationを作成(REQ-008-06)
172
+ */
173
+ private createSelectorError;
174
+ /**
175
+ * エラーをハンドリング
176
+ */
177
+ private handleError;
178
+ /**
179
+ * BrowserAutomationErrorCodeをBrowserOperatorErrorCodeにマッピング
180
+ */
181
+ private mapErrorCode;
182
+ }
183
+ export default BrowserOperator;
184
+ //# sourceMappingURL=BrowserOperator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserOperator.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserOperator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,438 @@
1
+ /**
2
+ * BrowserOperator - REQ-008準拠のブラウザ操作クラス
3
+ *
4
+ * オーケストレーターと統合するためのシンプルなインターフェースを提供。
5
+ * 内部で既存のBrowserAutomationを活用する。
6
+ *
7
+ * @requirement REQ-008
8
+ * @design REQ-008-01〜REQ-008-06
9
+ */
10
+ import { EventEmitter } from 'events';
11
+ import { isErr } from '@nahisaho/katashiro-core';
12
+ import { BrowserAutomation, BrowserAutomationError, } from './BrowserAutomation.js';
13
+ /**
14
+ * BrowserOperatorエラー
15
+ */
16
+ export class BrowserOperatorError extends Error {
17
+ code;
18
+ selector;
19
+ cause;
20
+ constructor(code, message, selector, cause) {
21
+ super(message);
22
+ this.code = code;
23
+ this.selector = selector;
24
+ this.cause = cause;
25
+ this.name = 'BrowserOperatorError';
26
+ }
27
+ }
28
+ // ============================================================================
29
+ // BrowserOperator
30
+ // ============================================================================
31
+ /**
32
+ * BrowserOperator - オーケストレーター統合用ブラウザ操作クラス
33
+ *
34
+ * REQ-008準拠:
35
+ * - REQ-008-01: Puppeteer/Playwrightでヘッドレスブラウザを制御
36
+ * - REQ-008-02: goto アクションでURL遷移
37
+ * - REQ-008-03: click, type, scroll, wait 操作
38
+ * - REQ-008-04: screenshot でページキャプチャ
39
+ * - REQ-008-05: evaluate でJavaScript実行
40
+ * - REQ-008-06: 要素未検出時にセレクタ詳細付きエラー
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * const operator = new BrowserOperator({ headless: true });
45
+ * await operator.launch();
46
+ *
47
+ * const result = await operator.execute({
48
+ * type: 'goto',
49
+ * value: 'https://example.com'
50
+ * });
51
+ *
52
+ * const clickResult = await operator.execute({
53
+ * type: 'click',
54
+ * selector: '#submit-button'
55
+ * });
56
+ *
57
+ * await operator.close();
58
+ * ```
59
+ */
60
+ export class BrowserOperator extends EventEmitter {
61
+ automation;
62
+ options;
63
+ currentUrl = null;
64
+ launched = false;
65
+ constructor(options = {}) {
66
+ super();
67
+ this.options = {
68
+ headless: true,
69
+ timeout: 30000,
70
+ defaultSelectorTimeout: 5000,
71
+ ...options,
72
+ };
73
+ this.automation = new BrowserAutomation(this.options);
74
+ }
75
+ /**
76
+ * Puppeteerランチャーを設定(DI用)
77
+ */
78
+ setPuppeteer(puppeteer) {
79
+ this.automation.setPuppeteer(puppeteer);
80
+ }
81
+ /**
82
+ * ブラウザを起動(REQ-008-01)
83
+ */
84
+ async launch() {
85
+ if (this.launched)
86
+ return;
87
+ this.emit('launching');
88
+ await this.automation.initialize();
89
+ this.launched = true;
90
+ this.emit('launched');
91
+ }
92
+ /**
93
+ * ブラウザを終了
94
+ */
95
+ async close() {
96
+ if (!this.launched)
97
+ return;
98
+ this.emit('closing');
99
+ await this.automation.close();
100
+ this.launched = false;
101
+ this.currentUrl = null;
102
+ this.emit('closed');
103
+ }
104
+ /**
105
+ * 起動状態を確認
106
+ */
107
+ isLaunched() {
108
+ return this.launched;
109
+ }
110
+ /**
111
+ * 現在のURLを取得
112
+ */
113
+ getCurrentUrl() {
114
+ return this.currentUrl;
115
+ }
116
+ /**
117
+ * アクションを実行(REQ-008-02〜05)
118
+ */
119
+ async execute(action) {
120
+ const startTime = Date.now();
121
+ if (!this.launched) {
122
+ return this.createErrorObservation(action.type, 'NOT_LAUNCHED', 'Browser not launched. Call launch() first.', startTime);
123
+ }
124
+ this.emit('action:start', action);
125
+ try {
126
+ let result;
127
+ switch (action.type) {
128
+ case 'goto':
129
+ result = await this.executeGoto(action, startTime);
130
+ break;
131
+ case 'click':
132
+ result = await this.executeClick(action, startTime);
133
+ break;
134
+ case 'type':
135
+ result = await this.executeType(action, startTime);
136
+ break;
137
+ case 'scroll':
138
+ result = await this.executeScroll(action, startTime);
139
+ break;
140
+ case 'wait':
141
+ result = await this.executeWait(action, startTime);
142
+ break;
143
+ case 'screenshot':
144
+ result = await this.executeScreenshot(action, startTime);
145
+ break;
146
+ case 'evaluate':
147
+ result = await this.executeEvaluate(action, startTime);
148
+ break;
149
+ case 'waitForSelector':
150
+ result = await this.executeWaitForSelector(action, startTime);
151
+ break;
152
+ default:
153
+ result = this.createErrorObservation(action.type, 'ACTION_FAILED', `Unknown action type: ${action.type}`, startTime);
154
+ }
155
+ this.emit('action:complete', action, result);
156
+ return result;
157
+ }
158
+ catch (error) {
159
+ const observation = this.handleError(action, error, startTime);
160
+ this.emit('action:error', action, observation);
161
+ return observation;
162
+ }
163
+ }
164
+ /**
165
+ * 複数アクションを順次実行
166
+ */
167
+ async executeSequence(actions) {
168
+ const results = [];
169
+ for (const action of actions) {
170
+ const result = await this.execute(action);
171
+ results.push(result);
172
+ // エラー時は中断
173
+ if (!result.success) {
174
+ break;
175
+ }
176
+ }
177
+ return results;
178
+ }
179
+ // ============================================================================
180
+ // 個別アクション実装
181
+ // ============================================================================
182
+ /**
183
+ * goto - URL遷移(REQ-008-02)
184
+ */
185
+ async executeGoto(action, startTime) {
186
+ if (!action.value) {
187
+ return this.createErrorObservation('goto', 'ACTION_FAILED', 'URL is required for goto action', startTime);
188
+ }
189
+ const options = {
190
+ waitUntil: action.options?.waitUntil || 'domcontentloaded',
191
+ timeout: action.options?.timeout || this.options.timeout,
192
+ };
193
+ const result = await this.automation.scrape(action.value, {
194
+ ...options,
195
+ screenshot: false,
196
+ });
197
+ if (isErr(result)) {
198
+ return this.createErrorObservation('goto', 'NAVIGATION_FAILED', result.error.message, startTime, result.error);
199
+ }
200
+ this.currentUrl = result.value.url;
201
+ return {
202
+ success: true,
203
+ actionType: 'goto',
204
+ data: {
205
+ url: result.value.url,
206
+ title: result.value.title,
207
+ },
208
+ duration: Date.now() - startTime,
209
+ };
210
+ }
211
+ /**
212
+ * click - クリック操作(REQ-008-03)
213
+ */
214
+ async executeClick(action, startTime) {
215
+ if (!action.selector) {
216
+ return this.createErrorObservation('click', 'ACTION_FAILED', 'Selector is required for click action', startTime);
217
+ }
218
+ if (!this.currentUrl) {
219
+ return this.createErrorObservation('click', 'ACTION_FAILED', 'No page loaded. Call goto first.', startTime);
220
+ }
221
+ const clickAction = {
222
+ type: 'click',
223
+ selector: action.selector,
224
+ options: action.options,
225
+ };
226
+ const result = await this.automation.executeAction(this.currentUrl, clickAction);
227
+ if (isErr(result)) {
228
+ return this.createSelectorError('click', action.selector, result.error.message, startTime);
229
+ }
230
+ return this.convertActionResult('click', result.value, startTime);
231
+ }
232
+ /**
233
+ * type - テキスト入力(REQ-008-03)
234
+ */
235
+ async executeType(action, startTime) {
236
+ if (!action.selector) {
237
+ return this.createErrorObservation('type', 'ACTION_FAILED', 'Selector is required for type action', startTime);
238
+ }
239
+ if (!action.value) {
240
+ return this.createErrorObservation('type', 'ACTION_FAILED', 'Value is required for type action', startTime);
241
+ }
242
+ if (!this.currentUrl) {
243
+ return this.createErrorObservation('type', 'ACTION_FAILED', 'No page loaded. Call goto first.', startTime);
244
+ }
245
+ const typeAction = {
246
+ type: 'type',
247
+ selector: action.selector,
248
+ text: action.value,
249
+ options: action.options,
250
+ };
251
+ const result = await this.automation.executeAction(this.currentUrl, typeAction);
252
+ if (isErr(result)) {
253
+ return this.createSelectorError('type', action.selector, result.error.message, startTime);
254
+ }
255
+ return this.convertActionResult('type', result.value, startTime);
256
+ }
257
+ /**
258
+ * scroll - スクロール操作(REQ-008-03)
259
+ */
260
+ async executeScroll(action, startTime) {
261
+ if (!this.currentUrl) {
262
+ return this.createErrorObservation('scroll', 'ACTION_FAILED', 'No page loaded. Call goto first.', startTime);
263
+ }
264
+ const scrollTarget = action.selector || action.options?.target;
265
+ const scrollAction = {
266
+ type: 'scroll',
267
+ target: scrollTarget,
268
+ options: action.options,
269
+ };
270
+ const result = await this.automation.executeAction(this.currentUrl, scrollAction);
271
+ if (isErr(result)) {
272
+ if (action.selector) {
273
+ return this.createSelectorError('scroll', action.selector, result.error.message, startTime);
274
+ }
275
+ return this.createErrorObservation('scroll', 'ACTION_FAILED', result.error.message, startTime);
276
+ }
277
+ return this.convertActionResult('scroll', result.value, startTime);
278
+ }
279
+ /**
280
+ * wait - 待機(REQ-008-03)
281
+ */
282
+ async executeWait(action, startTime) {
283
+ const duration = action.options?.duration || 1000;
284
+ await new Promise(resolve => setTimeout(resolve, duration));
285
+ return {
286
+ success: true,
287
+ actionType: 'wait',
288
+ data: { duration },
289
+ duration: Date.now() - startTime,
290
+ };
291
+ }
292
+ /**
293
+ * screenshot - スクリーンショット(REQ-008-04)
294
+ */
295
+ async executeScreenshot(action, startTime) {
296
+ if (!this.currentUrl) {
297
+ return this.createErrorObservation('screenshot', 'ACTION_FAILED', 'No page loaded. Call goto first.', startTime);
298
+ }
299
+ const options = {
300
+ fullPage: action.options?.fullPage ?? true,
301
+ type: action.options?.type || 'png',
302
+ };
303
+ const result = await this.automation.screenshot(this.currentUrl, options);
304
+ if (isErr(result)) {
305
+ return this.createErrorObservation('screenshot', 'ACTION_FAILED', result.error.message, startTime);
306
+ }
307
+ return {
308
+ success: true,
309
+ actionType: 'screenshot',
310
+ screenshot: result.value,
311
+ duration: Date.now() - startTime,
312
+ };
313
+ }
314
+ /**
315
+ * evaluate - JavaScript実行(REQ-008-05)
316
+ */
317
+ async executeEvaluate(action, startTime) {
318
+ if (!action.value) {
319
+ return this.createErrorObservation('evaluate', 'ACTION_FAILED', 'Script is required for evaluate action', startTime);
320
+ }
321
+ if (!this.currentUrl) {
322
+ return this.createErrorObservation('evaluate', 'ACTION_FAILED', 'No page loaded. Call goto first.', startTime);
323
+ }
324
+ const evaluateAction = {
325
+ type: 'evaluate',
326
+ script: action.value,
327
+ args: action.options?.args,
328
+ };
329
+ const result = await this.automation.executeAction(this.currentUrl, evaluateAction);
330
+ if (isErr(result)) {
331
+ return this.createErrorObservation('evaluate', 'EVALUATION_FAILED', result.error.message, startTime);
332
+ }
333
+ return {
334
+ success: true,
335
+ actionType: 'evaluate',
336
+ data: result.value.data,
337
+ duration: Date.now() - startTime,
338
+ };
339
+ }
340
+ /**
341
+ * waitForSelector - セレクタ待機
342
+ */
343
+ async executeWaitForSelector(action, startTime) {
344
+ if (!action.selector) {
345
+ return this.createErrorObservation('waitForSelector', 'ACTION_FAILED', 'Selector is required for waitForSelector action', startTime);
346
+ }
347
+ if (!this.currentUrl) {
348
+ return this.createErrorObservation('waitForSelector', 'ACTION_FAILED', 'No page loaded. Call goto first.', startTime);
349
+ }
350
+ const waitAction = {
351
+ type: 'waitForSelector',
352
+ selector: action.selector,
353
+ options: {
354
+ timeout: action.options?.timeout || this.options.defaultSelectorTimeout,
355
+ visible: action.options?.visible,
356
+ hidden: action.options?.hidden,
357
+ },
358
+ };
359
+ const result = await this.automation.executeAction(this.currentUrl, waitAction);
360
+ if (isErr(result)) {
361
+ return this.createSelectorError('waitForSelector', action.selector, result.error.message, startTime);
362
+ }
363
+ return this.convertActionResult('waitForSelector', result.value, startTime);
364
+ }
365
+ // ============================================================================
366
+ // ヘルパーメソッド
367
+ // ============================================================================
368
+ /**
369
+ * ActionResultをBrowserObservationに変換
370
+ */
371
+ convertActionResult(actionType, result, _startTime) {
372
+ return {
373
+ success: result.success,
374
+ actionType,
375
+ data: result.data,
376
+ screenshot: result.screenshot,
377
+ error: result.error,
378
+ duration: result.duration,
379
+ };
380
+ }
381
+ /**
382
+ * エラーObservationを作成
383
+ */
384
+ createErrorObservation(actionType, code, message, startTime, cause) {
385
+ const error = new BrowserOperatorError(code, message, undefined, cause);
386
+ return {
387
+ success: false,
388
+ actionType,
389
+ error: error.message,
390
+ duration: Date.now() - startTime,
391
+ };
392
+ }
393
+ /**
394
+ * セレクタエラーObservationを作成(REQ-008-06)
395
+ */
396
+ createSelectorError(actionType, selector, originalMessage, startTime) {
397
+ const error = new BrowserOperatorError('ELEMENT_NOT_FOUND', `Element not found for selector: "${selector}". ${originalMessage}`, selector);
398
+ return {
399
+ success: false,
400
+ actionType,
401
+ error: error.message,
402
+ duration: Date.now() - startTime,
403
+ };
404
+ }
405
+ /**
406
+ * エラーをハンドリング
407
+ */
408
+ handleError(action, error, startTime) {
409
+ const errorMessage = error instanceof Error ? error.message : String(error);
410
+ // セレクタ関連のエラーかチェック
411
+ if (action.selector &&
412
+ (errorMessage.includes('not found') ||
413
+ errorMessage.includes('timeout') ||
414
+ errorMessage.includes('selector'))) {
415
+ return this.createSelectorError(action.type, action.selector, errorMessage, startTime);
416
+ }
417
+ // 一般的なエラー
418
+ return this.createErrorObservation(action.type, error instanceof BrowserAutomationError ? this.mapErrorCode(error.code) : 'ACTION_FAILED', errorMessage, startTime, error instanceof Error ? error : undefined);
419
+ }
420
+ /**
421
+ * BrowserAutomationErrorCodeをBrowserOperatorErrorCodeにマッピング
422
+ */
423
+ mapErrorCode(code) {
424
+ switch (code) {
425
+ case 'BROWSER_NOT_INITIALIZED':
426
+ return 'NOT_LAUNCHED';
427
+ case 'NAVIGATION_FAILED':
428
+ return 'NAVIGATION_FAILED';
429
+ case 'TIMEOUT':
430
+ return 'TIMEOUT';
431
+ default:
432
+ return 'ACTION_FAILED';
433
+ }
434
+ }
435
+ }
436
+ // デフォルトエクスポート
437
+ export default BrowserOperator;
438
+ //# sourceMappingURL=BrowserOperator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserOperator.js","sourceRoot":"","sources":["../../src/browser/BrowserOperator.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,7 @@ export { ContentExtractor } from './ContentExtractor.js';
13
13
  export { SessionManager } from './SessionManager.js';
14
14
  export { BrowserAutomation, BrowserAutomationError, } from './BrowserAutomation.js';
15
15
  export type { Browser, PuppeteerLauncher, BrowserAutomationErrorCode, } from './BrowserAutomation.js';
16
+ export { BrowserOperator, BrowserOperatorError, } from './BrowserOperator.js';
17
+ export type { BrowserActionType, BrowserAction as BrowserOperatorAction, BrowserObservation, BrowserOptions, BrowserOperatorErrorCode, } from './BrowserOperator.js';
16
18
  export { BrowserAutomation as default } from './BrowserAutomation.js';
17
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,aAAa,EACb,QAAQ,EACR,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,MAAM,EACN,WAAW,EACX,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,iBAAiB,EACjB,aAAa,IAAI,qBAAqB,EACtC,kBAAkB,EAClB,cAAc,EACd,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
@@ -12,6 +12,8 @@ export { ActionExecutor } from './ActionExecutor.js';
12
12
  export { ContentExtractor } from './ContentExtractor.js';
13
13
  export { SessionManager } from './SessionManager.js';
14
14
  export { BrowserAutomation, BrowserAutomationError, } from './BrowserAutomation.js';
15
+ // BrowserOperator (REQ-008)
16
+ export { BrowserOperator, BrowserOperatorError, } from './BrowserOperator.js';
15
17
  // デフォルトエクスポート
16
18
  export { BrowserAutomation as default } from './BrowserAutomation.js';
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2CH,YAAY;AACZ,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAOhC,cAAc;AACd,OAAO,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2CH,YAAY;AACZ,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAOhC,4BAA4B;AAC5B,OAAO,EACL,eAAe,EACf,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAS9B,cAAc;AACd,OAAO,EAAE,iBAAiB,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nahisaho/katashiro-collector",
3
- "version": "0.3.3",
3
+ "version": "0.4.2",
4
4
  "description": "KATASHIRO Collector - 情報収集パッケージ",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",