puppeteer-bidi 0.0.7 → 0.0.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 50cd7d1f0b4246d67ee0efc626abb598e50e2f7d043df7d76ea9616ba5c366fe
4
- data.tar.gz: cd7700bd4f70674e71e6ded417f357f84a5c0cdf2d9a6cf918db383f8c6f60d8
3
+ metadata.gz: 4d4180fa84d0b98325b3d8cddd680e4210cf40465addf4d0e12f366e95e51ba2
4
+ data.tar.gz: d6cc60b73af37fbe80bedec148ad6629d55dbf4237caf8d007cb86abcbf11839
5
5
  SHA512:
6
- metadata.gz: 7dc2fe84ec1a08a05307f72206c85eabe7fd3452e946a7820a056a13761c2c9cf1dc79e1b69b567374cf278c2c68505c9ed3c70716132f72aba462f7fbf85301
7
- data.tar.gz: 8b8586c88aba62bd88d7c0a49c770ae5be331c130616c068865a9f593e000fb820b2e928342841a28ca3d9b8550c1b124b7971a97db45f6afab80f03d5ad3993
6
+ metadata.gz: 90d9023d9a7b7c3d3c5efeba254889f913ae5569dc624102d6c0d312e3e92c33909f8e72fcb6f7c6092efac11080869376180f2c72ee750c5a014f1cb9e6a5ec
7
+ data.tar.gz: 81509cc86f61d0eeca316b69eb7b8dfec65e731df00163f5aafa0b44945630624d6c994993e27799e2c698b6b24d19f846f2247ecae7b1e0e020af069bdcc50f
@@ -92,7 +92,6 @@ module Puppeteer
92
92
 
93
93
  # Create transport and connection
94
94
  transport = Transport.new(ws_endpoint)
95
- ws_endpoint = transport.url
96
95
 
97
96
  # Start transport connection in background thread with Sync reactor
98
97
  # Sync is the preferred way to run async code at the top level
@@ -114,7 +113,6 @@ module Puppeteer
114
113
  # @rbs return: Browser -- Browser instance
115
114
  def self.connect(ws_endpoint, timeout: nil, accept_insecure_certs: false)
116
115
  transport = Transport.new(ws_endpoint)
117
- ws_endpoint = transport.url
118
116
  timeout_ms = ((timeout || 30) * 1000).to_i
119
117
  AsyncUtils.async_timeout(timeout_ms) { transport.connect }.wait
120
118
  connection = Connection.new(transport)
@@ -260,36 +258,45 @@ module Puppeteer
260
258
  # Register event handler
261
259
  # @rbs event: String | Symbol -- Event name
262
260
  # @rbs &block: (untyped) -> void -- Event handler
263
- # @rbs return: void
261
+ # @rbs return: Browser -- This browser
264
262
  def on(event, &block)
265
- return @emitter.on(event, &block) if TARGET_EVENTS.include?(event.to_sym)
266
-
267
- @connection.on(event, &block)
263
+ if TARGET_EVENTS.include?(event.to_sym)
264
+ @emitter.on(event, &block)
265
+ else
266
+ @connection.on(event, &block)
267
+ end
268
+ self
268
269
  end
269
270
 
270
271
  # Register a one-time event handler
271
272
  # @rbs event: String | Symbol -- Event name
272
273
  # @rbs &block: (untyped) -> void -- Event handler
273
- # @rbs return: void
274
+ # @rbs return: Browser -- This browser
274
275
  def once(event, &block)
275
- return @emitter.once(event, &block) if TARGET_EVENTS.include?(event.to_sym)
276
-
277
- # @type var wrapper: ^(untyped) -> void
278
- wrapper = proc do |data|
279
- @connection.off(event, &wrapper)
280
- block.call(data)
276
+ if TARGET_EVENTS.include?(event.to_sym)
277
+ @emitter.once(event, &block)
278
+ else
279
+ # @type var wrapper: ^(untyped) -> void
280
+ wrapper = proc do |data|
281
+ @connection.off(event, &wrapper)
282
+ block.call(data)
283
+ end
284
+ @connection.on(event, &wrapper)
281
285
  end
282
- @connection.on(event, &wrapper)
286
+ self
283
287
  end
284
288
 
285
289
  # Remove an event handler
286
290
  # @rbs event: String | Symbol -- Event name
287
291
  # @rbs &block: ((untyped) -> void)? -- Event handler to remove
288
- # @rbs return: void
292
+ # @rbs return: Browser -- This browser
289
293
  def off(event, &block)
290
- return @emitter.off(event, &block) if TARGET_EVENTS.include?(event.to_sym)
291
-
292
- @connection.off(event, &block)
294
+ if TARGET_EVENTS.include?(event.to_sym)
295
+ @emitter.off(event, &block)
296
+ else
297
+ @connection.off(event, &block)
298
+ end
299
+ self
293
300
  end
294
301
 
295
302
  # Close the browser
@@ -54,25 +54,28 @@ module Puppeteer
54
54
  # Register an event listener
55
55
  # @rbs event: Symbol | String -- Event name
56
56
  # @rbs &block: (untyped) -> void -- Event handler
57
- # @rbs return: void
57
+ # @rbs return: BrowserContext -- This browser context
58
58
  def on(event, &block)
59
59
  @emitter.on(event, &block)
60
+ self
60
61
  end
61
62
 
62
63
  # Register a one-time event listener
63
64
  # @rbs event: Symbol | String -- Event name
64
65
  # @rbs &block: (untyped) -> void -- Event handler
65
- # @rbs return: void
66
+ # @rbs return: BrowserContext -- This browser context
66
67
  def once(event, &block)
67
68
  @emitter.once(event, &block)
69
+ self
68
70
  end
69
71
 
70
72
  # Remove an event listener
71
73
  # @rbs event: Symbol | String -- Event name
72
74
  # @rbs &block: ((untyped) -> void)? -- Event handler to remove
73
- # @rbs return: void
75
+ # @rbs return: BrowserContext -- This browser context
74
76
  def off(event, &block)
75
77
  @emitter.off(event, &block)
78
+ self
76
79
  end
77
80
 
78
81
  # Create a new page (tab/window)
@@ -50,7 +50,7 @@ module Puppeteer
50
50
  raise LaunchError, 'Failed to get BiDi WebSocket endpoint'
51
51
  end
52
52
 
53
- @ws_endpoint
53
+ @ws_endpoint = "#{@ws_endpoint}/session"
54
54
  rescue => e
55
55
  kill
56
56
  raise LaunchError, "Failed to launch Firefox: #{e.message}"
@@ -84,33 +84,38 @@ module Puppeteer
84
84
  raise ProtocolError, "Protocol Error. Unexpected BiDi message type: #{result['type'].inspect}"
85
85
  end
86
86
  rescue Async::TimeoutError
87
- @pending_commands.delete(id)
88
87
  raise TimeoutError, "Timeout waiting for #{method} (#{timeout}ms)"
89
88
  end
89
+ ensure
90
+ # A send that raises, an encoding failure for instance, would otherwise leave
91
+ # the command and its promise pending for the life of the connection.
92
+ @pending_commands.delete(id)
90
93
  end
91
94
  end
92
95
 
93
96
  # Subscribe to BiDi events
94
97
  # @rbs event: String
95
98
  # @rbs &block: (untyped) -> void
96
- # @rbs return: void
99
+ # @rbs return: Connection -- This connection
97
100
  def on(event, &block)
98
101
  @event_listeners[event] ||= []
99
102
  @event_listeners[event] << block
103
+ self
100
104
  end
101
105
 
102
106
  # Unsubscribe from BiDi events
103
107
  # @rbs event: String
104
108
  # @rbs &block: ((untyped) -> void)?
105
- # @rbs return: void
109
+ # @rbs return: Connection -- This connection
106
110
  def off(event, &block)
107
- return unless @event_listeners[event]
111
+ return self unless @event_listeners[event]
108
112
 
109
113
  if block
110
114
  @event_listeners[event].delete(block)
111
115
  else
112
116
  @event_listeners.delete(event)
113
117
  end
118
+ self
114
119
  end
115
120
 
116
121
  # Close the connection
@@ -16,29 +16,33 @@ module Puppeteer
16
16
  # Register an event listener
17
17
  # @rbs event: Symbol | String -- Event name
18
18
  # @rbs &block: (untyped) -> void -- Event handler
19
- # @rbs return: void
19
+ # @rbs return: EventEmitter -- This event emitter
20
20
  def on(event, &block)
21
- return if @disposed
21
+ return self if @disposed
22
+
22
23
  @listeners[event.to_sym] << block
24
+ self
23
25
  end
24
26
 
25
27
  # Register a one-time event listener
26
28
  # @rbs event: Symbol | String -- Event name
27
29
  # @rbs &block: (untyped) -> void -- Event handler
28
- # @rbs return: void
30
+ # @rbs return: EventEmitter -- This event emitter
29
31
  def once(event, &block)
30
- return if @disposed
32
+ return self if @disposed
33
+
31
34
  wrapper = lambda do |*args|
32
35
  off(event, &wrapper)
33
36
  block.call(*args)
34
37
  end
35
38
  on(event, &wrapper)
39
+ self
36
40
  end
37
41
 
38
42
  # Remove an event listener
39
43
  # @rbs event: Symbol | String -- Event name
40
44
  # @rbs &block: ((untyped) -> void)? -- Event handler to remove
41
- # @rbs return: void
45
+ # @rbs return: EventEmitter -- This event emitter
42
46
  def off(event, &block)
43
47
  event_sym = event.to_sym
44
48
  if block
@@ -46,6 +50,7 @@ module Puppeteer
46
50
  else
47
51
  @listeners.delete(event_sym)
48
52
  end
53
+ self
49
54
  end
50
55
 
51
56
  # Remove all listeners for an event or all events
@@ -94,34 +94,26 @@ module Puppeteer
94
94
  # Register an event listener
95
95
  # @rbs event: Symbol | String -- Event name
96
96
  # @rbs &block: (untyped) -> void -- Event handler
97
- # @rbs return: void
97
+ # @rbs return: Page -- This page
98
98
  def on(event, &block)
99
- return @emitter.on(event, &block) unless event.to_sym == :request
100
-
101
- wrapper = @request_handlers[block]
102
- unless wrapper
103
- wrapper = lambda do |request|
104
- request.enqueue_intercept_action do
105
- block.call(request)
106
- end
107
- end
108
- @request_handlers[block] = wrapper
109
- end
110
- @emitter.on(event, &wrapper)
99
+ listener = event.to_sym == :request ? request_listener_for(block) : block
100
+ @emitter.on(event, &listener)
101
+ self
111
102
  end
112
103
 
113
104
  # Register a one-time event listener
114
105
  # @rbs event: Symbol | String -- Event name
115
106
  # @rbs &block: (untyped) -> void -- Event handler
116
- # @rbs return: void
107
+ # @rbs return: Page -- This page
117
108
  def once(event, &block)
118
109
  @emitter.once(event, &block)
110
+ self
119
111
  end
120
112
 
121
113
  # Remove an event listener
122
114
  # @rbs event: Symbol | String -- Event name
123
115
  # @rbs &block: (untyped) -> void -- Event handler to remove
124
- # @rbs return: void
116
+ # @rbs return: Page -- This page
125
117
  def off(event, &block)
126
118
  if event.to_sym == :request && block
127
119
  # WeakMap#delete was added in Ruby 3.3, so we need to handle older versions
@@ -130,10 +122,11 @@ module Puppeteer
130
122
  else
131
123
  @request_handlers[block]
132
124
  end
133
- return @emitter.off(event, &(wrapper || block))
125
+ @emitter.off(event, &(wrapper || block))
126
+ else
127
+ @emitter.off(event, &block)
134
128
  end
135
-
136
- @emitter.off(event, &block)
129
+ self
137
130
  end
138
131
 
139
132
  # Emit an event to all registered listeners
@@ -1375,6 +1368,14 @@ module Puppeteer
1375
1368
 
1376
1369
  private
1377
1370
 
1371
+ def request_listener_for(listener)
1372
+ @request_handlers[listener] ||= lambda do |request|
1373
+ request.enqueue_intercept_action do
1374
+ listener.call(request)
1375
+ end
1376
+ end
1377
+ end
1378
+
1378
1379
  # Navigate history by delta.
1379
1380
  #
1380
1381
  # In Firefox, BFCache restores may emit `browsingContext.navigationStarted`
@@ -5,7 +5,6 @@ require 'async'
5
5
  require 'async/websocket/client'
6
6
  require 'async/http/endpoint'
7
7
  require 'json'
8
- require 'uri'
9
8
 
10
9
  module Puppeteer
11
10
  module Bidi
@@ -17,8 +16,7 @@ module Puppeteer
17
16
  attr_reader :url
18
17
 
19
18
  def initialize(url)
20
- # BiDi WebSocket endpoint requires /session path
21
- @url = url.end_with?('/session') ? url : "#{url}/session"
19
+ @url = url
22
20
  @endpoint = nil
23
21
  @connection = nil
24
22
  @task = nil
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Puppeteer
4
4
  module Bidi
5
- VERSION = "0.0.7"
5
+ VERSION = "0.0.8"
6
6
  REF_PUPPETEER_VERSION = "25.5.0"
7
7
  end
8
8
  end
@@ -119,20 +119,20 @@ module Puppeteer
119
119
  # Register event handler
120
120
  # @rbs event: String | Symbol -- Event name
121
121
  # @rbs &block: (untyped) -> void -- Event handler
122
- # @rbs return: void
123
- def on: (String | Symbol event) { (untyped) -> void } -> void
122
+ # @rbs return: Browser -- This browser
123
+ def on: (String | Symbol event) { (untyped) -> void } -> Browser
124
124
 
125
125
  # Register a one-time event handler
126
126
  # @rbs event: String | Symbol -- Event name
127
127
  # @rbs &block: (untyped) -> void -- Event handler
128
- # @rbs return: void
129
- def once: (String | Symbol event) { (untyped) -> void } -> void
128
+ # @rbs return: Browser -- This browser
129
+ def once: (String | Symbol event) { (untyped) -> void } -> Browser
130
130
 
131
131
  # Remove an event handler
132
132
  # @rbs event: String | Symbol -- Event name
133
133
  # @rbs &block: ((untyped) -> void)? -- Event handler to remove
134
- # @rbs return: void
135
- def off: (String | Symbol event) ?{ (?) -> untyped } -> void
134
+ # @rbs return: Browser -- This browser
135
+ def off: (String | Symbol event) ?{ (?) -> untyped } -> Browser
136
136
 
137
137
  # Close the browser
138
138
  # @rbs return: void
@@ -21,20 +21,20 @@ module Puppeteer
21
21
  # Register an event listener
22
22
  # @rbs event: Symbol | String -- Event name
23
23
  # @rbs &block: (untyped) -> void -- Event handler
24
- # @rbs return: void
25
- def on: (Symbol | String event) { (untyped) -> void } -> void
24
+ # @rbs return: BrowserContext -- This browser context
25
+ def on: (Symbol | String event) { (untyped) -> void } -> BrowserContext
26
26
 
27
27
  # Register a one-time event listener
28
28
  # @rbs event: Symbol | String -- Event name
29
29
  # @rbs &block: (untyped) -> void -- Event handler
30
- # @rbs return: void
31
- def once: (Symbol | String event) { (untyped) -> void } -> void
30
+ # @rbs return: BrowserContext -- This browser context
31
+ def once: (Symbol | String event) { (untyped) -> void } -> BrowserContext
32
32
 
33
33
  # Remove an event listener
34
34
  # @rbs event: Symbol | String -- Event name
35
35
  # @rbs &block: ((untyped) -> void)? -- Event handler to remove
36
- # @rbs return: void
37
- def off: (Symbol | String event) ?{ (?) -> untyped } -> void
36
+ # @rbs return: BrowserContext -- This browser context
37
+ def off: (Symbol | String event) ?{ (?) -> untyped } -> BrowserContext
38
38
 
39
39
  # Create a new page (tab/window)
40
40
  # @rbs background: bool? -- Whether to open the page in background
@@ -27,14 +27,14 @@ module Puppeteer
27
27
  # Subscribe to BiDi events
28
28
  # @rbs event: String
29
29
  # @rbs &block: (untyped) -> void
30
- # @rbs return: void
31
- def on: (String event) { (untyped) -> void } -> void
30
+ # @rbs return: Connection -- This connection
31
+ def on: (String event) { (untyped) -> void } -> Connection
32
32
 
33
33
  # Unsubscribe from BiDi events
34
34
  # @rbs event: String
35
35
  # @rbs &block: ((untyped) -> void)?
36
- # @rbs return: void
37
- def off: (String event) ?{ (?) -> untyped } -> void
36
+ # @rbs return: Connection -- This connection
37
+ def off: (String event) ?{ (?) -> untyped } -> Connection
38
38
 
39
39
  # Close the connection
40
40
  # @rbs return: void
@@ -12,20 +12,20 @@ module Puppeteer
12
12
  # Register an event listener
13
13
  # @rbs event: Symbol | String -- Event name
14
14
  # @rbs &block: (untyped) -> void -- Event handler
15
- # @rbs return: void
16
- def on: (Symbol | String event) { (untyped) -> void } -> void
15
+ # @rbs return: EventEmitter -- This event emitter
16
+ def on: (Symbol | String event) { (untyped) -> void } -> EventEmitter
17
17
 
18
18
  # Register a one-time event listener
19
19
  # @rbs event: Symbol | String -- Event name
20
20
  # @rbs &block: (untyped) -> void -- Event handler
21
- # @rbs return: void
22
- def once: (Symbol | String event) { (untyped) -> void } -> void
21
+ # @rbs return: EventEmitter -- This event emitter
22
+ def once: (Symbol | String event) { (untyped) -> void } -> EventEmitter
23
23
 
24
24
  # Remove an event listener
25
25
  # @rbs event: Symbol | String -- Event name
26
26
  # @rbs &block: ((untyped) -> void)? -- Event handler to remove
27
- # @rbs return: void
28
- def off: (Symbol | String event) ?{ (?) -> untyped } -> void
27
+ # @rbs return: EventEmitter -- This event emitter
28
+ def off: (Symbol | String event) ?{ (?) -> untyped } -> EventEmitter
29
29
 
30
30
  # Remove all listeners for an event or all events
31
31
  # @rbs event: (Symbol | String)? -- Event name
@@ -23,20 +23,20 @@ module Puppeteer
23
23
  # Register an event listener
24
24
  # @rbs event: Symbol | String -- Event name
25
25
  # @rbs &block: (untyped) -> void -- Event handler
26
- # @rbs return: void
27
- def on: (Symbol | String event) { (untyped) -> void } -> void
26
+ # @rbs return: Page -- This page
27
+ def on: (Symbol | String event) { (untyped) -> void } -> Page
28
28
 
29
29
  # Register a one-time event listener
30
30
  # @rbs event: Symbol | String -- Event name
31
31
  # @rbs &block: (untyped) -> void -- Event handler
32
- # @rbs return: void
33
- def once: (Symbol | String event) { (untyped) -> void } -> void
32
+ # @rbs return: Page -- This page
33
+ def once: (Symbol | String event) { (untyped) -> void } -> Page
34
34
 
35
35
  # Remove an event listener
36
36
  # @rbs event: Symbol | String -- Event name
37
37
  # @rbs &block: (untyped) -> void -- Event handler to remove
38
- # @rbs return: void
39
- def off: (Symbol | String event) { (untyped) -> void } -> void
38
+ # @rbs return: Page -- This page
39
+ def off: (Symbol | String event) { (untyped) -> void } -> Page
40
40
 
41
41
  # Emit an event to all registered listeners
42
42
  # @rbs event: Symbol | String -- Event name
@@ -429,6 +429,8 @@ module Puppeteer
429
429
 
430
430
  private
431
431
 
432
+ def request_listener_for: (untyped listener) -> untyped
433
+
432
434
  # Navigate history by delta.
433
435
  #
434
436
  # In Firefox, BFCache restores may emit `browsingContext.navigationStarted`
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppeteer-bidi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki