@amalgm/browser 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/LICENSE +5 -0
- package/PURPOSE.md +117 -0
- package/README.md +120 -0
- package/SECURITY.md +49 -0
- package/dist/bin/amalgm-browser-mcp.d.ts +2 -0
- package/dist/bin/amalgm-browser-mcp.js +5 -0
- package/dist/bin/amalgm-browser-mcp.js.map +1 -0
- package/dist/bin/amalgm-browser-rest.d.ts +2 -0
- package/dist/bin/amalgm-browser-rest.js +20 -0
- package/dist/bin/amalgm-browser-rest.js.map +1 -0
- package/dist/bin/amalgm-browser.d.ts +2 -0
- package/dist/bin/amalgm-browser.js +4 -0
- package/dist/bin/amalgm-browser.js.map +1 -0
- package/dist/src/action.d.ts +5 -0
- package/dist/src/action.js +42 -0
- package/dist/src/action.js.map +1 -0
- package/dist/src/adapters/actions.d.ts +10 -0
- package/dist/src/adapters/actions.js +41 -0
- package/dist/src/adapters/actions.js.map +1 -0
- package/dist/src/adapters/cli/actions.d.ts +7 -0
- package/dist/src/adapters/cli/actions.js +63 -0
- package/dist/src/adapters/cli/actions.js.map +1 -0
- package/dist/src/adapters/cli/args.d.ts +8 -0
- package/dist/src/adapters/cli/args.js +41 -0
- package/dist/src/adapters/cli/args.js.map +1 -0
- package/dist/src/adapters/cli/help.d.ts +1 -0
- package/dist/src/adapters/cli/help.js +29 -0
- package/dist/src/adapters/cli/help.js.map +1 -0
- package/dist/src/adapters/cli/resources.d.ts +4 -0
- package/dist/src/adapters/cli/resources.js +116 -0
- package/dist/src/adapters/cli/resources.js.map +1 -0
- package/dist/src/adapters/cli/run.d.ts +7 -0
- package/dist/src/adapters/cli/run.js +108 -0
- package/dist/src/adapters/cli/run.js.map +1 -0
- package/dist/src/adapters/execute.d.ts +4 -0
- package/dist/src/adapters/execute.js +91 -0
- package/dist/src/adapters/execute.js.map +1 -0
- package/dist/src/adapters/http/auth-routes.d.ts +2 -0
- package/dist/src/adapters/http/auth-routes.js +93 -0
- package/dist/src/adapters/http/auth-routes.js.map +1 -0
- package/dist/src/adapters/http/events.d.ts +3 -0
- package/dist/src/adapters/http/events.js +20 -0
- package/dist/src/adapters/http/events.js.map +1 -0
- package/dist/src/adapters/http/internal-routes.d.ts +2 -0
- package/dist/src/adapters/http/internal-routes.js +35 -0
- package/dist/src/adapters/http/internal-routes.js.map +1 -0
- package/dist/src/adapters/http/openapi.d.ts +1 -0
- package/dist/src/adapters/http/openapi.js +78 -0
- package/dist/src/adapters/http/openapi.js.map +1 -0
- package/dist/src/adapters/http/profile-routes.d.ts +2 -0
- package/dist/src/adapters/http/profile-routes.js +42 -0
- package/dist/src/adapters/http/profile-routes.js.map +1 -0
- package/dist/src/adapters/http/recording-routes.d.ts +2 -0
- package/dist/src/adapters/http/recording-routes.js +41 -0
- package/dist/src/adapters/http/recording-routes.js.map +1 -0
- package/dist/src/adapters/http/request.d.ts +4 -0
- package/dist/src/adapters/http/request.js +44 -0
- package/dist/src/adapters/http/request.js.map +1 -0
- package/dist/src/adapters/http/server.d.ts +2 -0
- package/dist/src/adapters/http/server.js +114 -0
- package/dist/src/adapters/http/server.js.map +1 -0
- package/dist/src/adapters/http/session-routes.d.ts +2 -0
- package/dist/src/adapters/http/session-routes.js +54 -0
- package/dist/src/adapters/http/session-routes.js.map +1 -0
- package/dist/src/adapters/http/types.d.ts +29 -0
- package/dist/src/adapters/http/types.js +2 -0
- package/dist/src/adapters/http/types.js.map +1 -0
- package/dist/src/adapters/mcp/server.d.ts +3 -0
- package/dist/src/adapters/mcp/server.js +74 -0
- package/dist/src/adapters/mcp/server.js.map +1 -0
- package/dist/src/adapters/mcp/tools.d.ts +3 -0
- package/dist/src/adapters/mcp/tools.js +45 -0
- package/dist/src/adapters/mcp/tools.js.map +1 -0
- package/dist/src/adapters/mcp/types.d.ts +17 -0
- package/dist/src/adapters/mcp/types.js +2 -0
- package/dist/src/adapters/mcp/types.js.map +1 -0
- package/dist/src/adapters/toolbox/aliases.d.ts +5 -0
- package/dist/src/adapters/toolbox/aliases.js +14 -0
- package/dist/src/adapters/toolbox/aliases.js.map +1 -0
- package/dist/src/adapters/toolbox/executor.d.ts +6 -0
- package/dist/src/adapters/toolbox/executor.js +13 -0
- package/dist/src/adapters/toolbox/executor.js.map +1 -0
- package/dist/src/adapters/toolbox/manifest.d.ts +15 -0
- package/dist/src/adapters/toolbox/manifest.js +24 -0
- package/dist/src/adapters/toolbox/manifest.js.map +1 -0
- package/dist/src/artifacts.d.ts +14 -0
- package/dist/src/artifacts.js +28 -0
- package/dist/src/artifacts.js.map +1 -0
- package/dist/src/auth/filter.d.ts +3 -0
- package/dist/src/auth/filter.js +60 -0
- package/dist/src/auth/filter.js.map +1 -0
- package/dist/src/auth/login.d.ts +41 -0
- package/dist/src/auth/login.js +145 -0
- package/dist/src/auth/login.js.map +1 -0
- package/dist/src/auth/portable.d.ts +18 -0
- package/dist/src/auth/portable.js +48 -0
- package/dist/src/auth/portable.js.map +1 -0
- package/dist/src/auth/service.d.ts +29 -0
- package/dist/src/auth/service.js +104 -0
- package/dist/src/auth/service.js.map +1 -0
- package/dist/src/auth/transport.d.ts +8 -0
- package/dist/src/auth/transport.js +45 -0
- package/dist/src/auth/transport.js.map +1 -0
- package/dist/src/auth/vault.d.ts +10 -0
- package/dist/src/auth/vault.js +27 -0
- package/dist/src/auth/vault.js.map +1 -0
- package/dist/src/cli.d.ts +2 -0
- package/dist/src/cli.js +3 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cookies/coordinator.d.ts +17 -0
- package/dist/src/cookies/coordinator.js +93 -0
- package/dist/src/cookies/coordinator.js.map +1 -0
- package/dist/src/cookies/jar.d.ts +21 -0
- package/dist/src/cookies/jar.js +146 -0
- package/dist/src/cookies/jar.js.map +1 -0
- package/dist/src/cookies/policy.d.ts +6 -0
- package/dist/src/cookies/policy.js +58 -0
- package/dist/src/cookies/policy.js.map +1 -0
- package/dist/src/cookies/secret-file.d.ts +10 -0
- package/dist/src/cookies/secret-file.js +80 -0
- package/dist/src/cookies/secret-file.js.map +1 -0
- package/dist/src/cookies/types.d.ts +64 -0
- package/dist/src/cookies/types.js +2 -0
- package/dist/src/cookies/types.js.map +1 -0
- package/dist/src/cookies.d.ts +5 -0
- package/dist/src/cookies.js +5 -0
- package/dist/src/cookies.js.map +1 -0
- package/dist/src/defaults.d.ts +24 -0
- package/dist/src/defaults.js +107 -0
- package/dist/src/defaults.js.map +1 -0
- package/dist/src/drivers/cdp/capture.d.ts +5 -0
- package/dist/src/drivers/cdp/capture.js +39 -0
- package/dist/src/drivers/cdp/capture.js.map +1 -0
- package/dist/src/drivers/cdp/client.d.ts +8 -0
- package/dist/src/drivers/cdp/client.js +88 -0
- package/dist/src/drivers/cdp/client.js.map +1 -0
- package/dist/src/drivers/cdp/input.d.ts +2 -0
- package/dist/src/drivers/cdp/input.js +15 -0
- package/dist/src/drivers/cdp/input.js.map +1 -0
- package/dist/src/drivers/cdp/screencast.d.ts +2 -0
- package/dist/src/drivers/cdp/screencast.js +39 -0
- package/dist/src/drivers/cdp/screencast.js.map +1 -0
- package/dist/src/drivers/cdp/target.d.ts +4 -0
- package/dist/src/drivers/cdp/target.js +34 -0
- package/dist/src/drivers/cdp/target.js.map +1 -0
- package/dist/src/drivers/electron/advertisement.d.ts +12 -0
- package/dist/src/drivers/electron/advertisement.js +57 -0
- package/dist/src/drivers/electron/advertisement.js.map +1 -0
- package/dist/src/drivers/electron/contracts.d.ts +45 -0
- package/dist/src/drivers/electron/contracts.js +10 -0
- package/dist/src/drivers/electron/contracts.js.map +1 -0
- package/dist/src/drivers/electron/cookie-adapter.d.ts +17 -0
- package/dist/src/drivers/electron/cookie-adapter.js +69 -0
- package/dist/src/drivers/electron/cookie-adapter.js.map +1 -0
- package/dist/src/drivers/electron/driver.d.ts +19 -0
- package/dist/src/drivers/electron/driver.js +115 -0
- package/dist/src/drivers/electron/driver.js.map +1 -0
- package/dist/src/drivers/electron/native/adblock/cache.d.ts +4 -0
- package/dist/src/drivers/electron/native/adblock/cache.js +54 -0
- package/dist/src/drivers/electron/native/adblock/cache.js.map +1 -0
- package/dist/src/drivers/electron/native/adblock/cosmetics.d.ts +11 -0
- package/dist/src/drivers/electron/native/adblock/cosmetics.js +45 -0
- package/dist/src/drivers/electron/native/adblock/cosmetics.js.map +1 -0
- package/dist/src/drivers/electron/native/adblock/index.d.ts +44 -0
- package/dist/src/drivers/electron/native/adblock/index.js +153 -0
- package/dist/src/drivers/electron/native/adblock/index.js.map +1 -0
- package/dist/src/drivers/electron/native/adblock/policy.d.ts +2 -0
- package/dist/src/drivers/electron/native/adblock/policy.js +12 -0
- package/dist/src/drivers/electron/native/adblock/policy.js.map +1 -0
- package/dist/src/drivers/electron/native/adblock/preload.d.ts +1 -0
- package/dist/src/drivers/electron/native/adblock/preload.js +131 -0
- package/dist/src/drivers/electron/native/adblock/preload.js.map +1 -0
- package/dist/src/drivers/electron/native/adblock/settings.d.ts +9 -0
- package/dist/src/drivers/electron/native/adblock/settings.js +37 -0
- package/dist/src/drivers/electron/native/adblock/settings.js.map +1 -0
- package/dist/src/drivers/electron/native/config.d.ts +4 -0
- package/dist/src/drivers/electron/native/config.js +9 -0
- package/dist/src/drivers/electron/native/config.js.map +1 -0
- package/dist/src/drivers/electron/native/contracts.d.ts +174 -0
- package/dist/src/drivers/electron/native/contracts.js +20 -0
- package/dist/src/drivers/electron/native/contracts.js.map +1 -0
- package/dist/src/drivers/electron/native/policy.d.ts +7 -0
- package/dist/src/drivers/electron/native/policy.js +43 -0
- package/dist/src/drivers/electron/native/policy.js.map +1 -0
- package/dist/src/drivers/electron/native/session.d.ts +4 -0
- package/dist/src/drivers/electron/native/session.js +11 -0
- package/dist/src/drivers/electron/native/session.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/adblock-ipc.d.ts +10 -0
- package/dist/src/drivers/electron/native/shell/adblock-ipc.js +44 -0
- package/dist/src/drivers/electron/native/shell/adblock-ipc.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/context-menu.d.ts +11 -0
- package/dist/src/drivers/electron/native/shell/context-menu.js +129 -0
- package/dist/src/drivers/electron/native/shell/context-menu.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/downloads.d.ts +11 -0
- package/dist/src/drivers/electron/native/shell/downloads.js +90 -0
- package/dist/src/drivers/electron/native/shell/downloads.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/helpers.d.ts +5 -0
- package/dist/src/drivers/electron/native/shell/helpers.js +53 -0
- package/dist/src/drivers/electron/native/shell/helpers.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/permissions.d.ts +16 -0
- package/dist/src/drivers/electron/native/shell/permissions.js +107 -0
- package/dist/src/drivers/electron/native/shell/permissions.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/sites.d.ts +24 -0
- package/dist/src/drivers/electron/native/shell/sites.js +119 -0
- package/dist/src/drivers/electron/native/shell/sites.js.map +1 -0
- package/dist/src/drivers/electron/native/shell/types.d.ts +13 -0
- package/dist/src/drivers/electron/native/shell/types.js +2 -0
- package/dist/src/drivers/electron/native/shell/types.js.map +1 -0
- package/dist/src/drivers/electron/native/shell.d.ts +14 -0
- package/dist/src/drivers/electron/native/shell.js +115 -0
- package/dist/src/drivers/electron/native/shell.js.map +1 -0
- package/dist/src/drivers/electron/native/surface/commands.d.ts +4 -0
- package/dist/src/drivers/electron/native/surface/commands.js +49 -0
- package/dist/src/drivers/electron/native/surface/commands.js.map +1 -0
- package/dist/src/drivers/electron/native/surface/create.d.ts +4 -0
- package/dist/src/drivers/electron/native/surface/create.js +46 -0
- package/dist/src/drivers/electron/native/surface/create.js.map +1 -0
- package/dist/src/drivers/electron/native/surface/events.d.ts +3 -0
- package/dist/src/drivers/electron/native/surface/events.js +55 -0
- package/dist/src/drivers/electron/native/surface/events.js.map +1 -0
- package/dist/src/drivers/electron/native/surface/presentation.d.ts +15 -0
- package/dist/src/drivers/electron/native/surface/presentation.js +87 -0
- package/dist/src/drivers/electron/native/surface/presentation.js.map +1 -0
- package/dist/src/drivers/electron/native/surface/state.d.ts +7 -0
- package/dist/src/drivers/electron/native/surface/state.js +45 -0
- package/dist/src/drivers/electron/native/surface/state.js.map +1 -0
- package/dist/src/drivers/electron/native/surface/types.d.ts +39 -0
- package/dist/src/drivers/electron/native/surface/types.js +2 -0
- package/dist/src/drivers/electron/native/surface/types.js.map +1 -0
- package/dist/src/drivers/electron/native/surface-controller.d.ts +6 -0
- package/dist/src/drivers/electron/native/surface-controller.js +138 -0
- package/dist/src/drivers/electron/native/surface-controller.js.map +1 -0
- package/dist/src/drivers/electron/policy.d.ts +4 -0
- package/dist/src/drivers/electron/policy.js +39 -0
- package/dist/src/drivers/electron/policy.js.map +1 -0
- package/dist/src/drivers/electron/session.d.ts +4 -0
- package/dist/src/drivers/electron/session.js +5 -0
- package/dist/src/drivers/electron/session.js.map +1 -0
- package/dist/src/drivers/headless/command.d.ts +25 -0
- package/dist/src/drivers/headless/command.js +114 -0
- package/dist/src/drivers/headless/command.js.map +1 -0
- package/dist/src/drivers/headless/cookie-adapter.d.ts +16 -0
- package/dist/src/drivers/headless/cookie-adapter.js +59 -0
- package/dist/src/drivers/headless/cookie-adapter.js.map +1 -0
- package/dist/src/drivers/headless/driver.d.ts +31 -0
- package/dist/src/drivers/headless/driver.js +238 -0
- package/dist/src/drivers/headless/driver.js.map +1 -0
- package/dist/src/drivers/headless/executable.d.ts +8 -0
- package/dist/src/drivers/headless/executable.js +56 -0
- package/dist/src/drivers/headless/executable.js.map +1 -0
- package/dist/src/drivers/headless/screencast.d.ts +3 -0
- package/dist/src/drivers/headless/screencast.js +21 -0
- package/dist/src/drivers/headless/screencast.js.map +1 -0
- package/dist/src/electron.d.ts +14 -0
- package/dist/src/electron.js +15 -0
- package/dist/src/electron.js.map +1 -0
- package/dist/src/errors.d.ts +9 -0
- package/dist/src/errors.js +25 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/events.d.ts +13 -0
- package/dist/src/events.js +32 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/headless.d.ts +3 -0
- package/dist/src/headless.js +4 -0
- package/dist/src/headless.js.map +1 -0
- package/dist/src/http.d.ts +3 -0
- package/dist/src/http.js +3 -0
- package/dist/src/http.js.map +1 -0
- package/dist/src/ids.d.ts +2 -0
- package/dist/src/ids.js +9 -0
- package/dist/src/ids.js.map +1 -0
- package/dist/src/index.d.ts +14 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/interaction/delta.d.ts +25 -0
- package/dist/src/interaction/delta.js +102 -0
- package/dist/src/interaction/delta.js.map +1 -0
- package/dist/src/interaction/typing.d.ts +39 -0
- package/dist/src/interaction/typing.js +189 -0
- package/dist/src/interaction/typing.js.map +1 -0
- package/dist/src/mcp.d.ts +3 -0
- package/dist/src/mcp.js +3 -0
- package/dist/src/mcp.js.map +1 -0
- package/dist/src/migration/legacy-cookies.d.ts +2 -0
- package/dist/src/migration/legacy-cookies.js +60 -0
- package/dist/src/migration/legacy-cookies.js.map +1 -0
- package/dist/src/migration/legacy-crypto.d.ts +1 -0
- package/dist/src/migration/legacy-crypto.js +35 -0
- package/dist/src/migration/legacy-crypto.js.map +1 -0
- package/dist/src/migration/legacy-migration.d.ts +20 -0
- package/dist/src/migration/legacy-migration.js +81 -0
- package/dist/src/migration/legacy-migration.js.map +1 -0
- package/dist/src/migration/legacy-rows.d.ts +5 -0
- package/dist/src/migration/legacy-rows.js +72 -0
- package/dist/src/migration/legacy-rows.js.map +1 -0
- package/dist/src/persistence/sqlite-registry.d.ts +32 -0
- package/dist/src/persistence/sqlite-registry.js +136 -0
- package/dist/src/persistence/sqlite-registry.js.map +1 -0
- package/dist/src/ports.d.ts +93 -0
- package/dist/src/ports.js +4 -0
- package/dist/src/ports.js.map +1 -0
- package/dist/src/process.d.ts +4 -0
- package/dist/src/process.js +63 -0
- package/dist/src/process.js.map +1 -0
- package/dist/src/product-service.d.ts +30 -0
- package/dist/src/product-service.js +38 -0
- package/dist/src/product-service.js.map +1 -0
- package/dist/src/profiles/directories.d.ts +9 -0
- package/dist/src/profiles/directories.js +57 -0
- package/dist/src/profiles/directories.js.map +1 -0
- package/dist/src/profiles/service.d.ts +30 -0
- package/dist/src/profiles/service.js +89 -0
- package/dist/src/profiles/service.js.map +1 -0
- package/dist/src/recording/encoder.d.ts +22 -0
- package/dist/src/recording/encoder.js +89 -0
- package/dist/src/recording/encoder.js.map +1 -0
- package/dist/src/recording/sampler.d.ts +18 -0
- package/dist/src/recording/sampler.js +33 -0
- package/dist/src/recording/sampler.js.map +1 -0
- package/dist/src/recording/service.d.ts +27 -0
- package/dist/src/recording/service.js +180 -0
- package/dist/src/recording/service.js.map +1 -0
- package/dist/src/recording/source.d.ts +1 -0
- package/dist/src/recording/source.js +21 -0
- package/dist/src/recording/source.js.map +1 -0
- package/dist/src/recording.d.ts +3 -0
- package/dist/src/recording.js +4 -0
- package/dist/src/recording.js.map +1 -0
- package/dist/src/registry.d.ts +15 -0
- package/dist/src/registry.js +46 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/src/runtime-selector.d.ts +12 -0
- package/dist/src/runtime-selector.js +78 -0
- package/dist/src/runtime-selector.js.map +1 -0
- package/dist/src/service-options.d.ts +19 -0
- package/dist/src/service-options.js +2 -0
- package/dist/src/service-options.js.map +1 -0
- package/dist/src/service.d.ts +39 -0
- package/dist/src/service.js +204 -0
- package/dist/src/service.js.map +1 -0
- package/dist/src/sessions/leases.d.ts +10 -0
- package/dist/src/sessions/leases.js +41 -0
- package/dist/src/sessions/leases.js.map +1 -0
- package/dist/src/sessions/prune.d.ts +2 -0
- package/dist/src/sessions/prune.js +8 -0
- package/dist/src/sessions/prune.js.map +1 -0
- package/dist/src/testing.d.ts +18 -0
- package/dist/src/testing.js +21 -0
- package/dist/src/testing.js.map +1 -0
- package/dist/src/toolbox.d.ts +3 -0
- package/dist/src/toolbox.js +4 -0
- package/dist/src/toolbox.js.map +1 -0
- package/dist/src/types.d.ts +273 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/docs/ACTIONS.md +27 -0
- package/docs/ARCHITECTURE.md +71 -0
- package/docs/AUTHENTICATION.md +56 -0
- package/docs/AXIOMS.md +20 -0
- package/docs/CLI.md +61 -0
- package/docs/COMPATIBILITY.md +45 -0
- package/docs/COOKIES.md +61 -0
- package/docs/ELECTRON_INTEGRATION.md +87 -0
- package/docs/ENGINE_INTEGRATION.md +73 -0
- package/docs/EVENTS.md +30 -0
- package/docs/HEADLESS_RUNTIME.md +58 -0
- package/docs/MCP.md +36 -0
- package/docs/MIGRATION.md +64 -0
- package/docs/OPERATIONS.md +69 -0
- package/docs/README.md +21 -0
- package/docs/REALTIME_BOUNDARY.md +33 -0
- package/docs/RECORDING.md +55 -0
- package/docs/REST.md +69 -0
- package/docs/SDK.md +101 -0
- package/docs/TESTING.md +57 -0
- package/docs/TOOLBOX_INTEGRATION.md +34 -0
- package/docs/TROUBLESHOOTING.md +67 -0
- package/examples/basic.ts +7 -0
- package/examples/custom-driver.ts +45 -0
- package/package.json +78 -0
- package/skills/use-amalgm-browser/SKILL.md +42 -0
- package/skills/use-amalgm-browser/agents/openai.yaml +4 -0
- package/skills/use-amalgm-browser/references/actions.md +40 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { Request } from '@ghostery/adblocker';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { loadAdBlockEngine } from './cache.js';
|
|
4
|
+
import { installCosmeticHandlers } from './cosmetics.js';
|
|
5
|
+
import { AdBlockAllowlist } from './settings.js';
|
|
6
|
+
import { isNativeAdBlockDisabled } from './policy.js';
|
|
7
|
+
export { isAdBlockCacheFresh } from './cache.js';
|
|
8
|
+
export { adBlockHostname, isNativeAdBlockDisabled } from './policy.js';
|
|
9
|
+
export class NativeAdBlocker {
|
|
10
|
+
options;
|
|
11
|
+
engine = null;
|
|
12
|
+
loading;
|
|
13
|
+
installed;
|
|
14
|
+
readyPromise = Promise.resolve();
|
|
15
|
+
removeCosmetics;
|
|
16
|
+
counts = new Map();
|
|
17
|
+
timers = new Map();
|
|
18
|
+
allowlist;
|
|
19
|
+
disabled;
|
|
20
|
+
constructor(options) {
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.disabled = options.disabled ?? isNativeAdBlockDisabled();
|
|
23
|
+
this.loading = !this.disabled;
|
|
24
|
+
this.allowlist = new AdBlockAllowlist(options.settingsPath);
|
|
25
|
+
}
|
|
26
|
+
cosmeticPreloadPath() {
|
|
27
|
+
return this.disabled ? null : this.options.preloadPath || path.join(import.meta.dirname, 'preload.js');
|
|
28
|
+
}
|
|
29
|
+
install(session) {
|
|
30
|
+
if (this.installed === session)
|
|
31
|
+
return;
|
|
32
|
+
this.installed = session;
|
|
33
|
+
if (this.disabled) {
|
|
34
|
+
this.options.onReady();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this.readyPromise = this.initialize();
|
|
38
|
+
this.removeCosmetics = installCosmeticHandlers({
|
|
39
|
+
engine: () => this.engine,
|
|
40
|
+
ready: () => this.readyPromise,
|
|
41
|
+
resolvePage: this.options.resolvePage,
|
|
42
|
+
allowlist: this.allowlist,
|
|
43
|
+
});
|
|
44
|
+
session.webRequest.onBeforeRequest({ urls: ['http://*/*', 'https://*/*'] }, (details, callback) => {
|
|
45
|
+
const page = details.webContentsId ? this.options.resolvePage(details.webContentsId) : null;
|
|
46
|
+
if (!page || !this.engine || !this.allowlist.enabled(page.hostname) || details.resourceType === 'mainFrame') {
|
|
47
|
+
callback({});
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const request = Request.fromRawDetails({
|
|
51
|
+
requestId: String(details.id), tabId: page.webContentsId, url: details.url,
|
|
52
|
+
sourceUrl: details.referrer || page.url, type: details.resourceType, _originalRequestDetails: details,
|
|
53
|
+
});
|
|
54
|
+
if (this.engine.config.guessRequestTypeFromUrl && request.type === 'other')
|
|
55
|
+
request.guessTypeOfRequest();
|
|
56
|
+
const result = this.engine.match(request);
|
|
57
|
+
if (result.redirect) {
|
|
58
|
+
this.blocked(page);
|
|
59
|
+
callback({ redirectURL: result.redirect.dataUrl });
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (result.rewrite?.url) {
|
|
63
|
+
this.blocked(page);
|
|
64
|
+
callback({ redirectURL: result.rewrite.url });
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (result.match) {
|
|
68
|
+
this.blocked(page);
|
|
69
|
+
callback({ cancel: true });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
callback({});
|
|
73
|
+
});
|
|
74
|
+
session.webRequest.onHeadersReceived({ urls: ['http://*/*', 'https://*/*'] }, (details, callback) => {
|
|
75
|
+
const page = details.webContentsId ? this.options.resolvePage(details.webContentsId) : null;
|
|
76
|
+
if (!page || !this.engine || !this.allowlist.enabled(page.hostname)
|
|
77
|
+
|| !['mainFrame', 'subFrame'].includes(details.resourceType)) {
|
|
78
|
+
callback({});
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const request = Request.fromRawDetails({
|
|
82
|
+
requestId: String(details.id), tabId: page.webContentsId, url: details.url,
|
|
83
|
+
sourceUrl: details.referrer || page.url, type: details.resourceType, _originalRequestDetails: details,
|
|
84
|
+
});
|
|
85
|
+
const directive = this.engine.getCSPDirectives(request);
|
|
86
|
+
if (!directive) {
|
|
87
|
+
callback({});
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
const headers = { ...(details.responseHeaders || {}) };
|
|
91
|
+
const policies = [directive];
|
|
92
|
+
for (const [name, values] of Object.entries(headers)) {
|
|
93
|
+
if (name.toLowerCase() !== 'content-security-policy')
|
|
94
|
+
continue;
|
|
95
|
+
policies.push(...values);
|
|
96
|
+
delete headers[name];
|
|
97
|
+
}
|
|
98
|
+
headers['content-security-policy'] = [policies.join(';')];
|
|
99
|
+
callback({ responseHeaders: headers });
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
status(webContentsId, guestId) {
|
|
103
|
+
const page = this.options.resolvePage(webContentsId);
|
|
104
|
+
const hostname = page?.hostname || '';
|
|
105
|
+
return {
|
|
106
|
+
guestId,
|
|
107
|
+
available: !this.disabled && this.engine !== null,
|
|
108
|
+
loading: this.loading,
|
|
109
|
+
enabled: !this.disabled && this.allowlist.enabled(hostname),
|
|
110
|
+
hostname,
|
|
111
|
+
blockedCount: this.counts.get(guestId) || 0,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
setHostEnabled(hostname, enabled) { this.allowlist.setEnabled(hostname, enabled); }
|
|
115
|
+
publish(webContentsId, guestId) { this.options.onStatus(this.status(webContentsId, guestId)); }
|
|
116
|
+
resetGuest(guestId) { this.counts.set(guestId, 0); this.clearTimer(guestId); }
|
|
117
|
+
forgetGuest(guestId) { this.resetGuest(guestId); this.counts.delete(guestId); }
|
|
118
|
+
dispose() {
|
|
119
|
+
this.installed?.webRequest.onBeforeRequest(null);
|
|
120
|
+
this.installed?.webRequest.onHeadersReceived(null);
|
|
121
|
+
this.installed = undefined;
|
|
122
|
+
this.engine = null;
|
|
123
|
+
this.removeCosmetics?.();
|
|
124
|
+
for (const timer of this.timers.values())
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
this.timers.clear();
|
|
127
|
+
}
|
|
128
|
+
async initialize() {
|
|
129
|
+
try {
|
|
130
|
+
this.engine = await loadAdBlockEngine(this.options.cachePath, this.options.fetch);
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
this.loading = false;
|
|
134
|
+
this.options.onReady();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
blocked(page) {
|
|
138
|
+
this.counts.set(page.guestId, (this.counts.get(page.guestId) || 0) + 1);
|
|
139
|
+
if (this.timers.has(page.guestId))
|
|
140
|
+
return;
|
|
141
|
+
this.timers.set(page.guestId, setTimeout(() => {
|
|
142
|
+
this.timers.delete(page.guestId);
|
|
143
|
+
this.options.onStatus(this.status(page.webContentsId, page.guestId));
|
|
144
|
+
}, 250));
|
|
145
|
+
}
|
|
146
|
+
clearTimer(guestId) {
|
|
147
|
+
const timer = this.timers.get(guestId);
|
|
148
|
+
if (timer)
|
|
149
|
+
clearTimeout(timer);
|
|
150
|
+
this.timers.delete(guestId);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/adblock/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function adBlockHostname(value) {
|
|
2
|
+
try {
|
|
3
|
+
return new URL(value).hostname.toLowerCase();
|
|
4
|
+
}
|
|
5
|
+
catch {
|
|
6
|
+
return '';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function isNativeAdBlockDisabled(value = process.env.AMALGM_BROWSER_ADBLOCK) {
|
|
10
|
+
return /^(0|false|no|off)$/i.test(String(value || '').trim());
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/adblock/policy.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,IAAI,CAAC;QAAC,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;IAAC,CAAC;IACrD,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC;IAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB;IAChF,OAAO,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { ipcRenderer } from 'electron';
|
|
2
|
+
const COSMETIC_INJECTION_CHANNEL = '@ghostery/adblocker/inject-cosmetic-filters';
|
|
3
|
+
const MUTATION_OBSERVER_CHANNEL = '@ghostery/adblocker/is-mutation-observer-enabled';
|
|
4
|
+
const IGNORED_TAGS = new Set(['br', 'head', 'link', 'meta', 'script', 'style', 's']);
|
|
5
|
+
const MUTATION_DEBOUNCE_MS = 25;
|
|
6
|
+
const MUTATION_MAX_WAIT_MS = 1_000;
|
|
7
|
+
const MUTATION_ELEMENT_LIMIT = 512;
|
|
8
|
+
// Sandboxed preloads can only require a small Electron-provided module set, so
|
|
9
|
+
// this monitor intentionally stays self-contained instead of importing a DOM
|
|
10
|
+
// helper from node_modules.
|
|
11
|
+
if (window === window.top && !window.location.href.startsWith('devtools://')) {
|
|
12
|
+
const knownClasses = new Set();
|
|
13
|
+
const knownHrefs = new Set();
|
|
14
|
+
const knownIds = new Set();
|
|
15
|
+
const pendingElements = new Set();
|
|
16
|
+
let observer = null;
|
|
17
|
+
let debounceTimer = null;
|
|
18
|
+
let maxWaitTimer = null;
|
|
19
|
+
const inject = (features) => {
|
|
20
|
+
void ipcRenderer
|
|
21
|
+
.invoke(COSMETIC_INJECTION_CHANNEL, window.location.href, features)
|
|
22
|
+
.catch(() => undefined);
|
|
23
|
+
};
|
|
24
|
+
const clearTimers = () => {
|
|
25
|
+
if (debounceTimer)
|
|
26
|
+
clearTimeout(debounceTimer);
|
|
27
|
+
if (maxWaitTimer)
|
|
28
|
+
clearTimeout(maxWaitTimer);
|
|
29
|
+
debounceTimer = null;
|
|
30
|
+
maxWaitTimer = null;
|
|
31
|
+
};
|
|
32
|
+
const addNewValue = (value, known, additions) => {
|
|
33
|
+
if (!value || known.has(value))
|
|
34
|
+
return;
|
|
35
|
+
known.add(value);
|
|
36
|
+
additions.push(value);
|
|
37
|
+
};
|
|
38
|
+
const collectFeatures = (roots) => {
|
|
39
|
+
const classes = [];
|
|
40
|
+
const hrefs = [];
|
|
41
|
+
const ids = [];
|
|
42
|
+
const visited = new Set();
|
|
43
|
+
for (const root of roots) {
|
|
44
|
+
const elements = [
|
|
45
|
+
root,
|
|
46
|
+
...Array.from(root.querySelectorAll('[id], [class], [href]')),
|
|
47
|
+
];
|
|
48
|
+
for (const element of elements) {
|
|
49
|
+
if (visited.has(element))
|
|
50
|
+
continue;
|
|
51
|
+
visited.add(element);
|
|
52
|
+
if (IGNORED_TAGS.has(element.tagName.toLowerCase()))
|
|
53
|
+
continue;
|
|
54
|
+
addNewValue(element.getAttribute('id'), knownIds, ids);
|
|
55
|
+
addNewValue(element.getAttribute('href'), knownHrefs, hrefs);
|
|
56
|
+
for (const className of Array.from(element.classList)) {
|
|
57
|
+
addNewValue(className, knownClasses, classes);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (classes.length || hrefs.length || ids.length) {
|
|
62
|
+
inject({ classes, hrefs, ids, lifecycle: 'dom-update' });
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const flushPendingElements = () => {
|
|
66
|
+
clearTimers();
|
|
67
|
+
if (!pendingElements.size)
|
|
68
|
+
return;
|
|
69
|
+
const elements = [...pendingElements];
|
|
70
|
+
pendingElements.clear();
|
|
71
|
+
collectFeatures(elements);
|
|
72
|
+
};
|
|
73
|
+
const scheduleFlush = () => {
|
|
74
|
+
if (!maxWaitTimer) {
|
|
75
|
+
maxWaitTimer = setTimeout(flushPendingElements, MUTATION_MAX_WAIT_MS);
|
|
76
|
+
}
|
|
77
|
+
if (debounceTimer)
|
|
78
|
+
clearTimeout(debounceTimer);
|
|
79
|
+
debounceTimer = setTimeout(flushPendingElements, MUTATION_DEBOUNCE_MS);
|
|
80
|
+
};
|
|
81
|
+
const queueElement = (node) => {
|
|
82
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
|
83
|
+
pendingElements.add(node);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const startMonitoring = () => {
|
|
87
|
+
if (observer || !document.documentElement)
|
|
88
|
+
return;
|
|
89
|
+
observer = new MutationObserver((mutations) => {
|
|
90
|
+
for (const mutation of mutations) {
|
|
91
|
+
if (mutation.type === 'attributes') {
|
|
92
|
+
queueElement(mutation.target);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
mutation.addedNodes.forEach(queueElement);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (pendingElements.size > MUTATION_ELEMENT_LIMIT) {
|
|
99
|
+
flushPendingElements();
|
|
100
|
+
}
|
|
101
|
+
else if (pendingElements.size) {
|
|
102
|
+
scheduleFlush();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
observer.observe(document.documentElement, {
|
|
106
|
+
attributes: true,
|
|
107
|
+
attributeFilter: ['class', 'id', 'href'],
|
|
108
|
+
childList: true,
|
|
109
|
+
subtree: true,
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
inject();
|
|
113
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
114
|
+
if (document.documentElement)
|
|
115
|
+
collectFeatures([document.documentElement]);
|
|
116
|
+
void ipcRenderer
|
|
117
|
+
.invoke(MUTATION_OBSERVER_CHANNEL)
|
|
118
|
+
.then((enabled) => {
|
|
119
|
+
if (enabled)
|
|
120
|
+
startMonitoring();
|
|
121
|
+
})
|
|
122
|
+
.catch(() => undefined);
|
|
123
|
+
}, { once: true, passive: true });
|
|
124
|
+
window.addEventListener('unload', () => {
|
|
125
|
+
observer?.disconnect();
|
|
126
|
+
observer = null;
|
|
127
|
+
pendingElements.clear();
|
|
128
|
+
clearTimers();
|
|
129
|
+
}, { once: true, passive: true });
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=preload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preload.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/adblock/preload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { writeAtomic } from './cache.js';
|
|
3
|
+
export class AdBlockAllowlist {
|
|
4
|
+
file;
|
|
5
|
+
paused;
|
|
6
|
+
write = Promise.resolve();
|
|
7
|
+
constructor(file) {
|
|
8
|
+
this.file = file;
|
|
9
|
+
this.paused = read(file);
|
|
10
|
+
}
|
|
11
|
+
enabled(hostname) { return Boolean(hostname) && !this.paused.has(normalize(hostname)); }
|
|
12
|
+
setEnabled(hostname, enabled) {
|
|
13
|
+
const value = normalize(hostname);
|
|
14
|
+
if (!value)
|
|
15
|
+
return;
|
|
16
|
+
if (enabled)
|
|
17
|
+
this.paused.delete(value);
|
|
18
|
+
else
|
|
19
|
+
this.paused.add(value);
|
|
20
|
+
const pausedHosts = [...this.paused].sort();
|
|
21
|
+
this.write = this.write.then(() => writeAtomic(this.file, `${JSON.stringify({ pausedHosts }, null, 2)}\n`));
|
|
22
|
+
}
|
|
23
|
+
settled() { return this.write; }
|
|
24
|
+
}
|
|
25
|
+
function read(file) {
|
|
26
|
+
try {
|
|
27
|
+
const value = JSON.parse(fs.readFileSync(file, 'utf8'));
|
|
28
|
+
return new Set(Array.isArray(value.pausedHosts)
|
|
29
|
+
? value.pausedHosts.filter((item) => typeof item === 'string').map(normalize).filter(Boolean)
|
|
30
|
+
: []);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return new Set();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function normalize(value) { return value.trim().toLowerCase(); }
|
|
37
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/adblock/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,OAAO,gBAAgB;IAIN;IAHJ,MAAM,CAAc;IAC7B,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAElC,YAAqB,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAEhE,OAAO,CAAC,QAAgB,IAAa,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzG,UAAU,CAAC,QAAgB,EAAE,OAAgB;QAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,OAAO;YAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;YAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,OAAO,KAAoB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CAChD;AAED,SAAS,IAAI,CAAC,IAAY;IACxB,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAA8B,CAAC;QACrF,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;YAC7C,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC7G,CAAC,CAAC,EAAE,CAAC,CAAC;IACV,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,GAAG,EAAE,CAAC;IAAC,CAAC;AAC/B,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,IAAY,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const LEGACY_BROWSER_SURFACE_PROTOCOL = 5;
|
|
2
|
+
export const NATIVE_BROWSER_SURFACE_PROTOCOL = 6;
|
|
3
|
+
export function nativeBrowserSurfacesEnabled(value = process.env.AMALGM_BROWSER_WCV) {
|
|
4
|
+
return !/^(0|false|no|off)$/i.test(String(value || '').trim());
|
|
5
|
+
}
|
|
6
|
+
export function browserSurfaceProtocol() {
|
|
7
|
+
return nativeBrowserSurfacesEnabled() ? NATIVE_BROWSER_SURFACE_PROTOCOL : LEGACY_BROWSER_SURFACE_PROTOCOL;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../../src/drivers/electron/native/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AACjD,MAAM,CAAC,MAAM,+BAA+B,GAAG,CAAC,CAAC;AAEjD,MAAM,UAAU,4BAA4B,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB;IACjF,OAAO,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,4BAA4B,EAAE,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,+BAA+B,CAAC;AAC5G,CAAC"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
export declare const BROWSER_IPC: {
|
|
2
|
+
readonly registerGuest: "browser:register-guest";
|
|
3
|
+
readonly surfaceCreate: "browser:surface-create";
|
|
4
|
+
readonly surfaceUpdate: "browser:surface-update";
|
|
5
|
+
readonly surfaceDestroy: "browser:surface-destroy";
|
|
6
|
+
readonly surfaceCommand: "browser:surface-command";
|
|
7
|
+
readonly surfaceCapture: "browser:surface-capture";
|
|
8
|
+
readonly surfaceState: "browser:surface-state";
|
|
9
|
+
readonly contextMenu: "browser:context-menu";
|
|
10
|
+
readonly contextAction: "browser:context-action";
|
|
11
|
+
readonly permissionRequest: "browser:permission-request";
|
|
12
|
+
readonly permissionResponse: "browser:permission-response";
|
|
13
|
+
readonly download: "browser:download";
|
|
14
|
+
readonly downloadAction: "browser:download-action";
|
|
15
|
+
readonly adBlockStatus: "browser:ad-block-status";
|
|
16
|
+
readonly adBlockGetStatus: "browser:ad-block-get-status";
|
|
17
|
+
readonly adBlockSetEnabled: "browser:ad-block-set-enabled";
|
|
18
|
+
readonly shortcut: "browser:shortcut";
|
|
19
|
+
};
|
|
20
|
+
export type BrowserShellCapabilities = {
|
|
21
|
+
readonly version: number;
|
|
22
|
+
readonly webContentsView: boolean;
|
|
23
|
+
readonly securePopups: boolean;
|
|
24
|
+
readonly nativeAdBlocking: boolean;
|
|
25
|
+
readonly agentSurfaceBridge: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type BrowserShortcut = 'focus-location' | 'new-tab' | 'close-tab' | 'find' | 'reload' | 'zoom-in' | 'zoom-out' | 'zoom-reset';
|
|
28
|
+
export type BrowserGuestRegistration = {
|
|
29
|
+
guestId: number;
|
|
30
|
+
tabId: string;
|
|
31
|
+
isAutomation: boolean;
|
|
32
|
+
};
|
|
33
|
+
export type BrowserSurfaceBounds = {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
};
|
|
39
|
+
export type BrowserSurfaceCreateRequest = {
|
|
40
|
+
surfaceId: string;
|
|
41
|
+
tabId: string;
|
|
42
|
+
url: string;
|
|
43
|
+
isAutomation: boolean;
|
|
44
|
+
automationSessionId?: string;
|
|
45
|
+
};
|
|
46
|
+
export type BrowserSurfaceUpdateRequest = {
|
|
47
|
+
surfaceId: string;
|
|
48
|
+
bounds: BrowserSurfaceBounds;
|
|
49
|
+
visible: boolean;
|
|
50
|
+
scale: number;
|
|
51
|
+
isAutomation: boolean;
|
|
52
|
+
};
|
|
53
|
+
export type BrowserSurfaceFindResult = {
|
|
54
|
+
activeMatch: number;
|
|
55
|
+
matches: number;
|
|
56
|
+
};
|
|
57
|
+
export type BrowserSurfaceLoadError = {
|
|
58
|
+
code: number;
|
|
59
|
+
description: string;
|
|
60
|
+
url: string;
|
|
61
|
+
};
|
|
62
|
+
export type BrowserSurfaceState = {
|
|
63
|
+
surfaceId: string;
|
|
64
|
+
guestId: number;
|
|
65
|
+
ready: boolean;
|
|
66
|
+
url: string;
|
|
67
|
+
title: string;
|
|
68
|
+
favicons: string[];
|
|
69
|
+
isLoading: boolean;
|
|
70
|
+
canGoBack: boolean;
|
|
71
|
+
canGoForward: boolean;
|
|
72
|
+
zoomFactor: number;
|
|
73
|
+
findResult: BrowserSurfaceFindResult;
|
|
74
|
+
loadError: BrowserSurfaceLoadError | null;
|
|
75
|
+
};
|
|
76
|
+
export type BrowserSurfaceCommandRequest = {
|
|
77
|
+
surfaceId: string;
|
|
78
|
+
command: 'navigate';
|
|
79
|
+
url: string;
|
|
80
|
+
} | {
|
|
81
|
+
surfaceId: string;
|
|
82
|
+
command: 'back' | 'forward' | 'reload' | 'focus';
|
|
83
|
+
} | {
|
|
84
|
+
surfaceId: string;
|
|
85
|
+
command: 'find';
|
|
86
|
+
query: string;
|
|
87
|
+
forward: boolean;
|
|
88
|
+
findNext: boolean;
|
|
89
|
+
} | {
|
|
90
|
+
surfaceId: string;
|
|
91
|
+
command: 'stop-find';
|
|
92
|
+
action: 'clearSelection' | 'keepSelection' | 'activateSelection';
|
|
93
|
+
} | {
|
|
94
|
+
surfaceId: string;
|
|
95
|
+
command: 'set-zoom';
|
|
96
|
+
factor: number;
|
|
97
|
+
};
|
|
98
|
+
export type BrowserContextMenuPayload = {
|
|
99
|
+
requestId: string;
|
|
100
|
+
guestId: number;
|
|
101
|
+
x: number;
|
|
102
|
+
y: number;
|
|
103
|
+
pageUrl: string;
|
|
104
|
+
linkUrl: string;
|
|
105
|
+
linkText: string;
|
|
106
|
+
srcUrl: string;
|
|
107
|
+
mediaType: 'none' | 'image' | 'audio' | 'video' | 'canvas' | 'file' | 'plugin';
|
|
108
|
+
hasImageContents: boolean;
|
|
109
|
+
selectionText: string;
|
|
110
|
+
isEditable: boolean;
|
|
111
|
+
misspelledWord: string;
|
|
112
|
+
dictionarySuggestions: string[];
|
|
113
|
+
editFlags: {
|
|
114
|
+
canUndo: boolean;
|
|
115
|
+
canRedo: boolean;
|
|
116
|
+
canCut: boolean;
|
|
117
|
+
canCopy: boolean;
|
|
118
|
+
canPaste: boolean;
|
|
119
|
+
canDelete: boolean;
|
|
120
|
+
canSelectAll: boolean;
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
export type BrowserContextAction = 'back' | 'forward' | 'reload' | 'cut' | 'copy' | 'paste' | 'select-all' | 'copy-link' | 'copy-image' | 'copy-image-address' | 'open-link-new-tab' | 'open-link-external' | 'save-link' | 'save-image' | 'search-selection' | 'replace-misspelling' | 'inspect';
|
|
124
|
+
export type BrowserContextActionRequest = {
|
|
125
|
+
requestId: string;
|
|
126
|
+
guestId: number;
|
|
127
|
+
action: BrowserContextAction;
|
|
128
|
+
value?: string;
|
|
129
|
+
};
|
|
130
|
+
export type BrowserPermissionPayload = {
|
|
131
|
+
requestId: string;
|
|
132
|
+
guestId: number;
|
|
133
|
+
origin: string;
|
|
134
|
+
permission: string;
|
|
135
|
+
mediaTypes: string[];
|
|
136
|
+
};
|
|
137
|
+
export type BrowserPermissionResponse = {
|
|
138
|
+
requestId: string;
|
|
139
|
+
allow: boolean;
|
|
140
|
+
};
|
|
141
|
+
export type BrowserDownloadState = 'starting' | 'progressing' | 'completed' | 'cancelled' | 'interrupted';
|
|
142
|
+
export type BrowserDownloadPayload = {
|
|
143
|
+
id: string;
|
|
144
|
+
guestId: number;
|
|
145
|
+
filename: string;
|
|
146
|
+
savePath: string;
|
|
147
|
+
url: string;
|
|
148
|
+
receivedBytes: number;
|
|
149
|
+
totalBytes: number;
|
|
150
|
+
percent: number | null;
|
|
151
|
+
state: BrowserDownloadState;
|
|
152
|
+
canResume: boolean;
|
|
153
|
+
startedAt: number;
|
|
154
|
+
};
|
|
155
|
+
export type BrowserDownloadActionRequest = {
|
|
156
|
+
id: string;
|
|
157
|
+
action: 'cancel' | 'resume' | 'open' | 'show' | 'remove';
|
|
158
|
+
};
|
|
159
|
+
export type BrowserAdBlockStatus = {
|
|
160
|
+
guestId: number;
|
|
161
|
+
available: boolean;
|
|
162
|
+
loading: boolean;
|
|
163
|
+
enabled: boolean;
|
|
164
|
+
hostname: string;
|
|
165
|
+
blockedCount: number;
|
|
166
|
+
};
|
|
167
|
+
export type BrowserAdBlockSetRequest = {
|
|
168
|
+
guestId: number;
|
|
169
|
+
enabled: boolean;
|
|
170
|
+
};
|
|
171
|
+
export type BrowserShortcutPayload = {
|
|
172
|
+
guestId: number | null;
|
|
173
|
+
command: BrowserShortcut;
|
|
174
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const BROWSER_IPC = {
|
|
2
|
+
registerGuest: 'browser:register-guest',
|
|
3
|
+
surfaceCreate: 'browser:surface-create',
|
|
4
|
+
surfaceUpdate: 'browser:surface-update',
|
|
5
|
+
surfaceDestroy: 'browser:surface-destroy',
|
|
6
|
+
surfaceCommand: 'browser:surface-command',
|
|
7
|
+
surfaceCapture: 'browser:surface-capture',
|
|
8
|
+
surfaceState: 'browser:surface-state',
|
|
9
|
+
contextMenu: 'browser:context-menu',
|
|
10
|
+
contextAction: 'browser:context-action',
|
|
11
|
+
permissionRequest: 'browser:permission-request',
|
|
12
|
+
permissionResponse: 'browser:permission-response',
|
|
13
|
+
download: 'browser:download',
|
|
14
|
+
downloadAction: 'browser:download-action',
|
|
15
|
+
adBlockStatus: 'browser:ad-block-status',
|
|
16
|
+
adBlockGetStatus: 'browser:ad-block-get-status',
|
|
17
|
+
adBlockSetEnabled: 'browser:ad-block-set-enabled',
|
|
18
|
+
shortcut: 'browser:shortcut',
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../../../src/drivers/electron/native/contracts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,aAAa,EAAE,wBAAwB;IACvC,aAAa,EAAE,wBAAwB;IACvC,aAAa,EAAE,wBAAwB;IACvC,cAAc,EAAE,yBAAyB;IACzC,cAAc,EAAE,yBAAyB;IACzC,cAAc,EAAE,yBAAyB;IACzC,YAAY,EAAE,uBAAuB;IACrC,WAAW,EAAE,sBAAsB;IACnC,aAAa,EAAE,wBAAwB;IACvC,iBAAiB,EAAE,4BAA4B;IAC/C,kBAAkB,EAAE,6BAA6B;IACjD,QAAQ,EAAE,kBAAkB;IAC5B,cAAc,EAAE,yBAAyB;IACzC,aAAa,EAAE,yBAAyB;IACxC,gBAAgB,EAAE,6BAA6B;IAC/C,iBAAiB,EAAE,8BAA8B;IACjD,QAAQ,EAAE,kBAAkB;CACpB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function parseUrl(value: string): URL | null;
|
|
2
|
+
export declare function isAllowedWebUrl(value: string): boolean;
|
|
3
|
+
export declare function isAllowedExternalUrl(value: string): boolean;
|
|
4
|
+
export declare function permissionOrigin(requestingUrl: string, fallbackUrl: string): string;
|
|
5
|
+
export declare function shouldOpenAsTab(disposition: string): boolean;
|
|
6
|
+
export declare function safeDownloadFilename(value: string): string;
|
|
7
|
+
export declare function nextAvailableDownloadPath(downloadsDirectory: string, filename: string, exists: (candidate: string) => boolean): string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import path from 'path';
|
|
2
|
+
const WEB_PROTOCOLS = new Set(['http:', 'https:', 'about:']);
|
|
3
|
+
const EXTERNAL_PROTOCOLS = new Set(['mailto:', 'tel:']);
|
|
4
|
+
export function parseUrl(value) {
|
|
5
|
+
try {
|
|
6
|
+
return new URL(value);
|
|
7
|
+
}
|
|
8
|
+
catch {
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function isAllowedWebUrl(value) {
|
|
13
|
+
const parsed = parseUrl(value);
|
|
14
|
+
return Boolean(parsed && WEB_PROTOCOLS.has(parsed.protocol));
|
|
15
|
+
}
|
|
16
|
+
export function isAllowedExternalUrl(value) {
|
|
17
|
+
const parsed = parseUrl(value);
|
|
18
|
+
return Boolean(parsed && EXTERNAL_PROTOCOLS.has(parsed.protocol));
|
|
19
|
+
}
|
|
20
|
+
export function permissionOrigin(requestingUrl, fallbackUrl) {
|
|
21
|
+
const parsed = parseUrl(requestingUrl) ?? parseUrl(fallbackUrl);
|
|
22
|
+
return parsed?.origin && parsed.origin !== 'null' ? parsed.origin : '';
|
|
23
|
+
}
|
|
24
|
+
export function shouldOpenAsTab(disposition) {
|
|
25
|
+
return disposition === 'foreground-tab' || disposition === 'background-tab';
|
|
26
|
+
}
|
|
27
|
+
export function safeDownloadFilename(value) {
|
|
28
|
+
const filename = path.basename(String(value || '').trim());
|
|
29
|
+
return filename && filename !== '.' && filename !== '..' ? filename : 'download';
|
|
30
|
+
}
|
|
31
|
+
export function nextAvailableDownloadPath(downloadsDirectory, filename, exists) {
|
|
32
|
+
const safeName = safeDownloadFilename(filename);
|
|
33
|
+
const extension = path.extname(safeName);
|
|
34
|
+
const stem = path.basename(safeName, extension);
|
|
35
|
+
let candidate = path.join(downloadsDirectory, safeName);
|
|
36
|
+
let suffix = 1;
|
|
37
|
+
while (exists(candidate)) {
|
|
38
|
+
candidate = path.join(downloadsDirectory, `${stem} (${suffix})${extension}`);
|
|
39
|
+
suffix += 1;
|
|
40
|
+
}
|
|
41
|
+
return candidate;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=policy.js.map
|