puppeteer-bidi 0.0.1.beta1 → 0.0.1.beta2

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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/CLAUDE.md +44 -0
  3. data/README.md +8 -1
  4. data/Steepfile +36 -0
  5. data/lib/puppeteer/bidi/async_utils.rb +1 -0
  6. data/lib/puppeteer/bidi/browser.rb +43 -24
  7. data/lib/puppeteer/bidi/browser_context.rb +13 -4
  8. data/lib/puppeteer/bidi/browser_launcher.rb +1 -0
  9. data/lib/puppeteer/bidi/connection.rb +26 -9
  10. data/lib/puppeteer/bidi/core/browser.rb +15 -14
  11. data/lib/puppeteer/bidi/core/browsing_context.rb +64 -46
  12. data/lib/puppeteer/bidi/core/disposable.rb +10 -3
  13. data/lib/puppeteer/bidi/core/errors.rb +18 -1
  14. data/lib/puppeteer/bidi/core/event_emitter.rb +18 -9
  15. data/lib/puppeteer/bidi/core/navigation.rb +4 -3
  16. data/lib/puppeteer/bidi/core/realm.rb +29 -26
  17. data/lib/puppeteer/bidi/core/request.rb +33 -29
  18. data/lib/puppeteer/bidi/core/session.rb +14 -11
  19. data/lib/puppeteer/bidi/core/user_context.rb +17 -16
  20. data/lib/puppeteer/bidi/core/user_prompt.rb +8 -7
  21. data/lib/puppeteer/bidi/core.rb +1 -0
  22. data/lib/puppeteer/bidi/deserializer.rb +1 -0
  23. data/lib/puppeteer/bidi/element_handle.rb +52 -52
  24. data/lib/puppeteer/bidi/errors.rb +1 -0
  25. data/lib/puppeteer/bidi/file_chooser.rb +1 -0
  26. data/lib/puppeteer/bidi/frame.rb +70 -70
  27. data/lib/puppeteer/bidi/http_response.rb +1 -0
  28. data/lib/puppeteer/bidi/injected_source.rb +1 -0
  29. data/lib/puppeteer/bidi/js_handle.rb +23 -23
  30. data/lib/puppeteer/bidi/keyboard.rb +24 -13
  31. data/lib/puppeteer/bidi/lazy_arg.rb +1 -0
  32. data/lib/puppeteer/bidi/mouse.rb +31 -18
  33. data/lib/puppeteer/bidi/page.rb +87 -87
  34. data/lib/puppeteer/bidi/query_handler.rb +3 -0
  35. data/lib/puppeteer/bidi/realm.rb +70 -6
  36. data/lib/puppeteer/bidi/serializer.rb +1 -0
  37. data/lib/puppeteer/bidi/target.rb +27 -0
  38. data/lib/puppeteer/bidi/timeout_settings.rb +1 -0
  39. data/lib/puppeteer/bidi/transport.rb +1 -0
  40. data/lib/puppeteer/bidi/version.rb +1 -1
  41. data/lib/puppeteer/bidi/wait_task.rb +1 -0
  42. data/lib/puppeteer/bidi.rb +13 -4
  43. data/sig/_external.rbs +134 -0
  44. data/sig/_supplementary.rbs +20 -0
  45. data/sig/puppeteer/bidi/async_utils.rbs +68 -0
  46. data/sig/puppeteer/bidi/browser.rbs +34 -27
  47. data/sig/puppeteer/bidi/browser_context.rbs +39 -0
  48. data/sig/puppeteer/bidi/browser_launcher.rbs +45 -0
  49. data/sig/puppeteer/bidi/connection.rbs +67 -0
  50. data/sig/puppeteer/bidi/core/browser.rbs +79 -0
  51. data/sig/puppeteer/bidi/core/browsing_context.rbs +210 -0
  52. data/sig/puppeteer/bidi/core/disposable.rbs +42 -0
  53. data/sig/puppeteer/bidi/core/errors.rbs +65 -0
  54. data/sig/puppeteer/bidi/core/event_emitter.rbs +50 -0
  55. data/sig/puppeteer/bidi/core/navigation.rbs +37 -0
  56. data/sig/puppeteer/bidi/core/realm.rbs +132 -0
  57. data/sig/puppeteer/bidi/core/request.rbs +120 -0
  58. data/sig/puppeteer/bidi/core/session.rbs +65 -0
  59. data/sig/puppeteer/bidi/core/user_context.rbs +72 -0
  60. data/sig/puppeteer/bidi/core/user_prompt.rbs +52 -0
  61. data/sig/puppeteer/bidi/core.rbs +9 -0
  62. data/sig/puppeteer/bidi/deserializer.rbs +28 -0
  63. data/sig/puppeteer/bidi/element_handle.rbs +52 -52
  64. data/sig/puppeteer/bidi/errors.rbs +34 -0
  65. data/sig/puppeteer/bidi/file_chooser.rbs +27 -0
  66. data/sig/puppeteer/bidi/frame.rbs +70 -70
  67. data/sig/puppeteer/bidi/http_response.rbs +18 -0
  68. data/sig/puppeteer/bidi/injected_source.rbs +21 -0
  69. data/sig/puppeteer/bidi/js_handle.rbs +23 -23
  70. data/sig/puppeteer/bidi/keyboard.rbs +57 -0
  71. data/sig/puppeteer/bidi/lazy_arg.rbs +15 -0
  72. data/sig/puppeteer/bidi/mouse.rbs +73 -0
  73. data/sig/puppeteer/bidi/page.rbs +87 -87
  74. data/sig/puppeteer/bidi/query_handler.rbs +113 -0
  75. data/sig/puppeteer/bidi/realm.rbs +141 -0
  76. data/sig/puppeteer/bidi/serializer.rbs +31 -0
  77. data/sig/puppeteer/bidi/target.rbs +68 -0
  78. data/sig/puppeteer/bidi/timeout_settings.rbs +14 -0
  79. data/sig/puppeteer/bidi/transport.rbs +43 -0
  80. data/sig/puppeteer/bidi/wait_task.rbs +62 -0
  81. data/sig/puppeteer/bidi.rbs +7 -5
  82. metadata +35 -1
@@ -1,78 +1,105 @@
1
+ # frozen_string_literal: true
2
+ # rbs_inline: enabled
3
+
1
4
  module Puppeteer
2
5
  module Bidi
6
+ # @rbs!
7
+ # type Target = BrowserTarget | PageTarget | FrameTarget
8
+
3
9
  class BrowserTarget
10
+ # @rbs browser: Browser
11
+ # @rbs return: void
4
12
  def initialize(browser)
5
13
  @browser = browser
6
14
  end
7
15
 
16
+ # @rbs return: nil
8
17
  def page
9
18
  nil
10
19
  end
11
20
 
21
+ # @rbs return: String
12
22
  def url
13
23
  ''
14
24
  end
15
25
 
26
+ # @rbs return: String
16
27
  def type
17
28
  'browser'
18
29
  end
19
30
 
31
+ # @rbs return: Browser
20
32
  def browser
21
33
  @browser
22
34
  end
23
35
 
36
+ # @rbs return: BrowserContext
24
37
  def browser_context
25
38
  @browser.default_browser_context
26
39
  end
27
40
  end
28
41
 
29
42
  class PageTarget
43
+ # @rbs page: Page
44
+ # @rbs return: void
30
45
  def initialize(page)
31
46
  @page = page
32
47
  end
33
48
 
49
+ # @rbs return: Page
34
50
  def page
35
51
  @page
36
52
  end
37
53
 
54
+ # @rbs return: String
38
55
  def url
39
56
  @page.url
40
57
  end
41
58
 
59
+ # @rbs return: String
42
60
  def type
43
61
  'page'
44
62
  end
45
63
 
64
+ # @rbs return: Browser
46
65
  def browser
47
66
  @page.browser_context.browser
48
67
  end
49
68
 
69
+ # @rbs return: BrowserContext
50
70
  def browser_context
51
71
  @page.browser_context
52
72
  end
53
73
  end
54
74
 
55
75
  class FrameTarget
76
+ # @rbs frame: Frame
77
+ # @rbs return: void
56
78
  def initialize(frame)
57
79
  @frame = frame
58
80
  end
59
81
 
82
+ # @rbs return: Page
60
83
  def page
61
84
  @frame.page
62
85
  end
63
86
 
87
+ # @rbs return: String
64
88
  def url
65
89
  @frame.url
66
90
  end
67
91
 
92
+ # @rbs return: String
68
93
  def type
69
94
  'frame'
70
95
  end
71
96
 
97
+ # @rbs return: Browser
72
98
  def browser
73
99
  @frame.browser_context.browser
74
100
  end
75
101
 
102
+ # @rbs return: BrowserContext
76
103
  def browser_context
77
104
  @frame.browser_context
78
105
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rbs_inline: enabled
2
3
 
3
4
  module Puppeteer
4
5
  module Bidi
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rbs_inline: enabled
2
3
 
3
4
  require 'async'
4
5
  require 'async/websocket/client'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Puppeteer
4
4
  module Bidi
5
- VERSION = "0.0.1.beta1"
5
+ VERSION = "0.0.1.beta2"
6
6
  end
7
7
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rbs_inline: enabled
2
3
 
3
4
  module Puppeteer
4
5
  module Bidi
@@ -32,16 +32,25 @@ require "puppeteer/bidi/browser"
32
32
 
33
33
  module Puppeteer
34
34
  module Bidi
35
+ # @rbs!
36
+ # type launch_options = {
37
+ # ?executable_path: String,
38
+ # ?user_data_dir: String,
39
+ # ?headless: bool,
40
+ # ?args: Array[String],
41
+ # ?timeout: Numeric
42
+ # }
43
+
35
44
  # Launch a new browser instance
36
- # @rbs **options: untyped
37
- # @rbs return: Browser
45
+ # @rbs **options: launch_options -- Launch options
46
+ # @rbs return: Browser -- Browser instance
38
47
  def self.launch(**options)
39
48
  Browser.launch(**options)
40
49
  end
41
50
 
42
51
  # Connect to an existing browser instance
43
- # @rbs ws_endpoint: String
44
- # @rbs return: Browser
52
+ # @rbs ws_endpoint: String -- WebSocket endpoint URL
53
+ # @rbs return: Browser -- Browser instance
45
54
  def self.connect(ws_endpoint)
46
55
  Browser.connect(ws_endpoint)
47
56
  end
data/sig/_external.rbs ADDED
@@ -0,0 +1,134 @@
1
+ # External dependencies stub definitions
2
+ # These types are from external gems and standard library extensions
3
+
4
+ # Async gem adds these methods to Kernel
5
+ module Kernel
6
+ def Async: [T] () { (Async::Task[T]) -> T } -> Async::Task[T]
7
+ def Sync: [T] () { () -> T } -> T
8
+ end
9
+
10
+ module Async
11
+ def self.call: [T] () { () -> T } -> Task[T]
12
+
13
+ class Task[T]
14
+ def wait: () -> T
15
+ def sleep: (Numeric) -> void
16
+ def stop: () -> void
17
+ def with_timeout: [U] (Numeric) { () -> U } -> U
18
+ end
19
+
20
+ class Promise[T]
21
+ def initialize: () -> void
22
+ def wait: () -> T
23
+ def resolve: (T) -> void
24
+ def reject: (Exception) -> void
25
+ def resolved?: () -> bool
26
+ end
27
+
28
+ class TimeoutError < StandardError
29
+ end
30
+
31
+ class Stop < Exception
32
+ end
33
+
34
+ class Barrier
35
+ def initialize: () -> void
36
+ def async: () { () -> untyped } -> void
37
+ def wait: () -> void
38
+ def stop: () -> void
39
+ end
40
+
41
+ module HTTP
42
+ class Client
43
+ end
44
+
45
+ class Endpoint
46
+ def self.parse: (String) -> Endpoint
47
+ end
48
+
49
+ module Protocol
50
+ module HTTP1
51
+ class Client
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ class WebSocket
58
+ class Client
59
+ end
60
+
61
+ class Connection
62
+ def write: (untyped) -> void
63
+ def read: () -> untyped
64
+ def close: () -> void
65
+ end
66
+ end
67
+ end
68
+
69
+ class Thread
70
+ class Mutex
71
+ def synchronize: [T] () { () -> T } -> T
72
+ end
73
+ end
74
+
75
+ module Protocol
76
+ module WebSocket
77
+ class TextMessage
78
+ attr_reader buffer: String
79
+ end
80
+
81
+ class BinaryMessage
82
+ end
83
+
84
+ class CloseFrame
85
+ end
86
+
87
+ class PingFrame
88
+ end
89
+
90
+ class PongFrame
91
+ end
92
+ end
93
+ end
94
+
95
+ # Open3 extensions
96
+ module Open3
97
+ def self.popen3: (*String) -> [IO, IO, IO, Thread]
98
+ end
99
+
100
+ # Singleton module
101
+ module Singleton
102
+ def self.included: (Class) -> void
103
+
104
+ module SingletonClassMethods
105
+ def instance: () -> instance
106
+ end
107
+ end
108
+
109
+ # Dir extensions (tmpdir library)
110
+ class Dir
111
+ def self.mktmpdir: (String) -> String
112
+ | (String) { (String) -> untyped } -> untyped
113
+ end
114
+
115
+ # Time extensions (time library)
116
+ class Time
117
+ def self.parse: (String) -> Time
118
+ end
119
+
120
+ # Date/DateTime extensions
121
+ class Date
122
+ def to_time: () -> Time
123
+ end
124
+
125
+ class DateTime
126
+ def to_time: () -> Time
127
+ end
128
+
129
+ # Puppeteer::Bidi types that rbs-inline doesn't generate correctly
130
+ module Puppeteer
131
+ module Bidi
132
+ type target = BrowserTarget | PageTarget | FrameTarget
133
+ end
134
+ end
@@ -0,0 +1,20 @@
1
+ # Supplementary type declarations for types that rbs-inline cannot generate
2
+ # This file is NOT auto-generated and should be manually maintained
3
+
4
+ # AsyncUtils uses `extend self` to make instance methods callable as singleton methods
5
+ module Puppeteer
6
+ module Bidi
7
+ module AsyncUtils
8
+ extend AsyncUtils
9
+ end
10
+ end
11
+ end
12
+
13
+ # QueryHandler uses Singleton pattern
14
+ module Puppeteer
15
+ module Bidi
16
+ class QueryHandler
17
+ extend Singleton::SingletonClassMethods
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,68 @@
1
+ # Generated from lib/puppeteer/bidi/async_utils.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # Utility methods for working with Async tasks
6
+ # Provides Promise.all and Promise.race equivalents using Async::Barrier
7
+ module AsyncUtils
8
+ def await: (untyped task) -> untyped
9
+
10
+ # Execute a task with a timeout using Async::Task#with_timeout
11
+ # @param timeout_ms [Numeric] Timeout duration in milliseconds
12
+ # @param task [Proc, Async::Promise, nil] Task to execute; falls back to block
13
+ # @yield [async_task] Execute a task within the timeout, optionally receiving Async::Task
14
+ # @return [Async::Task] Async task that resolves/rejects once the operation completes
15
+ def async_timeout: (untyped timeout_ms, ?untyped task) ?{ (?) -> untyped } -> untyped
16
+
17
+ def promise_all: (*untyped tasks) -> untyped
18
+
19
+ # Wait for all async tasks to complete and return results
20
+ # Similar to Promise.all in JavaScript
21
+ # @param tasks [Array<Proc, Async::Promise>] Array of procs or promises
22
+ # @return [Array] Array of results in the same order as the input tasks
23
+ # @raise If any task raises an exception, it will be propagated
24
+ # @example With procs
25
+ # results = AsyncUtils.await_promise_all(
26
+ # -> { sleep 0.1; "first" },
27
+ # -> { sleep 0.2; "second" },
28
+ # -> { sleep 0.05; "third" }
29
+ # )
30
+ # # => ["first", "second", "third"]
31
+ # @example With promises
32
+ # promise1 = Async::Promise.new
33
+ # promise2 = Async::Promise.new
34
+ # Thread.new { sleep 0.1; promise1.resolve("first") }
35
+ # Thread.new { sleep 0.2; promise2.resolve("second") }
36
+ # results = AsyncUtils.await_promise_all(promise1, promise2)
37
+ # # => ["first", "second"]
38
+ def await_promise_all: (*untyped tasks) -> untyped
39
+
40
+ def promise_race: (*untyped tasks) -> untyped
41
+
42
+ # Race multiple async tasks and return the result of the first one to complete
43
+ # Similar to Promise.race in JavaScript
44
+ # @param tasks [Array<Proc, Async::Promise>] Array of procs or promises
45
+ # @return The result of the first task to complete
46
+ # @example With procs
47
+ # result = AsyncUtils.await_promise_race(
48
+ # -> { sleep 1; "slow" },
49
+ # -> { sleep 0.1; "fast" }
50
+ # )
51
+ # # => "fast"
52
+ # @example With promises
53
+ # promise1 = Async::Promise.new
54
+ # promise2 = Async::Promise.new
55
+ # Thread.new { sleep 0.3; promise1.resolve("slow") }
56
+ # Thread.new { sleep 0.1; promise2.resolve("fast") }
57
+ # result = AsyncUtils.await_promise_race(promise1, promise2)
58
+ # # => "fast"
59
+ def await_promise_race: (*untyped tasks) -> untyped
60
+
61
+ private
62
+
63
+ def zip: (*untyped tasks) -> untyped
64
+
65
+ def first: (*untyped tasks) -> untyped
66
+ end
67
+ end
68
+ end
@@ -10,38 +10,45 @@ module Puppeteer
10
10
 
11
11
  attr_reader default_browser_context: BrowserContext
12
12
 
13
- # @rbs connection: Connection
14
- # @rbs launcher: BrowserLauncher?
15
- # @rbs return: Browser
13
+ # @rbs connection: Connection -- BiDi connection
14
+ # @rbs launcher: BrowserLauncher? -- Browser launcher instance
15
+ # @rbs return: Browser -- Browser instance
16
16
  def self.create: (connection: Connection, ?launcher: BrowserLauncher?) -> Browser
17
17
 
18
- # @rbs connection: Connection
19
- # @rbs launcher: BrowserLauncher?
20
- # @rbs core_browser: Core::Browser
21
- # @rbs session: Core::Session
18
+ # @rbs connection: Connection -- BiDi connection
19
+ # @rbs launcher: BrowserLauncher? -- Browser launcher instance
20
+ # @rbs core_browser: Core::Browser -- Core browser instance
21
+ # @rbs session: Core::Session -- BiDi session
22
22
  # @rbs return: void
23
23
  def initialize: (connection: Connection, launcher: BrowserLauncher?, core_browser: Core::Browser, session: Core::Session) -> void
24
24
 
25
+ type launch_options = { ?executable_path: String, ?user_data_dir: String, ?headless: bool, ?args: Array[String], ?timeout: Numeric }
26
+
25
27
  # Launch a new Firefox browser instance
26
- # @rbs **options: untyped
27
- # @rbs return: Browser
28
- def self.launch: (**untyped options) -> Browser
28
+ # @rbs **options: launch_options -- Launch options
29
+ # @rbs return: Browser -- Browser instance
30
+ def self.launch: (**launch_options options) -> Browser
31
+
32
+ # Connect to an existing Firefox browser instance
33
+ # @rbs ws_endpoint: String -- WebSocket endpoint URL
34
+ # @rbs return: Browser -- Browser instance
35
+ def self.connect: (String ws_endpoint) -> Browser
29
36
 
30
37
  # Get BiDi session status
31
- # @rbs return: untyped
38
+ # @rbs return: untyped -- Session status
32
39
  def status: () -> untyped
33
40
 
34
41
  # Create a new page (Puppeteer-like API)
35
- # @rbs return: Page
42
+ # @rbs return: Page -- New page instance
36
43
  def new_page: () -> Page
37
44
 
38
45
  # Get all pages
39
- # @rbs return: Array[Page]
46
+ # @rbs return: Array[Page] -- All pages
40
47
  def pages: () -> Array[Page]
41
48
 
42
49
  # Register event handler
43
- # @rbs event: String | Symbol
44
- # @rbs &block: (untyped) -> void
50
+ # @rbs event: String | Symbol -- Event name
51
+ # @rbs &block: (untyped) -> void -- Event handler
45
52
  # @rbs return: void
46
53
  def on: (String | Symbol event) { (untyped) -> void } -> void
47
54
 
@@ -53,10 +60,10 @@ module Puppeteer
53
60
  def closed?: () -> bool
54
61
 
55
62
  # Wait until a target (top-level browsing context) satisfies the predicate.
56
- # @rbs timeout: Integer?
57
- # @rbs &predicate: (Target) -> boolish
58
- # @rbs return: Target
59
- def wait_for_target: (?timeout: Integer?) { (Target) -> boolish } -> Target
63
+ # @rbs timeout: Integer? -- Timeout in milliseconds (default: 30000)
64
+ # @rbs &predicate: (target) -> boolish -- Predicate evaluated against each Target
65
+ # @rbs return: target -- Matching target
66
+ def wait_for_target: (?timeout: Integer?) { (target) -> boolish } -> target
60
67
 
61
68
  # Wait for browser process to exit
62
69
  # @rbs return: void
@@ -64,16 +71,16 @@ module Puppeteer
64
71
 
65
72
  private
66
73
 
67
- # @rbs &block: (Target) -> void
68
- # @rbs return: Enumerator[Target, void]
69
- def each_target: () { (Target) -> void } -> Enumerator[Target, void]
74
+ # @rbs &block: (target) -> void -- Block to yield each target to
75
+ # @rbs return: Enumerator[target, void] -- Enumerator of targets
76
+ def each_target: () { (target) -> void } -> Enumerator[target, void]
70
77
 
71
- # @rbs predicate: (Target) -> boolish
72
- # @rbs return: Target?
73
- def find_target: (Target predicate) -> Target?
78
+ # @rbs predicate: ^(target) -> boolish -- Predicate to match targets
79
+ # @rbs return: target? -- Matching target or nil
80
+ def find_target: (^(target) -> boolish predicate) -> target?
74
81
 
75
- # @rbs user_context: Core::UserContext
76
- # @rbs return: BrowserContext?
82
+ # @rbs user_context: Core::UserContext -- User context to get browser context for
83
+ # @rbs return: BrowserContext? -- Browser context or nil
77
84
  def browser_context_for: (Core::UserContext user_context) -> BrowserContext?
78
85
  end
79
86
  end
@@ -0,0 +1,39 @@
1
+ # Generated from lib/puppeteer/bidi/browser_context.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # BrowserContext represents an isolated browsing session
6
+ # This is a high-level wrapper around Core::UserContext
7
+ class BrowserContext
8
+ attr_reader user_context: Core::UserContext
9
+
10
+ attr_reader browser: Browser
11
+
12
+ # @rbs browser: Browser -- Parent browser instance
13
+ # @rbs user_context: Core::UserContext -- Associated user context
14
+ # @rbs return: void
15
+ def initialize: (Browser browser, Core::UserContext user_context) -> void
16
+
17
+ # Create a new page (tab/window)
18
+ # @rbs return: Page -- New page instance
19
+ def new_page: () -> Page
20
+
21
+ # Get all pages in this context
22
+ # @rbs return: Array[Page] -- All pages
23
+ def pages: () -> Array[Page]
24
+
25
+ # Get or create a Page for the given browsing context
26
+ # @rbs browsing_context: Core::BrowsingContext -- Browsing context
27
+ # @rbs return: Page -- Page instance
28
+ def page_for: (Core::BrowsingContext browsing_context) -> Page
29
+
30
+ # Close the browser context
31
+ # @rbs return: void
32
+ def close: () -> void
33
+
34
+ # Check if context is closed
35
+ # @rbs return: bool -- Whether the context is closed
36
+ def closed?: () -> bool
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,45 @@
1
+ # Generated from lib/puppeteer/bidi/browser_launcher.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # BrowserLauncher handles launching Firefox with BiDi support
6
+ class BrowserLauncher
7
+ class LaunchError < Error
8
+ end
9
+
10
+ attr_reader executable_path: untyped
11
+
12
+ attr_reader user_data_dir: untyped
13
+
14
+ def initialize: (?executable_path: untyped, ?user_data_dir: untyped, ?headless: untyped, ?args: untyped) -> untyped
15
+
16
+ # Launch Firefox and return BiDi WebSocket endpoint
17
+ # @return [String] WebSocket endpoint URL
18
+ def launch: () -> untyped
19
+
20
+ # Kill the Firefox process
21
+ def kill: () -> untyped
22
+
23
+ # Wait for process to exit
24
+ def wait: () -> untyped
25
+
26
+ private
27
+
28
+ def find_firefox: () -> untyped
29
+
30
+ def setup_user_data_dir: () -> untyped
31
+
32
+ def create_prefs_file: () -> untyped
33
+
34
+ def default_prefs: () -> untyped
35
+
36
+ def cleanup_temp_user_data_dir: () -> untyped
37
+
38
+ def find_available_port: () -> untyped
39
+
40
+ def build_launch_args: (untyped port) -> untyped
41
+
42
+ def wait_for_ws_endpoint: (untyped port, untyped stdout, untyped stderr, ?timeout: untyped) -> untyped
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,67 @@
1
+ # Generated from lib/puppeteer/bidi/connection.rb with RBS::Inline
2
+
3
+ module Puppeteer
4
+ module Bidi
5
+ # Connection manages BiDi protocol communication
6
+ # Handles command sending, response waiting, and event dispatching
7
+ class Connection
8
+ class TimeoutError < Error
9
+ end
10
+
11
+ class ProtocolError < Error
12
+ end
13
+
14
+ DEFAULT_TIMEOUT: Integer
15
+
16
+ # @rbs transport: Transport
17
+ # @rbs return: void
18
+ def initialize: (Transport transport) -> void
19
+
20
+ # Send a BiDi command and wait for response
21
+ # @rbs method: String
22
+ # @rbs params: Hash[String | Symbol, untyped]
23
+ # @rbs timeout: Integer
24
+ # @rbs return: Async::Task[Hash[String, untyped]]
25
+ def async_send_command: (String method, ?Hash[String | Symbol, untyped] params, ?timeout: Integer) -> Async::Task[Hash[String, untyped]]
26
+
27
+ # Subscribe to BiDi events
28
+ # @rbs event: String
29
+ # @rbs &block: (untyped) -> void
30
+ # @rbs return: void
31
+ def on: (String event) { (untyped) -> void } -> void
32
+
33
+ # Unsubscribe from BiDi events
34
+ # @rbs event: String
35
+ # @rbs &block: ((untyped) -> void)?
36
+ # @rbs return: void
37
+ def off: (String event) ?{ (?) -> untyped } -> void
38
+
39
+ # Close the connection
40
+ # @rbs return: void
41
+ def close: () -> void
42
+
43
+ # @rbs return: bool
44
+ def closed?: () -> bool
45
+
46
+ private
47
+
48
+ # @rbs return: Integer
49
+ def next_id: () -> Integer
50
+
51
+ # @rbs return: void
52
+ def setup_transport_handlers: () -> void
53
+
54
+ # @rbs message: Hash[String, untyped]
55
+ # @rbs return: void
56
+ def handle_message: (Hash[String, untyped] message) -> void
57
+
58
+ # @rbs message: Hash[String, untyped]
59
+ # @rbs return: void
60
+ def handle_response: (Hash[String, untyped] message) -> void
61
+
62
+ # @rbs message: Hash[String, untyped]
63
+ # @rbs return: void
64
+ def handle_event: (Hash[String, untyped] message) -> void
65
+ end
66
+ end
67
+ end