dsh-browser-plus 0.0.0-stage → 0.5.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.
Files changed (76) hide show
  1. package/CHANGELOG.md +166 -0
  2. package/LICENSE +22 -0
  3. package/NOTICE.md +7 -0
  4. package/README.en.md +100 -0
  5. package/README.md +99 -2
  6. package/assets/dsh-browser-plus-256.png +0 -0
  7. package/assets/dsh-browser-plus-512.png +0 -0
  8. package/assets/dsh-browser-plus-small.svg +9 -0
  9. package/assets/dsh-browser-plus.ico +0 -0
  10. package/assets/dsh-browser-plus.svg +11 -0
  11. package/assets/readme-workspace.png +0 -0
  12. package/cordis.patch.yml +17 -0
  13. package/docs/MIGRATION.md +48 -0
  14. package/docs/README.md +22 -0
  15. package/docs/SOAK-CHECKLIST.md +98 -0
  16. package/docs/architecture.md +88 -0
  17. package/docs/tool-reference.md +124 -0
  18. package/docs/user-guide.md +121 -0
  19. package/docs/why-browser.md +45 -0
  20. package/lib/browser/runtime.d.ts +225 -0
  21. package/lib/browser/runtime.js +302 -0
  22. package/lib/browser/types.d.ts +668 -0
  23. package/lib/browser/types.js +18 -0
  24. package/lib/browser-electron/auth-cookies.d.ts +54 -0
  25. package/lib/browser-electron/auth-cookies.js +83 -0
  26. package/lib/browser-electron/chrome-state.d.ts +187 -0
  27. package/lib/browser-electron/chrome-state.js +12 -0
  28. package/lib/browser-electron/entry.d.ts +66 -0
  29. package/lib/browser-electron/entry.js +62 -0
  30. package/lib/browser-electron/fingerprint.d.ts +29 -0
  31. package/lib/browser-electron/fingerprint.js +42 -0
  32. package/lib/browser-electron/host-main.d.ts +18 -0
  33. package/lib/browser-electron/host-main.js +2494 -0
  34. package/lib/browser-electron/icon.d.ts +11 -0
  35. package/lib/browser-electron/icon.js +23 -0
  36. package/lib/browser-electron/page-chrome.d.ts +21 -0
  37. package/lib/browser-electron/page-chrome.js +2034 -0
  38. package/lib/browser-electron/provider.d.ts +709 -0
  39. package/lib/browser-electron/provider.js +2575 -0
  40. package/lib/browser-electron/remote-host.d.ts +143 -0
  41. package/lib/browser-electron/remote-host.js +952 -0
  42. package/lib/browser-electron/task-summary.d.ts +2 -0
  43. package/lib/browser-electron/task-summary.js +12 -0
  44. package/lib/browser-electron/task-thumbnail.d.ts +11 -0
  45. package/lib/browser-electron/task-thumbnail.js +9 -0
  46. package/lib/browser-electron/write-guard.d.ts +41 -0
  47. package/lib/browser-electron/write-guard.js +123 -0
  48. package/lib/index.d.ts +16 -0
  49. package/lib/index.js +14 -0
  50. package/lib/tool-browser/index.d.ts +31 -0
  51. package/lib/tool-browser/index.js +1931 -0
  52. package/package.json +95 -4
  53. package/screenshots.json +3 -0
  54. package/scripts/build-icons.mjs +80 -0
  55. package/scripts/capture-window.ps1 +79 -0
  56. package/scripts/crop-image.ps1 +20 -0
  57. package/scripts/smoke-browser-tools.mjs +1968 -0
  58. package/scripts/smoke-chrome-world.mjs +63 -0
  59. package/scripts/smoke-electron-host.mjs +50 -0
  60. package/src/browser/runtime.ts +470 -0
  61. package/src/browser/types.ts +649 -0
  62. package/src/browser-electron/auth-cookies.ts +125 -0
  63. package/src/browser-electron/chrome-state.ts +174 -0
  64. package/src/browser-electron/entry.ts +115 -0
  65. package/src/browser-electron/fingerprint.ts +45 -0
  66. package/src/browser-electron/host-main.ts +2330 -0
  67. package/src/browser-electron/icon.ts +26 -0
  68. package/src/browser-electron/page-chrome.ts +2046 -0
  69. package/src/browser-electron/provider.ts +3088 -0
  70. package/src/browser-electron/remote-host.ts +1004 -0
  71. package/src/browser-electron/task-summary.ts +10 -0
  72. package/src/browser-electron/task-thumbnail.ts +17 -0
  73. package/src/browser-electron/write-guard.ts +134 -0
  74. package/src/index.ts +52 -0
  75. package/src/tool-browser/index.ts +1974 -0
  76. package/src/types/electron-shim.d.ts +143 -0
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Ambient declaration for the `electron` module used by the self-hosted
3
+ * browser host (`host-main.ts`). The electron package is an optional peer
4
+ * dependency (present in desktop-shell environments), so it is not in
5
+ * devDependencies; this shim keeps typechecking self-contained.
6
+ * @module dsh-browser-plus/types/electron-shim
7
+ */
8
+
9
+ declare module 'electron' {
10
+ export interface WebContentsDebugger {
11
+ attach(version: string): void
12
+ detach(): void
13
+ sendCommand(method: string, params?: Record<string, unknown>): Promise<unknown>
14
+ on(event: 'message', listener: (event: unknown, method: string, params: Record<string, unknown>) => void): void
15
+ }
16
+ export interface DownloadItem {
17
+ setSavePath(path: string): void
18
+ }
19
+ export interface Cookie {
20
+ domain: string
21
+ path: string
22
+ secure: boolean
23
+ httpOnly: boolean
24
+ name: string
25
+ value: string
26
+ expirationDate?: number
27
+ }
28
+ export interface CookieSetter {
29
+ url: string
30
+ name: string
31
+ value: string
32
+ domain?: string
33
+ path?: string
34
+ secure?: boolean
35
+ httpOnly?: boolean
36
+ expirationDate?: number
37
+ }
38
+ export interface WebRequestHeadersDetails {
39
+ requestHeaders: Record<string, string>
40
+ }
41
+ export interface Session {
42
+ once(event: 'will-download', listener: (event: Event, item: DownloadItem) => void): void
43
+ setUserAgent(userAgent: string, acceptLanguages?: string): void
44
+ fetch(url: string, options?: { signal?: AbortSignal }): Promise<{
45
+ readonly ok: boolean
46
+ readonly headers: { get(name: string): string | null }
47
+ arrayBuffer(): Promise<ArrayBuffer>
48
+ }>
49
+ readonly webRequest: {
50
+ onBeforeSendHeaders(listener: (details: WebRequestHeadersDetails, callback: (response: { requestHeaders: Record<string, string> }) => void) => void): void
51
+ }
52
+ readonly cookies: {
53
+ get(filter: Record<string, unknown>): Promise<Cookie[]>
54
+ set(details: CookieSetter): Promise<void>
55
+ remove(url: string, name: string): Promise<void>
56
+ }
57
+ }
58
+ export const session: {
59
+ readonly defaultSession: Session
60
+ fromPartition(partition: string, options?: Record<string, unknown>): Session
61
+ }
62
+ export interface NativeImage {
63
+ resize(options: { width: number }): NativeImage
64
+ toJPEG(quality: number): Buffer
65
+ toPNG(): Buffer
66
+ getSize(): { width: number; height: number }
67
+ }
68
+ export interface WebContents {
69
+ readonly id: number
70
+ readonly navigationHistory: {
71
+ back(): void
72
+ canGoBack(): boolean
73
+ canGoForward(): boolean
74
+ forward(): void
75
+ }
76
+ isDestroyed(): boolean
77
+ getTitle(): string
78
+ getZoomFactor(): number
79
+ setZoomFactor(factor: number): void
80
+ reload(): void
81
+ stop(): void
82
+ readonly debugger: WebContentsDebugger
83
+ readonly session: Session
84
+ close(): void
85
+ downloadURL(url: string): void
86
+ capturePage(): Promise<NativeImage>
87
+ executeJavaScript(code: string, userGesture?: boolean): Promise<unknown>
88
+ loadURL(url: string): Promise<void>
89
+ getURL(): string
90
+ setWindowOpenHandler(handler: (details: { url: string }) => { action: 'deny' | 'allow' }): void
91
+ on(event: 'did-navigate' | 'did-navigate-in-page', listener: (event: unknown, url?: string) => void): this
92
+ on(event: 'did-finish-load' | 'did-start-loading' | 'did-stop-loading' | 'page-title-updated', listener: () => void): this
93
+ on(event: 'page-favicon-updated', listener: (event: unknown, favicons: string[]) => void): this
94
+ }
95
+ export interface WebContentsView {
96
+ readonly webContents: WebContents
97
+ setBounds(bounds: { x: number; y: number; width: number; height: number }): void
98
+ setVisible(visible: boolean): void
99
+ setBackgroundColor(color: string): void
100
+ getVisible(): boolean
101
+ getBounds(): { x: number; y: number; width: number; height: number }
102
+ }
103
+ export interface BrowserWindow {
104
+ readonly contentView: {
105
+ addChildView(view: WebContentsView): void
106
+ removeChildView(view: WebContentsView): void
107
+ readonly children: WebContentsView[]
108
+ }
109
+ getBounds(): { x: number; y: number; width: number; height: number }
110
+ getContentSize(): [number, number]
111
+ setMenu(menu: unknown | null): void
112
+ isVisible(): boolean
113
+ isMinimized(): boolean
114
+ isFocused(): boolean
115
+ show(): void
116
+ restore(): void
117
+ focus(): void
118
+ setTitle(title: string): void
119
+ isDestroyed(): boolean
120
+ on(event: 'closed', listener: () => void): this
121
+ on(event: 'resize' | 'restore' | 'show' | 'maximize' | 'unmaximize', listener: () => void): this
122
+ off(event: 'closed', listener: () => void): this
123
+ off(event: 'resize', listener: () => void): this
124
+ }
125
+ export const app: {
126
+ whenReady(): Promise<void>
127
+ exit(code?: number): void
128
+ /** Electron derives each view UA from this; assigning it is how the host masks. */
129
+ userAgentFallback: string
130
+ getLocale(): string
131
+ getPath(name: string): string
132
+ setPath(name: string, path: string): void
133
+ dock?: { setIcon(path: string): void }
134
+ }
135
+ export interface BrowserWindowConstructor {
136
+ new(options?: Record<string, unknown>): BrowserWindow
137
+ }
138
+ export interface WebContentsViewConstructor {
139
+ new(options?: Record<string, unknown>): WebContentsView
140
+ }
141
+ export const BrowserWindow: BrowserWindowConstructor
142
+ export const WebContentsView: WebContentsViewConstructor
143
+ }