@epsilon-asi/actors 0.0.1
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/.ai/generators/_template.ts +37 -0
- package/.ai/generators/abstract.ts +24 -0
- package/.ai/generators/actor-task-form-filler.ts +140 -0
- package/.ai/generators/actor-task.ts +122 -0
- package/.ai/generators/auth-core.ts +126 -0
- package/.ai/generators/browser-runtime.ts +114 -0
- package/.ai/generators/cli-command.ts +96 -0
- package/.ai/generators/core-framework.ts +80 -0
- package/.ai/generators/docs.ts +92 -0
- package/.ai/generators/error-logging.ts +102 -0
- package/.ai/generators/extraction-helper.ts +96 -0
- package/.ai/generators/interaction-behavior.ts +129 -0
- package/.ai/generators/site-actor.ts +125 -0
- package/.ai/generators/site-login-flow.ts +117 -0
- package/.ai/generators/unit-test.ts +109 -0
- package/.ai/workflows/_template.ts +20 -0
- package/.ai/workflows/starter.ts +20 -0
- package/README.md +435 -0
- package/ai-gen.config.ts +67 -0
- package/dist/auth/AuthStateDetector.d.ts +6 -0
- package/dist/auth/AuthStateDetector.d.ts.map +1 -0
- package/dist/auth/AuthStateDetector.js +14 -0
- package/dist/auth/AuthStateDetector.js.map +1 -0
- package/dist/auth/CredentialsProvider.d.ts +22 -0
- package/dist/auth/CredentialsProvider.d.ts.map +1 -0
- package/dist/auth/CredentialsProvider.js +30 -0
- package/dist/auth/CredentialsProvider.js.map +1 -0
- package/dist/auth/LoginFlow.d.ts +27 -0
- package/dist/auth/LoginFlow.d.ts.map +1 -0
- package/dist/auth/LoginFlow.js +233 -0
- package/dist/auth/LoginFlow.js.map +1 -0
- package/dist/auth/LoginFlow.types.d.ts +123 -0
- package/dist/auth/LoginFlow.types.d.ts.map +1 -0
- package/dist/auth/LoginFlow.types.js +7 -0
- package/dist/auth/LoginFlow.types.js.map +1 -0
- package/dist/auth/SessionStore.d.ts +16 -0
- package/dist/auth/SessionStore.d.ts.map +1 -0
- package/dist/auth/SessionStore.js +8 -0
- package/dist/auth/SessionStore.js.map +1 -0
- package/dist/auth/index.d.ts +6 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/browser/BrowserFactory.d.ts +16 -0
- package/dist/browser/BrowserFactory.d.ts.map +1 -0
- package/dist/browser/BrowserFactory.js +209 -0
- package/dist/browser/BrowserFactory.js.map +1 -0
- package/dist/browser/BrowserSession.d.ts +15 -0
- package/dist/browser/BrowserSession.d.ts.map +1 -0
- package/dist/browser/BrowserSession.js +42 -0
- package/dist/browser/BrowserSession.js.map +1 -0
- package/dist/browser/PuppeteerLike.d.ts +45 -0
- package/dist/browser/PuppeteerLike.d.ts.map +1 -0
- package/dist/browser/PuppeteerLike.js +10 -0
- package/dist/browser/PuppeteerLike.js.map +1 -0
- package/dist/browser/RuntimeConfig.d.ts +82 -0
- package/dist/browser/RuntimeConfig.d.ts.map +1 -0
- package/dist/browser/RuntimeConfig.js +64 -0
- package/dist/browser/RuntimeConfig.js.map +1 -0
- package/dist/browser/index.d.ts +6 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +6 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/profileValidation.d.ts +6 -0
- package/dist/browser/profileValidation.d.ts.map +1 -0
- package/dist/browser/profileValidation.js +59 -0
- package/dist/browser/profileValidation.js.map +1 -0
- package/dist/cli/run.d.ts +3 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +103 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/core/Actor.d.ts +54 -0
- package/dist/core/Actor.d.ts.map +1 -0
- package/dist/core/Actor.js +68 -0
- package/dist/core/Actor.js.map +1 -0
- package/dist/core/ActorContext.d.ts +32 -0
- package/dist/core/ActorContext.d.ts.map +1 -0
- package/dist/core/ActorContext.js +2 -0
- package/dist/core/ActorContext.js.map +1 -0
- package/dist/core/ActorRegistry.d.ts +8 -0
- package/dist/core/ActorRegistry.d.ts.map +1 -0
- package/dist/core/ActorRegistry.js +22 -0
- package/dist/core/ActorRegistry.js.map +1 -0
- package/dist/core/ActorRunner.d.ts +57 -0
- package/dist/core/ActorRunner.d.ts.map +1 -0
- package/dist/core/ActorRunner.js +157 -0
- package/dist/core/ActorRunner.js.map +1 -0
- package/dist/core/defineActor.d.ts +3 -0
- package/dist/core/defineActor.d.ts.map +1 -0
- package/dist/core/defineActor.js +4 -0
- package/dist/core/defineActor.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/errors/AuthError.d.ts +5 -0
- package/dist/errors/AuthError.d.ts.map +1 -0
- package/dist/errors/AuthError.js +7 -0
- package/dist/errors/AuthError.js.map +1 -0
- package/dist/errors/AutomationError.d.ts +17 -0
- package/dist/errors/AutomationError.d.ts.map +1 -0
- package/dist/errors/AutomationError.js +17 -0
- package/dist/errors/AutomationError.js.map +1 -0
- package/dist/errors/ConfigError.d.ts +5 -0
- package/dist/errors/ConfigError.d.ts.map +1 -0
- package/dist/errors/ConfigError.js +7 -0
- package/dist/errors/ConfigError.js.map +1 -0
- package/dist/errors/ExtractionError.d.ts +5 -0
- package/dist/errors/ExtractionError.d.ts.map +1 -0
- package/dist/errors/ExtractionError.js +7 -0
- package/dist/errors/ExtractionError.js.map +1 -0
- package/dist/errors/NavigationError.d.ts +5 -0
- package/dist/errors/NavigationError.d.ts.map +1 -0
- package/dist/errors/NavigationError.js +7 -0
- package/dist/errors/NavigationError.js.map +1 -0
- package/dist/errors/SelectorError.d.ts +6 -0
- package/dist/errors/SelectorError.d.ts.map +1 -0
- package/dist/errors/SelectorError.js +9 -0
- package/dist/errors/SelectorError.js.map +1 -0
- package/dist/errors/index.d.ts +7 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +7 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/extraction/Extractor.d.ts +16 -0
- package/dist/extraction/Extractor.d.ts.map +1 -0
- package/dist/extraction/Extractor.js +54 -0
- package/dist/extraction/Extractor.js.map +1 -0
- package/dist/extraction/Pagination.d.ts +16 -0
- package/dist/extraction/Pagination.d.ts.map +1 -0
- package/dist/extraction/Pagination.js +36 -0
- package/dist/extraction/Pagination.js.map +1 -0
- package/dist/extraction/index.d.ts +3 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +3 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction/FieldClearer.d.ts +7 -0
- package/dist/interaction/FieldClearer.d.ts.map +1 -0
- package/dist/interaction/FieldClearer.js +53 -0
- package/dist/interaction/FieldClearer.js.map +1 -0
- package/dist/interaction/Forms.d.ts +13 -0
- package/dist/interaction/Forms.d.ts.map +1 -0
- package/dist/interaction/Forms.js +22 -0
- package/dist/interaction/Forms.js.map +1 -0
- package/dist/interaction/GhostCursorAdapter.d.ts +27 -0
- package/dist/interaction/GhostCursorAdapter.d.ts.map +1 -0
- package/dist/interaction/GhostCursorAdapter.js +51 -0
- package/dist/interaction/GhostCursorAdapter.js.map +1 -0
- package/dist/interaction/HumanInteractor.d.ts +29 -0
- package/dist/interaction/HumanInteractor.d.ts.map +1 -0
- package/dist/interaction/HumanInteractor.js +2 -0
- package/dist/interaction/HumanInteractor.js.map +1 -0
- package/dist/interaction/HumanTyping.d.ts +43 -0
- package/dist/interaction/HumanTyping.d.ts.map +1 -0
- package/dist/interaction/HumanTyping.js +85 -0
- package/dist/interaction/HumanTyping.js.map +1 -0
- package/dist/interaction/NativePuppeteerInteractor.d.ts +20 -0
- package/dist/interaction/NativePuppeteerInteractor.d.ts.map +1 -0
- package/dist/interaction/NativePuppeteerInteractor.js +47 -0
- package/dist/interaction/NativePuppeteerInteractor.js.map +1 -0
- package/dist/interaction/Navigation.d.ts +17 -0
- package/dist/interaction/Navigation.d.ts.map +1 -0
- package/dist/interaction/Navigation.js +28 -0
- package/dist/interaction/Navigation.js.map +1 -0
- package/dist/interaction/PageAdapter.d.ts +32 -0
- package/dist/interaction/PageAdapter.d.ts.map +1 -0
- package/dist/interaction/PageAdapter.js +62 -0
- package/dist/interaction/PageAdapter.js.map +1 -0
- package/dist/interaction/Waits.d.ts +3 -0
- package/dist/interaction/Waits.d.ts.map +1 -0
- package/dist/interaction/Waits.js +4 -0
- package/dist/interaction/Waits.js.map +1 -0
- package/dist/interaction/index.d.ts +10 -0
- package/dist/interaction/index.d.ts.map +1 -0
- package/dist/interaction/index.js +10 -0
- package/dist/interaction/index.js.map +1 -0
- package/dist/interaction/textToKeystrokeEvents.d.ts +13 -0
- package/dist/interaction/textToKeystrokeEvents.d.ts.map +1 -0
- package/dist/interaction/textToKeystrokeEvents.js +15 -0
- package/dist/interaction/textToKeystrokeEvents.js.map +1 -0
- package/dist/logging/ConsoleLogger.d.ts +12 -0
- package/dist/logging/ConsoleLogger.d.ts.map +1 -0
- package/dist/logging/ConsoleLogger.js +42 -0
- package/dist/logging/ConsoleLogger.js.map +1 -0
- package/dist/logging/Logger.d.ts +14 -0
- package/dist/logging/Logger.d.ts.map +1 -0
- package/dist/logging/Logger.js +2 -0
- package/dist/logging/Logger.js.map +1 -0
- package/dist/logging/MemoryLogger.d.ts +10 -0
- package/dist/logging/MemoryLogger.d.ts.map +1 -0
- package/dist/logging/MemoryLogger.js +28 -0
- package/dist/logging/MemoryLogger.js.map +1 -0
- package/dist/logging/NullLogger.d.ts +8 -0
- package/dist/logging/NullLogger.d.ts.map +1 -0
- package/dist/logging/NullLogger.js +7 -0
- package/dist/logging/NullLogger.js.map +1 -0
- package/dist/logging/index.d.ts +5 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +5 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/sites/example/example.actor.d.ts +6 -0
- package/dist/sites/example/example.actor.d.ts.map +1 -0
- package/dist/sites/example/example.actor.js +47 -0
- package/dist/sites/example/example.actor.js.map +1 -0
- package/dist/sites/example/example.selectors.d.ts +18 -0
- package/dist/sites/example/example.selectors.d.ts.map +1 -0
- package/dist/sites/example/example.selectors.js +18 -0
- package/dist/sites/example/example.selectors.js.map +1 -0
- package/dist/sites/example/example.types.d.ts +16 -0
- package/dist/sites/example/example.types.d.ts.map +1 -0
- package/dist/sites/example/example.types.js +2 -0
- package/dist/sites/example/example.types.js.map +1 -0
- package/dist/sites/example/index.d.ts +4 -0
- package/dist/sites/example/index.d.ts.map +1 -0
- package/dist/sites/example/index.js +4 -0
- package/dist/sites/example/index.js.map +1 -0
- package/dist/sites/index.d.ts +4 -0
- package/dist/sites/index.d.ts.map +1 -0
- package/dist/sites/index.js +4 -0
- package/dist/sites/index.js.map +1 -0
- package/dist/sites/myvistage-com/index.d.ts +4 -0
- package/dist/sites/myvistage-com/index.d.ts.map +1 -0
- package/dist/sites/myvistage-com/index.js +4 -0
- package/dist/sites/myvistage-com/index.js.map +1 -0
- package/dist/sites/myvistage-com/myvistage-com.actor.d.ts +6 -0
- package/dist/sites/myvistage-com/myvistage-com.actor.d.ts.map +1 -0
- package/dist/sites/myvistage-com/myvistage-com.actor.js +44 -0
- package/dist/sites/myvistage-com/myvistage-com.actor.js.map +1 -0
- package/dist/sites/myvistage-com/myvistage-com.selectors.d.ts +15 -0
- package/dist/sites/myvistage-com/myvistage-com.selectors.d.ts.map +1 -0
- package/dist/sites/myvistage-com/myvistage-com.selectors.js +15 -0
- package/dist/sites/myvistage-com/myvistage-com.selectors.js.map +1 -0
- package/dist/sites/myvistage-com/myvistage-com.types.d.ts +16 -0
- package/dist/sites/myvistage-com/myvistage-com.types.d.ts.map +1 -0
- package/dist/sites/myvistage-com/myvistage-com.types.js +2 -0
- package/dist/sites/myvistage-com/myvistage-com.types.js.map +1 -0
- package/dist/sites/upwork-com/index.d.ts +6 -0
- package/dist/sites/upwork-com/index.d.ts.map +1 -0
- package/dist/sites/upwork-com/index.js +6 -0
- package/dist/sites/upwork-com/index.js.map +1 -0
- package/dist/sites/upwork-com/upwork-com.actor.d.ts +6 -0
- package/dist/sites/upwork-com/upwork-com.actor.d.ts.map +1 -0
- package/dist/sites/upwork-com/upwork-com.actor.js +82 -0
- package/dist/sites/upwork-com/upwork-com.actor.js.map +1 -0
- package/dist/sites/upwork-com/upwork-com.runner.d.ts +2 -0
- package/dist/sites/upwork-com/upwork-com.runner.d.ts.map +1 -0
- package/dist/sites/upwork-com/upwork-com.runner.js +14 -0
- package/dist/sites/upwork-com/upwork-com.runner.js.map +1 -0
- package/dist/sites/upwork-com/upwork-com.selectors.d.ts +11 -0
- package/dist/sites/upwork-com/upwork-com.selectors.d.ts.map +1 -0
- package/dist/sites/upwork-com/upwork-com.selectors.js +11 -0
- package/dist/sites/upwork-com/upwork-com.selectors.js.map +1 -0
- package/dist/sites/upwork-com/upwork-com.types.d.ts +88 -0
- package/dist/sites/upwork-com/upwork-com.types.d.ts.map +1 -0
- package/dist/sites/upwork-com/upwork-com.types.js +63 -0
- package/dist/sites/upwork-com/upwork-com.types.js.map +1 -0
- package/dist/sites/upwork-com/upwork-com.util.d.ts +4 -0
- package/dist/sites/upwork-com/upwork-com.util.d.ts.map +1 -0
- package/dist/sites/upwork-com/upwork-com.util.js +43 -0
- package/dist/sites/upwork-com/upwork-com.util.js.map +1 -0
- package/dist/utils/delay.d.ts +2 -0
- package/dist/utils/delay.d.ts.map +1 -0
- package/dist/utils/delay.js +6 -0
- package/dist/utils/delay.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/invariant.d.ts +2 -0
- package/dist/utils/invariant.d.ts.map +1 -0
- package/dist/utils/invariant.js +7 -0
- package/dist/utils/invariant.js.map +1 -0
- package/dist/utils/redact.d.ts +6 -0
- package/dist/utils/redact.d.ts.map +1 -0
- package/dist/utils/redact.js +40 -0
- package/dist/utils/redact.js.map +1 -0
- package/dist/utils/retry.d.ts +8 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +23 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/url.d.ts +2 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +9 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +39 -0
- package/src/auth/AuthStateDetector.ts +18 -0
- package/src/auth/CredentialsProvider.ts +48 -0
- package/src/auth/LoginFlow.ts +332 -0
- package/src/auth/LoginFlow.types.ts +141 -0
- package/src/auth/SessionStore.ts +21 -0
- package/src/auth/index.ts +5 -0
- package/src/browser/BrowserFactory.ts +253 -0
- package/src/browser/BrowserSession.ts +50 -0
- package/src/browser/PuppeteerLike.ts +65 -0
- package/src/browser/RuntimeConfig.ts +152 -0
- package/src/browser/index.ts +5 -0
- package/src/browser/profileValidation.ts +73 -0
- package/src/cli/run.ts +112 -0
- package/src/core/Actor.ts +167 -0
- package/src/core/ActorContext.ts +34 -0
- package/src/core/ActorRegistry.ts +26 -0
- package/src/core/ActorRunner.ts +240 -0
- package/src/core/defineActor.ts +5 -0
- package/src/core/index.ts +5 -0
- package/src/errors/AuthError.ts +7 -0
- package/src/errors/AutomationError.ts +26 -0
- package/src/errors/ConfigError.ts +7 -0
- package/src/errors/ExtractionError.ts +7 -0
- package/src/errors/NavigationError.ts +7 -0
- package/src/errors/SelectorError.ts +10 -0
- package/src/errors/index.ts +6 -0
- package/src/extraction/Extractor.ts +65 -0
- package/src/extraction/Pagination.ts +47 -0
- package/src/extraction/index.ts +2 -0
- package/src/index.ts +9 -0
- package/src/interaction/FieldClearer.ts +73 -0
- package/src/interaction/Forms.ts +27 -0
- package/src/interaction/GhostCursorAdapter.ts +79 -0
- package/src/interaction/HumanInteractor.ts +32 -0
- package/src/interaction/HumanTyping.ts +157 -0
- package/src/interaction/NativePuppeteerInteractor.ts +68 -0
- package/src/interaction/Navigation.ts +37 -0
- package/src/interaction/PageAdapter.ts +86 -0
- package/src/interaction/Waits.ts +5 -0
- package/src/interaction/index.ts +9 -0
- package/src/logging/ConsoleLogger.ts +44 -0
- package/src/logging/Logger.ts +15 -0
- package/src/logging/MemoryLogger.ts +34 -0
- package/src/logging/NullLogger.ts +8 -0
- package/src/logging/index.ts +4 -0
- package/src/sites/example/example.actor.ts +53 -0
- package/src/sites/example/example.selectors.ts +17 -0
- package/src/sites/example/example.types.ts +18 -0
- package/src/sites/example/index.ts +3 -0
- package/src/sites/index.ts +3 -0
- package/src/sites/myvistage-com/index.ts +3 -0
- package/src/sites/myvistage-com/login-action-list.json +349 -0
- package/src/sites/myvistage-com/myvistage-com.actor.ts +50 -0
- package/src/sites/myvistage-com/myvistage-com.selectors.ts +14 -0
- package/src/sites/myvistage-com/myvistage-com.types.ts +18 -0
- package/src/sites/myvistage-com/post-comment-action.json +81 -0
- package/src/sites/upwork-com/index.ts +6 -0
- package/src/sites/upwork-com/upwork-com.actor.ts +97 -0
- package/src/sites/upwork-com/upwork-com.runner.ts +17 -0
- package/src/sites/upwork-com/upwork-com.selectors.ts +10 -0
- package/src/sites/upwork-com/upwork-com.types.ts +102 -0
- package/src/sites/upwork-com/upwork-com.util.ts +41 -0
- package/src/utils/delay.ts +4 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/invariant.ts +7 -0
- package/src/utils/redact.ts +53 -0
- package/src/utils/retry.ts +31 -0
- package/src/utils/url.ts +7 -0
- package/tests/fixtures/FakeCredentialsProvider.ts +12 -0
- package/tests/fixtures/FakeCursor.ts +48 -0
- package/tests/fixtures/FakePage.ts +266 -0
- package/tests/fixtures/makeContext.ts +76 -0
- package/tests/unit/auth/AuthStateDetector.test.ts +80 -0
- package/tests/unit/auth/LoginFlow.test.ts +296 -0
- package/tests/unit/browser/BrowserFactory.test.ts +370 -0
- package/tests/unit/core/ActorRunner.test.ts +370 -0
- package/tests/unit/core/defineActor.test.ts +112 -0
- package/tests/unit/extraction/Extractor.test.ts +48 -0
- package/tests/unit/extraction/Pagination.test.ts +54 -0
- package/tests/unit/interaction/FieldClearer.test.ts +29 -0
- package/tests/unit/interaction/Forms.test.ts +35 -0
- package/tests/unit/interaction/GhostCursorAdapter.test.ts +68 -0
- package/tests/unit/interaction/HumanTyping.test.ts +54 -0
- package/tests/unit/interaction/NativePuppeteerInteractor.test.ts +22 -0
- package/tests/unit/interaction/PageAdapter.test.ts +25 -0
- package/tests/unit/logging/redact.test.ts +36 -0
- package/tests/unit/sites/myvistage-com.actor.test.ts +19 -0
- package/tests/unit/sites/myvistage-com.login.test.ts +22 -0
- package/tests/unit/sites/myvistage-com.postComment.test.ts +70 -0
- package/tests/unit/sites/upwork-com.login.test.ts +52 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +22 -0
- package/vitest.config.ts +12 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import puppeteer from 'puppeteer-core';
|
|
2
|
+
import { BrowserSession } from './BrowserSession.js';
|
|
3
|
+
import { ConfigError } from '../errors/ConfigError.js';
|
|
4
|
+
import { isExistingChromeProfileConfig, isRemoteDebuggingChromeConfig, normalizeRuntimeConfig } from './RuntimeConfig.js';
|
|
5
|
+
import { validateExistingProfileConfig, validateRemoteDebuggingConfig } from './profileValidation.js';
|
|
6
|
+
export class BrowserFactory {
|
|
7
|
+
launcher;
|
|
8
|
+
constructor(launcher = puppeteer) {
|
|
9
|
+
this.launcher = launcher;
|
|
10
|
+
}
|
|
11
|
+
buildLaunchOptions(profile) {
|
|
12
|
+
const args = [
|
|
13
|
+
...(profile.profileDirectory !== undefined ? [`--profile-directory=${profile.profileDirectory}`] : []),
|
|
14
|
+
...(profile.args ?? [])
|
|
15
|
+
];
|
|
16
|
+
const options = {
|
|
17
|
+
browser: 'chrome',
|
|
18
|
+
channel: profile.channel ?? 'chrome',
|
|
19
|
+
headless: false,
|
|
20
|
+
userDataDir: profile.userDataDir,
|
|
21
|
+
args
|
|
22
|
+
};
|
|
23
|
+
if (profile.executablePath !== undefined)
|
|
24
|
+
options.executablePath = profile.executablePath;
|
|
25
|
+
if (profile.defaultViewport !== undefined)
|
|
26
|
+
options.defaultViewport = profile.defaultViewport;
|
|
27
|
+
if (profile.dumpio !== undefined)
|
|
28
|
+
options.dumpio = profile.dumpio;
|
|
29
|
+
return options;
|
|
30
|
+
}
|
|
31
|
+
buildConnectOptions(config) {
|
|
32
|
+
if (config.browserURL !== undefined && config.browserWSEndpoint !== undefined) {
|
|
33
|
+
throw new ConfigError('Use either browser.browserURL or browser.browserWSEndpoint, not both.');
|
|
34
|
+
}
|
|
35
|
+
const options = {};
|
|
36
|
+
if (config.browserWSEndpoint !== undefined) {
|
|
37
|
+
options.browserWSEndpoint = config.browserWSEndpoint;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
options.browserURL = config.browserURL ?? `http://${config.remoteDebuggingHost ?? '127.0.0.1'}:${config.remoteDebuggingPort ?? 9222}`;
|
|
41
|
+
}
|
|
42
|
+
if (config.defaultViewport !== undefined)
|
|
43
|
+
options.defaultViewport = config.defaultViewport;
|
|
44
|
+
if (config.protocolTimeout !== undefined)
|
|
45
|
+
options.protocolTimeout = config.protocolTimeout;
|
|
46
|
+
if (config.slowMo !== undefined)
|
|
47
|
+
options.slowMo = config.slowMo;
|
|
48
|
+
return options;
|
|
49
|
+
}
|
|
50
|
+
async launch(config) {
|
|
51
|
+
const normalized = normalizeRuntimeConfig(config);
|
|
52
|
+
if (isExistingChromeProfileConfig(normalized.browser)) {
|
|
53
|
+
return this.launchExistingProfile(normalized);
|
|
54
|
+
}
|
|
55
|
+
if (isRemoteDebuggingChromeConfig(normalized.browser)) {
|
|
56
|
+
return this.connectToRemoteDebuggingBrowser(normalized);
|
|
57
|
+
}
|
|
58
|
+
throw new ConfigError('Unsupported browser mode.');
|
|
59
|
+
}
|
|
60
|
+
async launchExistingProfile(config) {
|
|
61
|
+
validateExistingProfileConfig(config.browser);
|
|
62
|
+
let browser;
|
|
63
|
+
try {
|
|
64
|
+
browser = await this.launcher.launch(this.buildLaunchOptions(config.browser));
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if ((config.browser.runningInstance?.enabled ?? true) && isLikelyProfileInUseError(error)) {
|
|
68
|
+
return this.connectToAlreadyRunningProfile(config, error);
|
|
69
|
+
}
|
|
70
|
+
throw explainLaunchFailure(error, config.browser);
|
|
71
|
+
}
|
|
72
|
+
const { context, page } = await this.preparePage(browser, config);
|
|
73
|
+
return new BrowserSession(browser, context, page, config.browser, 'launched');
|
|
74
|
+
}
|
|
75
|
+
async connectToAlreadyRunningProfile(config, launchError) {
|
|
76
|
+
const remoteBrowser = this.buildProfileLockedConnectConfig(config.browser);
|
|
77
|
+
validateRemoteDebuggingConfig(remoteBrowser);
|
|
78
|
+
const connect = this.launcher.connect;
|
|
79
|
+
if (connect === undefined) {
|
|
80
|
+
throw new ConfigError('Chrome profile is already running, but the configured Puppeteer launcher does not support connect().', {
|
|
81
|
+
cause: launchError,
|
|
82
|
+
details: profileLockConnectDetails(config.browser, remoteBrowser, launchError)
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
let browser;
|
|
86
|
+
try {
|
|
87
|
+
browser = await connect.call(this.launcher, this.buildConnectOptions(remoteBrowser));
|
|
88
|
+
}
|
|
89
|
+
catch (connectError) {
|
|
90
|
+
throw explainProfileLockedConnectFailure(connectError, config.browser, remoteBrowser, launchError);
|
|
91
|
+
}
|
|
92
|
+
const connectedRuntimeConfig = {
|
|
93
|
+
...config,
|
|
94
|
+
browser: remoteBrowser
|
|
95
|
+
};
|
|
96
|
+
const { context, page } = await this.preparePage(browser, connectedRuntimeConfig);
|
|
97
|
+
return new BrowserSession(browser, context, page, remoteBrowser, 'connected');
|
|
98
|
+
}
|
|
99
|
+
buildProfileLockedConnectConfig(profile) {
|
|
100
|
+
const running = profile.runningInstance ?? {};
|
|
101
|
+
const remoteBrowser = {
|
|
102
|
+
mode: 'remote-debugging',
|
|
103
|
+
remoteDebuggingHost: running.remoteDebuggingHost ?? '127.0.0.1',
|
|
104
|
+
remoteDebuggingPort: running.remoteDebuggingPort ?? 9222,
|
|
105
|
+
reuseExistingPage: running.reuseExistingPage ?? false,
|
|
106
|
+
closeBrowserOnFinish: false,
|
|
107
|
+
disconnectOnFinish: running.disconnectOnFinish ?? true
|
|
108
|
+
};
|
|
109
|
+
if (running.browserURL !== undefined)
|
|
110
|
+
remoteBrowser.browserURL = running.browserURL;
|
|
111
|
+
if (running.browserWSEndpoint !== undefined)
|
|
112
|
+
remoteBrowser.browserWSEndpoint = running.browserWSEndpoint;
|
|
113
|
+
if (running.protocolTimeout !== undefined)
|
|
114
|
+
remoteBrowser.protocolTimeout = running.protocolTimeout;
|
|
115
|
+
if (running.slowMo !== undefined)
|
|
116
|
+
remoteBrowser.slowMo = running.slowMo;
|
|
117
|
+
if (profile.defaultViewport !== undefined)
|
|
118
|
+
remoteBrowser.defaultViewport = profile.defaultViewport;
|
|
119
|
+
if (profile.startUrl !== undefined)
|
|
120
|
+
remoteBrowser.startUrl = profile.startUrl;
|
|
121
|
+
return remoteBrowser;
|
|
122
|
+
}
|
|
123
|
+
async connectToRemoteDebuggingBrowser(config) {
|
|
124
|
+
validateRemoteDebuggingConfig(config.browser);
|
|
125
|
+
const connect = this.launcher.connect;
|
|
126
|
+
if (connect === undefined) {
|
|
127
|
+
throw new ConfigError('The configured Puppeteer launcher does not support connect().');
|
|
128
|
+
}
|
|
129
|
+
let browser;
|
|
130
|
+
try {
|
|
131
|
+
browser = await connect.call(this.launcher, this.buildConnectOptions(config.browser));
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
throw explainConnectFailure(error, config.browser);
|
|
135
|
+
}
|
|
136
|
+
const { context, page } = await this.preparePage(browser, config);
|
|
137
|
+
return new BrowserSession(browser, context, page, config.browser, 'connected');
|
|
138
|
+
}
|
|
139
|
+
async preparePage(browser, config) {
|
|
140
|
+
const context = browser.defaultBrowserContext();
|
|
141
|
+
const pages = await browser.pages();
|
|
142
|
+
const page = config.browser.reuseExistingPage !== false && pages[0] !== undefined
|
|
143
|
+
? pages[0]
|
|
144
|
+
: await browser.newPage();
|
|
145
|
+
page.setDefaultTimeout?.(config.defaultTimeoutMs ?? 15_000);
|
|
146
|
+
page.setDefaultNavigationTimeout?.(config.navigationTimeoutMs ?? 30_000);
|
|
147
|
+
if (config.browser.startUrl !== undefined) {
|
|
148
|
+
await page.goto(config.browser.startUrl, { waitUntil: 'domcontentloaded' });
|
|
149
|
+
}
|
|
150
|
+
return { context, page };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
function isLikelyProfileInUseError(error) {
|
|
154
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
155
|
+
return /DevToolsActivePort|SingletonLock|already\s+(?:in\s+use|running)|browser is already running|userDataDir|user data directory|profile.*(?:lock|in use|running)/i.test(message);
|
|
156
|
+
}
|
|
157
|
+
function explainLaunchFailure(error, profile) {
|
|
158
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
159
|
+
const likelyProfileIssue = isLikelyProfileInUseError(error) || /profile/i.test(message);
|
|
160
|
+
if (likelyProfileIssue) {
|
|
161
|
+
return new ConfigError('Could not launch Chrome with the configured existing profile because it appears to already be running. Close other Chrome windows using this profile, or start Chrome once with a local remote debugging endpoint and let existing-profile mode connect to it.', {
|
|
162
|
+
cause: error,
|
|
163
|
+
details: {
|
|
164
|
+
userDataDir: profile.userDataDir,
|
|
165
|
+
profileDirectory: profile.profileDirectory ?? '(default)',
|
|
166
|
+
launchError: message
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
return new ConfigError('Could not launch Chrome with the configured existing profile.', {
|
|
171
|
+
cause: error,
|
|
172
|
+
details: {
|
|
173
|
+
userDataDir: profile.userDataDir,
|
|
174
|
+
profileDirectory: profile.profileDirectory ?? '(default)',
|
|
175
|
+
launchError: message
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function explainConnectFailure(error, config) {
|
|
180
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
181
|
+
return new ConfigError('Could not connect to the existing Chrome debugging endpoint. Make sure Chrome was started with --remote-debugging-port and that the browserURL/browserWSEndpoint is correct.', {
|
|
182
|
+
cause: error,
|
|
183
|
+
details: {
|
|
184
|
+
browserURL: config.browserURL ?? `http://${config.remoteDebuggingHost ?? '127.0.0.1'}:${config.remoteDebuggingPort ?? 9222}`,
|
|
185
|
+
browserWSEndpoint: config.browserWSEndpoint ?? '(not configured)',
|
|
186
|
+
connectError: message
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
function explainProfileLockedConnectFailure(connectError, profile, remoteBrowser, launchError) {
|
|
191
|
+
const connectMessage = connectError instanceof Error ? connectError.message : String(connectError);
|
|
192
|
+
return new ConfigError('Chrome profile is already running, but the configured local DevTools endpoint could not be reached. Ensure Chrome was started with --remote-debugging-port and that the endpoint is bound only to localhost.', {
|
|
193
|
+
cause: connectError,
|
|
194
|
+
details: profileLockConnectDetails(profile, remoteBrowser, launchError, connectMessage)
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
function profileLockConnectDetails(profile, remoteBrowser, launchError, connectError) {
|
|
198
|
+
const launchMessage = launchError instanceof Error ? launchError.message : String(launchError);
|
|
199
|
+
return {
|
|
200
|
+
userDataDir: profile.userDataDir,
|
|
201
|
+
profileDirectory: profile.profileDirectory ?? '(default)',
|
|
202
|
+
endpoint: remoteBrowser.browserWSEndpoint ?? remoteBrowser.browserURL ?? `http://${remoteBrowser.remoteDebuggingHost ?? '127.0.0.1'}:${remoteBrowser.remoteDebuggingPort ?? 9222}`,
|
|
203
|
+
browserURL: remoteBrowser.browserURL ?? `http://${remoteBrowser.remoteDebuggingHost ?? '127.0.0.1'}:${remoteBrowser.remoteDebuggingPort ?? 9222}`,
|
|
204
|
+
browserWSEndpoint: remoteBrowser.browserWSEndpoint ?? '(not configured)',
|
|
205
|
+
launchError: launchMessage,
|
|
206
|
+
...(connectError !== undefined ? { connectError } : {})
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=BrowserFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserFactory.js","sourceRoot":"","sources":["../../src/browser/BrowserFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BrowserRuntimeConfig } from './RuntimeConfig.js';
|
|
2
|
+
import type { BrowserContextLike, BrowserLike, PageLike } from './PuppeteerLike.js';
|
|
3
|
+
export type BrowserSessionKind = 'launched' | 'connected';
|
|
4
|
+
export declare class BrowserSession {
|
|
5
|
+
readonly browser: BrowserLike;
|
|
6
|
+
readonly context: BrowserContextLike;
|
|
7
|
+
readonly page: PageLike;
|
|
8
|
+
readonly profile: BrowserRuntimeConfig;
|
|
9
|
+
readonly kind: BrowserSessionKind;
|
|
10
|
+
readonly connectionMode: BrowserSessionKind;
|
|
11
|
+
constructor(browser: BrowserLike, context: BrowserContextLike, page: PageLike, profile: BrowserRuntimeConfig, kind?: BrowserSessionKind);
|
|
12
|
+
shouldCloseOnFinish(): boolean;
|
|
13
|
+
close(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=BrowserSession.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserSession.d.ts","sourceRoot":"","sources":["../../src/browser/BrowserSession.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEpF,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,WAAW,CAAC;AAE1D,qBAAa,cAAc;IAIvB,QAAQ,CAAC,OAAO,EAAE,WAAW;IAC7B,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IACpC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,oBAAoB;IACtC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;IAPnC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;gBAGjC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,oBAAoB,EAC7B,IAAI,GAAE,kBAAmF;IAKpG,mBAAmB,IAAI,OAAO;IASxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB7B"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export class BrowserSession {
|
|
2
|
+
browser;
|
|
3
|
+
context;
|
|
4
|
+
page;
|
|
5
|
+
profile;
|
|
6
|
+
kind;
|
|
7
|
+
connectionMode;
|
|
8
|
+
constructor(browser, context, page, profile, kind = profile.mode === 'remote-debugging' ? 'connected' : 'launched') {
|
|
9
|
+
this.browser = browser;
|
|
10
|
+
this.context = context;
|
|
11
|
+
this.page = page;
|
|
12
|
+
this.profile = profile;
|
|
13
|
+
this.kind = kind;
|
|
14
|
+
this.connectionMode = kind;
|
|
15
|
+
}
|
|
16
|
+
shouldCloseOnFinish() {
|
|
17
|
+
if (this.kind === 'connected' && this.profile.mode === 'remote-debugging') {
|
|
18
|
+
return this.profile.closeBrowserOnFinish === true || this.profile.disconnectOnFinish !== false;
|
|
19
|
+
}
|
|
20
|
+
// In launched mode, closeBrowserOnFinish=false means "detach but keep Chrome running".
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
async close() {
|
|
24
|
+
if (this.kind === 'connected') {
|
|
25
|
+
if (this.profile.mode === 'remote-debugging' && this.profile.closeBrowserOnFinish === true && this.profile.disconnectOnFinish === false) {
|
|
26
|
+
await this.browser.close();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (this.profile.mode === 'remote-debugging' && this.profile.disconnectOnFinish === false) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
await this.browser.disconnect?.();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (this.profile.closeBrowserOnFinish === false) {
|
|
36
|
+
await this.browser.disconnect?.();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
await this.browser.close();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=BrowserSession.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BrowserSession.js","sourceRoot":"","sources":["../../src/browser/BrowserSession.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAc;IAId;IACA;IACA;IACA;IACA;IAPF,cAAc,CAAqB;IAE5C,YACW,OAAoB,EACpB,OAA2B,EAC3B,IAAc,EACd,OAA6B,EAC7B,OAA2B,OAAO,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU;QAJzF,YAAO,GAAP,OAAO,CAAa;QACpB,YAAO,GAAP,OAAO,CAAoB;QAC3B,SAAI,GAAJ,IAAI,CAAU;QACd,YAAO,GAAP,OAAO,CAAsB;QAC7B,SAAI,GAAJ,IAAI,CAAqF;QAElG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,mBAAmB;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,KAAK,CAAC;QACjG,CAAC;QAED,uFAAuF;QACvF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBACxI,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAkB,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;gBAC1F,OAAO;YACT,CAAC;YAED,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Browser, BrowserContext, ConnectOptions, HTTPResponse, LaunchOptions, Page, WaitForOptions, WaitForSelectorOptions } from 'puppeteer-core';
|
|
2
|
+
export type PuppeteerLaunchOptions = LaunchOptions;
|
|
3
|
+
export type PuppeteerConnectOptions = ConnectOptions;
|
|
4
|
+
export interface PuppeteerLauncher {
|
|
5
|
+
launch(options: PuppeteerLaunchOptions): Promise<BrowserLike>;
|
|
6
|
+
connect?(options: PuppeteerConnectOptions): Promise<BrowserLike>;
|
|
7
|
+
}
|
|
8
|
+
export interface BrowserLike {
|
|
9
|
+
defaultBrowserContext(): BrowserContextLike;
|
|
10
|
+
pages(): Promise<PageLike[]>;
|
|
11
|
+
newPage(): Promise<PageLike>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
disconnect?(): Promise<void> | void;
|
|
14
|
+
}
|
|
15
|
+
export interface BrowserContextLike {
|
|
16
|
+
}
|
|
17
|
+
export interface KeyboardLike {
|
|
18
|
+
type(text: string, options?: {
|
|
19
|
+
delay?: number;
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
press(key: string, options?: {
|
|
22
|
+
delay?: number;
|
|
23
|
+
}): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export interface PageLike {
|
|
26
|
+
keyboard: KeyboardLike;
|
|
27
|
+
goto(url: string, options?: WaitForOptions): Promise<HTTPResponse | null>;
|
|
28
|
+
waitForSelector(selector: string, options?: WaitForSelectorOptions): Promise<unknown>;
|
|
29
|
+
waitForNavigation(options?: WaitForOptions): Promise<HTTPResponse | null>;
|
|
30
|
+
click(selector: string, options?: Record<string, unknown>): Promise<void>;
|
|
31
|
+
focus(selector: string): Promise<void>;
|
|
32
|
+
$eval<T>(selector: string, pageFunction: (element: Element, ...args: unknown[]) => T, ...args: unknown[]): Promise<T>;
|
|
33
|
+
$$eval<T>(selector: string, pageFunction: (elements: Element[], ...args: unknown[]) => T, ...args: unknown[]): Promise<T>;
|
|
34
|
+
evaluate<T>(pageFunction: (...args: unknown[]) => T, ...args: unknown[]): Promise<T>;
|
|
35
|
+
url(): string;
|
|
36
|
+
title(): Promise<string>;
|
|
37
|
+
content(): Promise<string>;
|
|
38
|
+
screenshot(options?: Record<string, unknown>): Promise<Uint8Array | string>;
|
|
39
|
+
setDefaultTimeout?(timeout: number): void;
|
|
40
|
+
setDefaultNavigationTimeout?(timeout: number): void;
|
|
41
|
+
}
|
|
42
|
+
export declare function asBrowserLike(browser: Browser): BrowserLike;
|
|
43
|
+
export declare function asBrowserContextLike(context: BrowserContext): BrowserContextLike;
|
|
44
|
+
export declare function asPageLike(page: Page): PageLike;
|
|
45
|
+
//# sourceMappingURL=PuppeteerLike.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PuppeteerLike.d.ts","sourceRoot":"","sources":["../../src/browser/PuppeteerLike.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PuppeteerLike.js","sourceRoot":"","sources":["../../src/browser/PuppeteerLike.ts"],"names":[],"mappings":"AAsDA,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,OAAiC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAuB;IAC1D,OAAO,OAAwC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,OAAO,IAA2B,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { HumanTypingOptions } from '../interaction/HumanTyping.js';
|
|
2
|
+
export type ChromeReleaseChannel = 'chrome' | 'chrome-beta' | 'chrome-dev' | 'chrome-canary';
|
|
3
|
+
export interface BrowserSessionBehavior {
|
|
4
|
+
defaultViewport?: {
|
|
5
|
+
width: number;
|
|
6
|
+
height: number;
|
|
7
|
+
} | null;
|
|
8
|
+
startUrl?: string;
|
|
9
|
+
reuseExistingPage?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Existing-profile mode defaults to true because the framework owns the browser it launched.
|
|
12
|
+
* Remote-debugging mode defaults to false because Chrome is usually a long-lived host process.
|
|
13
|
+
*/
|
|
14
|
+
closeBrowserOnFinish?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface RemoteDebuggingEndpointConfig {
|
|
17
|
+
/**
|
|
18
|
+
* HTTP endpoint for an already-running Chrome instance, e.g. http://127.0.0.1:9222.
|
|
19
|
+
* Use either browserURL or browserWSEndpoint, not both.
|
|
20
|
+
*/
|
|
21
|
+
browserURL?: string;
|
|
22
|
+
/** WebSocket endpoint from /json/version, e.g. ws://127.0.0.1:9222/devtools/browser/<id>. */
|
|
23
|
+
browserWSEndpoint?: string;
|
|
24
|
+
/** Used only when browserURL and browserWSEndpoint are omitted. */
|
|
25
|
+
remoteDebuggingHost?: string;
|
|
26
|
+
/** Used only when browserURL and browserWSEndpoint are omitted. */
|
|
27
|
+
remoteDebuggingPort?: number;
|
|
28
|
+
protocolTimeout?: number;
|
|
29
|
+
slowMo?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface RunningChromeInstanceConfig extends RemoteDebuggingEndpointConfig {
|
|
32
|
+
/**
|
|
33
|
+
* If false, disables automatic attach when an existing-profile launch fails
|
|
34
|
+
* because the profile is already running. Defaults to true.
|
|
35
|
+
*/
|
|
36
|
+
enabled?: boolean;
|
|
37
|
+
/** Connected runs should usually open a fresh tab. Defaults to false. */
|
|
38
|
+
reuseExistingPage?: boolean;
|
|
39
|
+
/** A running Chrome host should not be closed by default. Defaults to false. */
|
|
40
|
+
closeBrowserOnFinish?: boolean;
|
|
41
|
+
/** Disconnect the Puppeteer client on finish. Defaults to true. */
|
|
42
|
+
disconnectOnFinish?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export interface ExistingChromeProfileConfig extends BrowserSessionBehavior {
|
|
45
|
+
mode: 'existing-profile';
|
|
46
|
+
/** Parent user data directory, not the nested profile folder. */
|
|
47
|
+
userDataDir: string;
|
|
48
|
+
/** Profile folder within userDataDir, e.g. Default or Profile 1. */
|
|
49
|
+
profileDirectory?: string;
|
|
50
|
+
channel?: ChromeReleaseChannel;
|
|
51
|
+
executablePath?: string;
|
|
52
|
+
headless?: false;
|
|
53
|
+
args?: string[];
|
|
54
|
+
allowCreatingUserDataDir?: boolean;
|
|
55
|
+
allowCreatingProfileDirectory?: boolean;
|
|
56
|
+
dumpio?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Endpoint to try when this profile is already locked/running. If omitted,
|
|
59
|
+
* the framework still tries http://127.0.0.1:9222 by default. Set
|
|
60
|
+
* { enabled: false } to disable automatic attach.
|
|
61
|
+
*/
|
|
62
|
+
runningInstance?: RunningChromeInstanceConfig;
|
|
63
|
+
}
|
|
64
|
+
export interface RemoteDebuggingChromeConfig extends BrowserSessionBehavior, RemoteDebuggingEndpointConfig {
|
|
65
|
+
mode: 'remote-debugging';
|
|
66
|
+
/** Disconnect the Puppeteer client on finish. Defaults to true. */
|
|
67
|
+
disconnectOnFinish?: boolean;
|
|
68
|
+
}
|
|
69
|
+
export type BrowserRuntimeConfig = ExistingChromeProfileConfig | RemoteDebuggingChromeConfig;
|
|
70
|
+
export interface RuntimeConfig {
|
|
71
|
+
browser: BrowserRuntimeConfig;
|
|
72
|
+
defaultTimeoutMs?: number;
|
|
73
|
+
navigationTimeoutMs?: number;
|
|
74
|
+
interaction?: {
|
|
75
|
+
typing?: HumanTypingOptions;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export declare function expandHome(input: string): string;
|
|
79
|
+
export declare function isExistingChromeProfileConfig(config: BrowserRuntimeConfig): config is ExistingChromeProfileConfig;
|
|
80
|
+
export declare function isRemoteDebuggingChromeConfig(config: BrowserRuntimeConfig): config is RemoteDebuggingChromeConfig;
|
|
81
|
+
export declare function normalizeRuntimeConfig(config: RuntimeConfig): RuntimeConfig;
|
|
82
|
+
//# sourceMappingURL=RuntimeConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeConfig.d.ts","sourceRoot":"","sources":["../../src/browser/RuntimeConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAExE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC;AAE7F,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,6BAA6B;IAC5C;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA4B,SAAQ,6BAA6B;IAChF;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,IAAI,EAAE,kBAAkB,CAAC;IACzB,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;;;OAIG;IACH,eAAe,CAAC,EAAE,2BAA2B,CAAC;CAC/C;AAED,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB,EAAE,6BAA6B;IACxG,IAAI,EAAE,kBAAkB,CAAC;IACzB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,2BAA2B,GAAG,2BAA2B,CAAC;AAE7F,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,kBAAkB,CAAC;KAC7B,CAAC;CACH;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,IAAI,2BAA2B,CAEjH;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,oBAAoB,GAAG,MAAM,IAAI,2BAA2B,CAEjH;AA2CD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAU3E"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
export function expandHome(input) {
|
|
4
|
+
if (input === '~')
|
|
5
|
+
return os.homedir();
|
|
6
|
+
if (input.startsWith(`~${path.sep}`))
|
|
7
|
+
return path.join(os.homedir(), input.slice(2));
|
|
8
|
+
return input;
|
|
9
|
+
}
|
|
10
|
+
export function isExistingChromeProfileConfig(config) {
|
|
11
|
+
return config.mode === 'existing-profile';
|
|
12
|
+
}
|
|
13
|
+
export function isRemoteDebuggingChromeConfig(config) {
|
|
14
|
+
return config.mode === 'remote-debugging';
|
|
15
|
+
}
|
|
16
|
+
function normalizeRunningChromeInstanceConfig(config) {
|
|
17
|
+
if (config === undefined)
|
|
18
|
+
return undefined;
|
|
19
|
+
return {
|
|
20
|
+
...config,
|
|
21
|
+
enabled: config.enabled ?? true,
|
|
22
|
+
remoteDebuggingHost: config.remoteDebuggingHost ?? '127.0.0.1',
|
|
23
|
+
remoteDebuggingPort: config.remoteDebuggingPort ?? 9222,
|
|
24
|
+
reuseExistingPage: config.reuseExistingPage ?? false,
|
|
25
|
+
closeBrowserOnFinish: config.closeBrowserOnFinish ?? false,
|
|
26
|
+
disconnectOnFinish: config.disconnectOnFinish ?? true
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function normalizeExistingProfileConfig(browser) {
|
|
30
|
+
const runningInstance = normalizeRunningChromeInstanceConfig(browser.runningInstance);
|
|
31
|
+
return {
|
|
32
|
+
...browser,
|
|
33
|
+
userDataDir: path.resolve(expandHome(browser.userDataDir)),
|
|
34
|
+
channel: browser.channel ?? 'chrome',
|
|
35
|
+
headless: false,
|
|
36
|
+
reuseExistingPage: browser.reuseExistingPage ?? true,
|
|
37
|
+
closeBrowserOnFinish: browser.closeBrowserOnFinish ?? true,
|
|
38
|
+
allowCreatingUserDataDir: browser.allowCreatingUserDataDir ?? false,
|
|
39
|
+
allowCreatingProfileDirectory: browser.allowCreatingProfileDirectory ?? false,
|
|
40
|
+
...(runningInstance !== undefined ? { runningInstance } : {})
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function normalizeRemoteDebuggingConfig(browser) {
|
|
44
|
+
return {
|
|
45
|
+
...browser,
|
|
46
|
+
remoteDebuggingHost: browser.remoteDebuggingHost ?? '127.0.0.1',
|
|
47
|
+
remoteDebuggingPort: browser.remoteDebuggingPort ?? 9222,
|
|
48
|
+
reuseExistingPage: browser.reuseExistingPage ?? false,
|
|
49
|
+
closeBrowserOnFinish: browser.closeBrowserOnFinish ?? false,
|
|
50
|
+
disconnectOnFinish: browser.disconnectOnFinish ?? true
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function normalizeRuntimeConfig(config) {
|
|
54
|
+
return {
|
|
55
|
+
...config,
|
|
56
|
+
browser: config.browser.mode === 'existing-profile'
|
|
57
|
+
? normalizeExistingProfileConfig(config.browser)
|
|
58
|
+
: normalizeRemoteDebuggingConfig(config.browser),
|
|
59
|
+
defaultTimeoutMs: config.defaultTimeoutMs ?? 15_000,
|
|
60
|
+
navigationTimeoutMs: config.navigationTimeoutMs ?? 30_000,
|
|
61
|
+
...(config.interaction !== undefined ? { interaction: config.interaction } : {})
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=RuntimeConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeConfig.js","sourceRoot":"","sources":["../../src/browser/RuntimeConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAqF7B,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,KAAK,GAAG;QAAE,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACvC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAA4B;IACxE,OAAO,MAAM,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAA4B;IACxE,OAAO,MAAM,CAAC,IAAI,KAAK,kBAAkB,CAAC;AAC5C,CAAC;AAED,SAAS,oCAAoC,CAAC,MAA+C;IAC3F,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAE3C,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;QAC/B,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,WAAW;QAC9D,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,IAAI;QACvD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,KAAK;QACpD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,IAAI,KAAK;QAC1D,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,IAAI,IAAI;KACtD,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAoC;IAC1E,MAAM,eAAe,GAAG,oCAAoC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAEtF,OAAO;QACL,GAAG,OAAO;QACV,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,QAAQ;QACpC,QAAQ,EAAE,KAAK;QACf,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI;QACpD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,IAAI;QAC1D,wBAAwB,EAAE,OAAO,CAAC,wBAAwB,IAAI,KAAK;QACnE,6BAA6B,EAAE,OAAO,CAAC,6BAA6B,IAAI,KAAK;QAC7E,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAoC;IAC1E,OAAO;QACL,GAAG,OAAO;QACV,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,WAAW;QAC/D,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,IAAI;QACxD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,KAAK;QACrD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,KAAK;QAC3D,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,IAAI,IAAI;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAqB;IAC1D,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,kBAAkB;YACjD,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,OAAO,CAAC;YAChD,CAAC,CAAC,8BAA8B,CAAC,MAAM,CAAC,OAAO,CAAC;QAClD,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,MAAM;QACnD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,IAAI,MAAM;QACzD,GAAG,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ExistingChromeProfileConfig, RemoteDebuggingChromeConfig, RunningChromeInstanceConfig } from './RuntimeConfig.js';
|
|
2
|
+
export declare function getProfileDirectoryPath(config: ExistingChromeProfileConfig): string | undefined;
|
|
3
|
+
export declare function validateExistingProfileConfig(config: ExistingChromeProfileConfig): void;
|
|
4
|
+
export declare function validateRemoteDebuggingConfig(config: RemoteDebuggingChromeConfig): void;
|
|
5
|
+
export declare function validateRunningChromeInstanceConfig(config: RunningChromeInstanceConfig): void;
|
|
6
|
+
//# sourceMappingURL=profileValidation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileValidation.d.ts","sourceRoot":"","sources":["../../src/browser/profileValidation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,2BAA2B,EAAE,2BAA2B,EAAiC,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAE/J,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,GAAG,SAAS,CAI/F;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,2BAA2B,GAAG,IAAI,CA+BvF;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,2BAA2B,GAAG,IAAI,CAMvF;AAED,wBAAgB,mCAAmC,CAAC,MAAM,EAAE,2BAA2B,GAAG,IAAI,CAE7F"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { ConfigError } from '../errors/ConfigError.js';
|
|
4
|
+
export function getProfileDirectoryPath(config) {
|
|
5
|
+
return config.profileDirectory === undefined
|
|
6
|
+
? undefined
|
|
7
|
+
: path.join(config.userDataDir, config.profileDirectory);
|
|
8
|
+
}
|
|
9
|
+
export function validateExistingProfileConfig(config) {
|
|
10
|
+
if (config.mode !== 'existing-profile') {
|
|
11
|
+
throw new ConfigError('validateExistingProfileConfig only accepts existing-profile mode.');
|
|
12
|
+
}
|
|
13
|
+
if (!config.userDataDir.trim()) {
|
|
14
|
+
throw new ConfigError('browser.userDataDir is required for existing-profile mode.');
|
|
15
|
+
}
|
|
16
|
+
if (!config.allowCreatingUserDataDir && !fs.existsSync(config.userDataDir)) {
|
|
17
|
+
throw new ConfigError('Configured Chrome userDataDir does not exist. Refusing to create a new profile directory.', {
|
|
18
|
+
details: { userDataDir: config.userDataDir }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
if (config.profileDirectory !== undefined) {
|
|
22
|
+
if (path.isAbsolute(config.profileDirectory) || config.profileDirectory.includes('..')) {
|
|
23
|
+
throw new ConfigError('browser.profileDirectory must be a Chrome profile folder name such as Default or Profile 1, not a path.');
|
|
24
|
+
}
|
|
25
|
+
const profilePath = getProfileDirectoryPath(config);
|
|
26
|
+
if (profilePath !== undefined && !config.allowCreatingProfileDirectory && !fs.existsSync(profilePath)) {
|
|
27
|
+
throw new ConfigError('Configured Chrome profileDirectory does not exist inside userDataDir. Refusing to create a new Chrome profile.', {
|
|
28
|
+
details: { profileDirectory: config.profileDirectory, profilePath }
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (config.runningInstance !== undefined) {
|
|
33
|
+
validateRunningChromeInstanceConfig(config.runningInstance);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function validateRemoteDebuggingConfig(config) {
|
|
37
|
+
if (config.mode !== 'remote-debugging') {
|
|
38
|
+
throw new ConfigError('validateRemoteDebuggingConfig only accepts remote-debugging mode.');
|
|
39
|
+
}
|
|
40
|
+
validateRemoteDebuggingEndpointConfig(config);
|
|
41
|
+
}
|
|
42
|
+
export function validateRunningChromeInstanceConfig(config) {
|
|
43
|
+
validateRemoteDebuggingEndpointConfig(config);
|
|
44
|
+
}
|
|
45
|
+
function validateRemoteDebuggingEndpointConfig(config) {
|
|
46
|
+
if (config.browserURL !== undefined && config.browserWSEndpoint !== undefined) {
|
|
47
|
+
throw new ConfigError('Use either browser.browserURL or browser.browserWSEndpoint, not both.');
|
|
48
|
+
}
|
|
49
|
+
if (config.browserURL !== undefined && config.browserURL.trim().length === 0) {
|
|
50
|
+
throw new ConfigError('browser.browserURL cannot be empty.');
|
|
51
|
+
}
|
|
52
|
+
if (config.browserWSEndpoint !== undefined && config.browserWSEndpoint.trim().length === 0) {
|
|
53
|
+
throw new ConfigError('browser.browserWSEndpoint cannot be empty.');
|
|
54
|
+
}
|
|
55
|
+
if (config.remoteDebuggingPort !== undefined && (!Number.isInteger(config.remoteDebuggingPort) || config.remoteDebuggingPort < 1 || config.remoteDebuggingPort > 65_535)) {
|
|
56
|
+
throw new ConfigError('browser.remoteDebuggingPort must be an integer between 1 and 65535.');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=profileValidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileValidation.js","sourceRoot":"","sources":["../../src/browser/profileValidation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":""}
|