@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 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../../../src/drivers/electron/native/policy.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7D,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AAExD,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,aAAqB,EAAE,WAAmB;IACzE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChE,OAAO,MAAM,EAAE,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,OAAO,WAAW,KAAK,gBAAgB,IAAI,WAAW,KAAK,gBAAgB,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,QAAQ,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;AACnF,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,kBAA0B,EAC1B,QAAgB,EAChB,MAAsC;IAEtC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IACxD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QACzB,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,IAAI,KAAK,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QAC7E,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { session } from 'electron';
|
|
2
|
+
import { BROWSER_SESSION_PARTITION } from '../contracts.js';
|
|
3
|
+
export { BROWSER_SESSION_PARTITION } from '../contracts.js';
|
|
4
|
+
let browserSession = null;
|
|
5
|
+
export function getBrowserSession() {
|
|
6
|
+
if (!browserSession)
|
|
7
|
+
browserSession = session.fromPartition(BROWSER_SESSION_PARTITION, { cache: true });
|
|
8
|
+
return browserSession;
|
|
9
|
+
}
|
|
10
|
+
export function resetBrowserSessionForTests() { browserSession = null; }
|
|
11
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../src/drivers/electron/native/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAgB,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAE5D,IAAI,cAAc,GAAmB,IAAI,CAAC;AAE1C,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,cAAc;QAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxG,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,2BAA2B,KAAW,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type NativeAdBlocker } from '../adblock/index.js';
|
|
2
|
+
import type { ShellSites } from './types.js';
|
|
3
|
+
export declare class BrowserAdBlockIpc {
|
|
4
|
+
private readonly blocker;
|
|
5
|
+
private readonly sites;
|
|
6
|
+
constructor(blocker: NativeAdBlocker, sites: ShellSites);
|
|
7
|
+
dispose(): void;
|
|
8
|
+
private readonly getStatus;
|
|
9
|
+
private readonly setEnabled;
|
|
10
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ipcMain } from 'electron';
|
|
2
|
+
import { BROWSER_IPC } from '../contracts.js';
|
|
3
|
+
import { adBlockHostname } from '../adblock/index.js';
|
|
4
|
+
export class BrowserAdBlockIpc {
|
|
5
|
+
blocker;
|
|
6
|
+
sites;
|
|
7
|
+
constructor(blocker, sites) {
|
|
8
|
+
this.blocker = blocker;
|
|
9
|
+
this.sites = sites;
|
|
10
|
+
ipcMain.handle(BROWSER_IPC.adBlockGetStatus, this.getStatus);
|
|
11
|
+
ipcMain.handle(BROWSER_IPC.adBlockSetEnabled, this.setEnabled);
|
|
12
|
+
}
|
|
13
|
+
dispose() {
|
|
14
|
+
ipcMain.removeHandler(BROWSER_IPC.adBlockGetStatus);
|
|
15
|
+
ipcMain.removeHandler(BROWSER_IPC.adBlockSetEnabled);
|
|
16
|
+
}
|
|
17
|
+
getStatus = (event, guestId) => {
|
|
18
|
+
if (!Number.isInteger(guestId))
|
|
19
|
+
return null;
|
|
20
|
+
const site = this.sites.forRootGuest(guestId);
|
|
21
|
+
if (!site || site.embedder.id !== event.sender.id)
|
|
22
|
+
return null;
|
|
23
|
+
return this.blocker.status(site.contents.id, site.rootGuestId);
|
|
24
|
+
};
|
|
25
|
+
setEnabled = (event, request) => {
|
|
26
|
+
if (!request || !Number.isInteger(request.guestId))
|
|
27
|
+
return null;
|
|
28
|
+
const site = this.sites.forRootGuest(request.guestId);
|
|
29
|
+
if (!site || site.embedder.id !== event.sender.id)
|
|
30
|
+
return null;
|
|
31
|
+
const status = this.blocker.status(site.contents.id, site.rootGuestId);
|
|
32
|
+
if (!status.hostname)
|
|
33
|
+
return status;
|
|
34
|
+
this.blocker.setHostEnabled(status.hostname, request.enabled === true);
|
|
35
|
+
for (const candidate of this.sites.values()) {
|
|
36
|
+
if (candidate.contents.id === candidate.rootGuestId
|
|
37
|
+
&& adBlockHostname(candidate.contents.getURL()) === status.hostname) {
|
|
38
|
+
this.blocker.publish(candidate.contents.id, candidate.rootGuestId);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return this.blocker.status(site.contents.id, site.rootGuestId);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=adblock-ipc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adblock-ipc.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/shell/adblock-ipc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAiC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAwB,MAAM,qBAAqB,CAAC;AAG5E,MAAM,OAAO,iBAAiB;IACC;IAA2C;IAAxE,YAA6B,OAAwB,EAAmB,KAAiB;QAA5D,YAAO,GAAP,OAAO,CAAiB;QAAmB,UAAK,GAAL,KAAK,CAAY;QACvF,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7D,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACjE,CAAC;IAED,OAAO;QACL,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QACpD,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IACvD,CAAC;IAEgB,SAAS,GAAG,CAAC,KAAkC,EAAE,OAAe,EAAE,EAAE;QACnF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC/D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC;IAEe,UAAU,GAAG,CAC5B,KAAkC,EAClC,OAAiC,EACjC,EAAE;QACF,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC;QACpC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;QACvE,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,KAAK,SAAS,CAAC,WAAW;mBAC9C,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACtE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC;CACH"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type ContextMenuParams } from 'electron';
|
|
2
|
+
import type { ShellSite } from './types.js';
|
|
3
|
+
export declare class BrowserContextMenuController {
|
|
4
|
+
private readonly isDev;
|
|
5
|
+
private readonly requests;
|
|
6
|
+
constructor(isDev: boolean);
|
|
7
|
+
show(site: ShellSite, params: ContextMenuParams): void;
|
|
8
|
+
dispose(): void;
|
|
9
|
+
private readonly handleAction;
|
|
10
|
+
private openTab;
|
|
11
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { BrowserWindow, clipboard, ipcMain, Menu, shell } from 'electron';
|
|
3
|
+
import { BROWSER_IPC, } from '../contracts.js';
|
|
4
|
+
import { isAllowedWebUrl } from '../policy.js';
|
|
5
|
+
import { send } from './helpers.js';
|
|
6
|
+
export class BrowserContextMenuController {
|
|
7
|
+
isDev;
|
|
8
|
+
requests = new Map();
|
|
9
|
+
constructor(isDev) {
|
|
10
|
+
this.isDev = isDev;
|
|
11
|
+
ipcMain.handle(BROWSER_IPC.contextAction, this.handleAction);
|
|
12
|
+
}
|
|
13
|
+
show(site, params) {
|
|
14
|
+
if (site.contents.id !== site.rootGuestId) {
|
|
15
|
+
const menu = Menu.buildFromTemplate([
|
|
16
|
+
...(params.isEditable ? [
|
|
17
|
+
{ role: 'cut' }, { role: 'copy' }, { role: 'paste' },
|
|
18
|
+
{ type: 'separator' },
|
|
19
|
+
] : []),
|
|
20
|
+
{ role: 'selectAll' },
|
|
21
|
+
]);
|
|
22
|
+
const owner = BrowserWindow.fromWebContents(site.contents);
|
|
23
|
+
menu.popup(owner ? { window: owner } : {});
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const requestId = crypto.randomUUID();
|
|
27
|
+
this.requests.clear();
|
|
28
|
+
this.requests.set(requestId, { site, params });
|
|
29
|
+
send(site.embedder, BROWSER_IPC.contextMenu, payload(requestId, site, params));
|
|
30
|
+
}
|
|
31
|
+
dispose() {
|
|
32
|
+
this.requests.clear();
|
|
33
|
+
ipcMain.removeHandler(BROWSER_IPC.contextAction);
|
|
34
|
+
}
|
|
35
|
+
handleAction = async (event, request) => {
|
|
36
|
+
const context = request ? this.requests.get(request.requestId) : null;
|
|
37
|
+
if (!context || context.site.embedder.id !== event.sender.id)
|
|
38
|
+
return false;
|
|
39
|
+
if (context.site.rootGuestId !== request.guestId || context.site.contents.isDestroyed())
|
|
40
|
+
return false;
|
|
41
|
+
const { site, params } = context;
|
|
42
|
+
const contents = site.contents;
|
|
43
|
+
switch (request.action) {
|
|
44
|
+
case 'back':
|
|
45
|
+
if (contents.canGoBack())
|
|
46
|
+
contents.goBack();
|
|
47
|
+
break;
|
|
48
|
+
case 'forward':
|
|
49
|
+
if (contents.canGoForward())
|
|
50
|
+
contents.goForward();
|
|
51
|
+
break;
|
|
52
|
+
case 'reload':
|
|
53
|
+
contents.reload();
|
|
54
|
+
break;
|
|
55
|
+
case 'cut':
|
|
56
|
+
contents.cut();
|
|
57
|
+
break;
|
|
58
|
+
case 'copy':
|
|
59
|
+
contents.copy();
|
|
60
|
+
break;
|
|
61
|
+
case 'paste':
|
|
62
|
+
contents.paste();
|
|
63
|
+
break;
|
|
64
|
+
case 'select-all':
|
|
65
|
+
contents.selectAll();
|
|
66
|
+
break;
|
|
67
|
+
case 'copy-link':
|
|
68
|
+
if (params.linkURL)
|
|
69
|
+
clipboard.writeText(params.linkURL);
|
|
70
|
+
break;
|
|
71
|
+
case 'copy-image':
|
|
72
|
+
if (params.hasImageContents)
|
|
73
|
+
contents.copyImageAt(params.x, params.y);
|
|
74
|
+
break;
|
|
75
|
+
case 'copy-image-address':
|
|
76
|
+
if (params.srcURL)
|
|
77
|
+
clipboard.writeText(params.srcURL);
|
|
78
|
+
break;
|
|
79
|
+
case 'open-link-new-tab':
|
|
80
|
+
if (isAllowedWebUrl(params.linkURL))
|
|
81
|
+
this.openTab(site, params.linkURL);
|
|
82
|
+
break;
|
|
83
|
+
case 'open-link-external':
|
|
84
|
+
if (isAllowedWebUrl(params.linkURL))
|
|
85
|
+
await shell.openExternal(params.linkURL);
|
|
86
|
+
break;
|
|
87
|
+
case 'save-link':
|
|
88
|
+
if (isAllowedWebUrl(params.linkURL))
|
|
89
|
+
contents.downloadURL(params.linkURL);
|
|
90
|
+
break;
|
|
91
|
+
case 'save-image':
|
|
92
|
+
if (isAllowedWebUrl(params.srcURL))
|
|
93
|
+
contents.downloadURL(params.srcURL);
|
|
94
|
+
break;
|
|
95
|
+
case 'search-selection':
|
|
96
|
+
if (params.selectionText)
|
|
97
|
+
this.openTab(site, `https://www.google.com/search?q=${encodeURIComponent(params.selectionText)}`);
|
|
98
|
+
break;
|
|
99
|
+
case 'replace-misspelling':
|
|
100
|
+
if (request.value && params.dictionarySuggestions.includes(request.value))
|
|
101
|
+
contents.replaceMisspelling(request.value);
|
|
102
|
+
break;
|
|
103
|
+
case 'inspect':
|
|
104
|
+
if (this.isDev)
|
|
105
|
+
contents.inspectElement(params.x, params.y);
|
|
106
|
+
break;
|
|
107
|
+
default: return false;
|
|
108
|
+
}
|
|
109
|
+
this.requests.delete(request.requestId);
|
|
110
|
+
return true;
|
|
111
|
+
};
|
|
112
|
+
openTab(site, url) { send(site.embedder, 'new-browser-tab', url); }
|
|
113
|
+
}
|
|
114
|
+
function payload(requestId, site, params) {
|
|
115
|
+
return {
|
|
116
|
+
requestId, guestId: site.rootGuestId, x: params.x, y: params.y, pageUrl: params.pageURL,
|
|
117
|
+
linkUrl: params.linkURL, linkText: params.linkText, srcUrl: params.srcURL,
|
|
118
|
+
mediaType: params.mediaType, hasImageContents: params.hasImageContents,
|
|
119
|
+
selectionText: params.selectionText, isEditable: params.isEditable,
|
|
120
|
+
misspelledWord: params.misspelledWord, dictionarySuggestions: params.dictionarySuggestions.slice(0, 5),
|
|
121
|
+
editFlags: {
|
|
122
|
+
canUndo: params.editFlags.canUndo, canRedo: params.editFlags.canRedo,
|
|
123
|
+
canCut: params.editFlags.canCut, canCopy: params.editFlags.canCopy,
|
|
124
|
+
canPaste: params.editFlags.canPaste, canDelete: params.editFlags.canDelete,
|
|
125
|
+
canSelectAll: params.editFlags.canSelectAll,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=context-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-menu.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/shell/context-menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Session } from 'electron';
|
|
2
|
+
import type { ShellSites } from './types.js';
|
|
3
|
+
export declare class BrowserDownloadController {
|
|
4
|
+
private readonly browserSession;
|
|
5
|
+
private readonly sites;
|
|
6
|
+
private readonly downloads;
|
|
7
|
+
constructor(browserSession: Session, sites: ShellSites);
|
|
8
|
+
dispose(): void;
|
|
9
|
+
private readonly started;
|
|
10
|
+
private readonly handleAction;
|
|
11
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import fs from 'node:fs';
|
|
3
|
+
import { app, ipcMain, shell } from 'electron';
|
|
4
|
+
import { BROWSER_IPC, } from '../contracts.js';
|
|
5
|
+
import { nextAvailableDownloadPath } from '../policy.js';
|
|
6
|
+
import { send } from './helpers.js';
|
|
7
|
+
const UPDATE_INTERVAL_MS = 100;
|
|
8
|
+
export class BrowserDownloadController {
|
|
9
|
+
browserSession;
|
|
10
|
+
sites;
|
|
11
|
+
downloads = new Map();
|
|
12
|
+
constructor(browserSession, sites) {
|
|
13
|
+
this.browserSession = browserSession;
|
|
14
|
+
this.sites = sites;
|
|
15
|
+
browserSession.on('will-download', this.started);
|
|
16
|
+
ipcMain.handle(BROWSER_IPC.downloadAction, this.handleAction);
|
|
17
|
+
}
|
|
18
|
+
dispose() {
|
|
19
|
+
this.downloads.clear();
|
|
20
|
+
this.browserSession.off('will-download', this.started);
|
|
21
|
+
ipcMain.removeHandler(BROWSER_IPC.downloadAction);
|
|
22
|
+
}
|
|
23
|
+
started = (_event, item, contents) => {
|
|
24
|
+
const site = this.sites.get(contents.id);
|
|
25
|
+
if (!site)
|
|
26
|
+
return;
|
|
27
|
+
const id = crypto.randomUUID();
|
|
28
|
+
const savePath = nextAvailableDownloadPath(app.getPath('downloads'), item.getFilename(), fs.existsSync);
|
|
29
|
+
item.setSavePath(savePath);
|
|
30
|
+
const payload = {
|
|
31
|
+
id, guestId: site.rootGuestId, filename: item.getFilename(), savePath, url: item.getURL(),
|
|
32
|
+
receivedBytes: 0, totalBytes: item.getTotalBytes(), percent: percentComplete(item),
|
|
33
|
+
state: 'starting', canResume: item.canResume(), startedAt: Date.now(),
|
|
34
|
+
};
|
|
35
|
+
const record = { item, ownerEmbedderId: site.embedder.id, payload, lastSentAt: 0 };
|
|
36
|
+
this.downloads.set(id, record);
|
|
37
|
+
const publish = (force = false) => {
|
|
38
|
+
const now = Date.now();
|
|
39
|
+
if (!force && now - record.lastSentAt < UPDATE_INTERVAL_MS)
|
|
40
|
+
return;
|
|
41
|
+
record.lastSentAt = now;
|
|
42
|
+
record.payload = {
|
|
43
|
+
...record.payload, receivedBytes: item.getReceivedBytes(), totalBytes: item.getTotalBytes(),
|
|
44
|
+
percent: percentComplete(item), canResume: item.canResume(),
|
|
45
|
+
};
|
|
46
|
+
send(site.embedder, BROWSER_IPC.download, record.payload);
|
|
47
|
+
};
|
|
48
|
+
publish(true);
|
|
49
|
+
item.on('updated', (_downloadEvent, state) => { record.payload.state = downloadState(state); publish(); });
|
|
50
|
+
item.once('done', (_downloadEvent, state) => { record.payload.state = downloadState(state); publish(true); });
|
|
51
|
+
};
|
|
52
|
+
handleAction = async (event, request) => {
|
|
53
|
+
const record = request ? this.downloads.get(request.id) : null;
|
|
54
|
+
if (!record || record.ownerEmbedderId !== event.sender.id)
|
|
55
|
+
return false;
|
|
56
|
+
switch (request.action) {
|
|
57
|
+
case 'cancel':
|
|
58
|
+
record.item.cancel();
|
|
59
|
+
break;
|
|
60
|
+
case 'resume':
|
|
61
|
+
if (record.item.canResume())
|
|
62
|
+
record.item.resume();
|
|
63
|
+
break;
|
|
64
|
+
case 'open': {
|
|
65
|
+
if (record.payload.state !== 'completed')
|
|
66
|
+
return false;
|
|
67
|
+
const error = await shell.openPath(record.payload.savePath);
|
|
68
|
+
if (error)
|
|
69
|
+
throw new Error(error);
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case 'show':
|
|
73
|
+
shell.showItemInFolder(record.payload.savePath);
|
|
74
|
+
break;
|
|
75
|
+
case 'remove':
|
|
76
|
+
this.downloads.delete(request.id);
|
|
77
|
+
break;
|
|
78
|
+
default: return false;
|
|
79
|
+
}
|
|
80
|
+
return true;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function downloadState(value) {
|
|
84
|
+
return value === 'completed' || value === 'cancelled' || value === 'interrupted' ? value : 'progressing';
|
|
85
|
+
}
|
|
86
|
+
function percentComplete(item) {
|
|
87
|
+
const total = item.getTotalBytes();
|
|
88
|
+
return total <= 0 ? null : Math.max(0, Math.min(100, Math.round((item.getReceivedBytes() / total) * 100)));
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=downloads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"downloads.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/shell/downloads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Input, Session, WebContents } from 'electron';
|
|
2
|
+
import type { BrowserShortcut } from '../contracts.js';
|
|
3
|
+
export declare function send(embedder: WebContents, channel: string, payload: unknown): void;
|
|
4
|
+
export declare function shortcutForInput(input: Input): BrowserShortcut | null;
|
|
5
|
+
export declare function popupWindowOptions(cosmeticPreloadPath: string | null, browserSession: Session): Electron.BrowserWindowConstructorOptions;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export function send(embedder, channel, payload) {
|
|
2
|
+
if (!embedder.isDestroyed())
|
|
3
|
+
embedder.send(channel, payload);
|
|
4
|
+
}
|
|
5
|
+
export function shortcutForInput(input) {
|
|
6
|
+
if (input.type !== 'keyDown')
|
|
7
|
+
return null;
|
|
8
|
+
const command = process.platform === 'darwin' ? input.meta : input.control;
|
|
9
|
+
if (!command || input.alt)
|
|
10
|
+
return null;
|
|
11
|
+
const key = input.key.toLowerCase();
|
|
12
|
+
if (key === 'l')
|
|
13
|
+
return 'focus-location';
|
|
14
|
+
if (key === 't' && !input.shift)
|
|
15
|
+
return 'new-tab';
|
|
16
|
+
if (key === 'w' && !input.shift)
|
|
17
|
+
return 'close-tab';
|
|
18
|
+
if (key === 'f')
|
|
19
|
+
return 'find';
|
|
20
|
+
if (key === 'r')
|
|
21
|
+
return 'reload';
|
|
22
|
+
if (key === '0')
|
|
23
|
+
return 'zoom-reset';
|
|
24
|
+
if (key === '-' || key === '_')
|
|
25
|
+
return 'zoom-out';
|
|
26
|
+
if (key === '=' || key === '+')
|
|
27
|
+
return 'zoom-in';
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
export function popupWindowOptions(cosmeticPreloadPath, browserSession) {
|
|
31
|
+
return {
|
|
32
|
+
width: 520,
|
|
33
|
+
height: 680,
|
|
34
|
+
minWidth: 360,
|
|
35
|
+
minHeight: 420,
|
|
36
|
+
backgroundColor: '#ffffff',
|
|
37
|
+
autoHideMenuBar: true,
|
|
38
|
+
...(process.platform === 'darwin' ? {
|
|
39
|
+
titleBarStyle: 'hiddenInset',
|
|
40
|
+
trafficLightPosition: { x: 14, y: 14 },
|
|
41
|
+
} : {}),
|
|
42
|
+
webPreferences: {
|
|
43
|
+
session: browserSession,
|
|
44
|
+
nodeIntegration: false,
|
|
45
|
+
contextIsolation: true,
|
|
46
|
+
sandbox: true,
|
|
47
|
+
webSecurity: true,
|
|
48
|
+
webviewTag: false,
|
|
49
|
+
...(cosmeticPreloadPath ? { preload: cosmeticPreloadPath } : {}),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/shell/helpers.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,IAAI,CAAC,QAAqB,EAAE,OAAe,EAAE,OAAgB;IAC3E,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAY;IAC3C,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAC3E,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,gBAAgB,CAAC;IACzC,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,WAAW,CAAC;IACpD,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,YAAY,CAAC;IACrC,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC;IAClD,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,mBAAkC,EAClC,cAAuB;IAEvB,OAAO;QACL,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,GAAG;QACb,SAAS,EAAE,GAAG;QACd,eAAe,EAAE,SAAS;QAC1B,eAAe,EAAE,IAAI;QACrB,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC;YAClC,aAAa,EAAE,aAAsB;YACrC,oBAAoB,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE;SACvC,CAAC,CAAC,CAAC,EAAE,CAAC;QACP,cAAc,EAAE;YACd,OAAO,EAAE,cAAc;YACvB,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,IAAI;YACtB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,KAAK;YACjB,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjE;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Session } from 'electron';
|
|
2
|
+
import type { ShellSites } from './types.js';
|
|
3
|
+
export declare class BrowserPermissionController {
|
|
4
|
+
private readonly browserSession;
|
|
5
|
+
private readonly sites;
|
|
6
|
+
private readonly isTrustedAppUrl;
|
|
7
|
+
private readonly pending;
|
|
8
|
+
private readonly decisions;
|
|
9
|
+
constructor(browserSession: Session, sites: ShellSites, isTrustedAppUrl: (url: string) => boolean);
|
|
10
|
+
dispose(): void;
|
|
11
|
+
private readonly check;
|
|
12
|
+
private readonly request;
|
|
13
|
+
private readonly respond;
|
|
14
|
+
private finish;
|
|
15
|
+
private findSite;
|
|
16
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { ipcMain } from 'electron';
|
|
3
|
+
import { BROWSER_IPC } from '../contracts.js';
|
|
4
|
+
import { permissionOrigin } from '../policy.js';
|
|
5
|
+
import { send } from './helpers.js';
|
|
6
|
+
const PERMISSION_TIMEOUT_MS = 30_000;
|
|
7
|
+
export class BrowserPermissionController {
|
|
8
|
+
browserSession;
|
|
9
|
+
sites;
|
|
10
|
+
isTrustedAppUrl;
|
|
11
|
+
pending = new Map();
|
|
12
|
+
decisions = new Map();
|
|
13
|
+
constructor(browserSession, sites, isTrustedAppUrl) {
|
|
14
|
+
this.browserSession = browserSession;
|
|
15
|
+
this.sites = sites;
|
|
16
|
+
this.isTrustedAppUrl = isTrustedAppUrl;
|
|
17
|
+
browserSession.setPermissionCheckHandler(this.check);
|
|
18
|
+
browserSession.setPermissionRequestHandler(this.request);
|
|
19
|
+
ipcMain.on(BROWSER_IPC.permissionResponse, this.respond);
|
|
20
|
+
}
|
|
21
|
+
dispose() {
|
|
22
|
+
for (const request of this.pending.values()) {
|
|
23
|
+
clearTimeout(request.timer);
|
|
24
|
+
request.callbacks.forEach((callback) => callback(false));
|
|
25
|
+
}
|
|
26
|
+
this.pending.clear();
|
|
27
|
+
this.browserSession.setPermissionCheckHandler(null);
|
|
28
|
+
this.browserSession.setPermissionRequestHandler(null);
|
|
29
|
+
ipcMain.off(BROWSER_IPC.permissionResponse, this.respond);
|
|
30
|
+
}
|
|
31
|
+
check = (contents, permission, requestingOrigin, details) => {
|
|
32
|
+
const requestingUrl = details.requestingUrl || requestingOrigin;
|
|
33
|
+
const site = this.findSite(contents, requestingUrl);
|
|
34
|
+
const origin = permissionOrigin(requestingUrl, site?.contents.getURL() || '');
|
|
35
|
+
if (site && origin)
|
|
36
|
+
return this.decisions.get(permissionKey(origin, permission)) === true;
|
|
37
|
+
return Boolean(origin && this.isTrustedAppUrl(origin)
|
|
38
|
+
&& (!contents || this.isTrustedAppUrl(contents.getURL())));
|
|
39
|
+
};
|
|
40
|
+
request = (contents, permission, callback, details) => {
|
|
41
|
+
const requestingUrl = details.requestingUrl || contents.getURL();
|
|
42
|
+
const site = this.findSite(contents, requestingUrl);
|
|
43
|
+
const origin = permissionOrigin(requestingUrl, site?.contents.getURL() || '');
|
|
44
|
+
if (!site && origin && this.isTrustedAppUrl(origin) && this.isTrustedAppUrl(contents.getURL())) {
|
|
45
|
+
callback(true);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (!site || !origin) {
|
|
49
|
+
callback(false);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const key = permissionKey(origin, permission);
|
|
53
|
+
const existing = this.decisions.get(key);
|
|
54
|
+
if (existing !== undefined) {
|
|
55
|
+
callback(existing);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const inFlight = [...this.pending.values()].find((value) => value.embedderId === site.embedder.id && value.decisionKey === key);
|
|
59
|
+
if (inFlight) {
|
|
60
|
+
inFlight.callbacks.push(callback);
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const requestId = crypto.randomUUID();
|
|
64
|
+
const timer = setTimeout(() => this.finish(requestId, false, false), PERMISSION_TIMEOUT_MS);
|
|
65
|
+
this.pending.set(requestId, {
|
|
66
|
+
embedderId: site.embedder.id, decisionKey: key, callbacks: [callback], timer,
|
|
67
|
+
});
|
|
68
|
+
send(site.embedder, BROWSER_IPC.permissionRequest, {
|
|
69
|
+
requestId, guestId: site.rootGuestId, origin, permission, mediaTypes: mediaTypes(details),
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
respond = (event, response) => {
|
|
73
|
+
const request = response ? this.pending.get(response.requestId) : null;
|
|
74
|
+
if (!request || request.embedderId !== event.sender.id)
|
|
75
|
+
return;
|
|
76
|
+
this.finish(response.requestId, response.allow === true, true);
|
|
77
|
+
};
|
|
78
|
+
finish(requestId, allowed, remember) {
|
|
79
|
+
const request = this.pending.get(requestId);
|
|
80
|
+
if (!request)
|
|
81
|
+
return;
|
|
82
|
+
this.pending.delete(requestId);
|
|
83
|
+
clearTimeout(request.timer);
|
|
84
|
+
if (remember)
|
|
85
|
+
this.decisions.set(request.decisionKey, allowed);
|
|
86
|
+
request.callbacks.forEach((callback) => callback(allowed));
|
|
87
|
+
}
|
|
88
|
+
findSite(contents, requestingUrl) {
|
|
89
|
+
if (!contents)
|
|
90
|
+
return null;
|
|
91
|
+
const direct = this.sites.get(contents.id);
|
|
92
|
+
if (direct)
|
|
93
|
+
return direct;
|
|
94
|
+
const origin = permissionOrigin(requestingUrl, '');
|
|
95
|
+
if (!origin)
|
|
96
|
+
return null;
|
|
97
|
+
return [...this.sites.values()].find((site) => site.embedder.id === contents.id
|
|
98
|
+
&& permissionOrigin(site.contents.getURL(), '') === origin) ?? null;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function mediaTypes(details) {
|
|
102
|
+
if (!('mediaTypes' in details) || !Array.isArray(details.mediaTypes))
|
|
103
|
+
return [];
|
|
104
|
+
return details.mediaTypes.map(String);
|
|
105
|
+
}
|
|
106
|
+
function permissionKey(origin, permission) { return `${origin}\n${permission}`; }
|
|
107
|
+
//# sourceMappingURL=permissions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../../../../../src/drivers/electron/native/shell/permissions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Session, type WebContents } from 'electron';
|
|
2
|
+
import type { NativeAdBlocker } from '../adblock/index.js';
|
|
3
|
+
import type { BrowserContextMenuController } from './context-menu.js';
|
|
4
|
+
import type { ShellSite, ShellSites } from './types.js';
|
|
5
|
+
export interface BrowserSiteManagerOptions {
|
|
6
|
+
browserSession: Session;
|
|
7
|
+
adBlocker: NativeAdBlocker;
|
|
8
|
+
contextMenus: BrowserContextMenuController;
|
|
9
|
+
}
|
|
10
|
+
export declare class BrowserSiteManager implements ShellSites {
|
|
11
|
+
private readonly options;
|
|
12
|
+
private readonly sites;
|
|
13
|
+
private readonly automationEmbedders;
|
|
14
|
+
constructor(options: BrowserSiteManagerOptions);
|
|
15
|
+
get(webContentsId: number): ShellSite | undefined;
|
|
16
|
+
values(): IterableIterator<ShellSite>;
|
|
17
|
+
forRootGuest(guestId: number): ShellSite | null;
|
|
18
|
+
configure(site: ShellSite): void;
|
|
19
|
+
updateAutomation(site: ShellSite, isAutomation: boolean): void;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
private configurePopups;
|
|
22
|
+
private remove;
|
|
23
|
+
}
|
|
24
|
+
export declare function shellSite(contents: WebContents, embedder: WebContents, tabId: string | null, isAutomation: boolean): ShellSite;
|