puppeteer-bidi 0.0.1.beta10 → 0.0.1
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 +4 -4
- data/AGENTS.md +44 -0
- data/API_COVERAGE.md +345 -0
- data/CLAUDE/porting_puppeteer.md +20 -0
- data/CLAUDE.md +2 -1
- data/DEVELOPMENT.md +14 -0
- data/README.md +47 -415
- data/development/generate_api_coverage.rb +411 -0
- data/development/puppeteer_revision.txt +1 -0
- data/lib/puppeteer/bidi/browser.rb +118 -22
- data/lib/puppeteer/bidi/browser_context.rb +185 -2
- data/lib/puppeteer/bidi/connection.rb +16 -5
- data/lib/puppeteer/bidi/cookie_utils.rb +192 -0
- data/lib/puppeteer/bidi/core/browsing_context.rb +83 -40
- data/lib/puppeteer/bidi/core/realm.rb +6 -0
- data/lib/puppeteer/bidi/core/request.rb +79 -35
- data/lib/puppeteer/bidi/core/user_context.rb +5 -3
- data/lib/puppeteer/bidi/element_handle.rb +200 -8
- data/lib/puppeteer/bidi/errors.rb +4 -0
- data/lib/puppeteer/bidi/frame.rb +115 -11
- data/lib/puppeteer/bidi/http_request.rb +577 -0
- data/lib/puppeteer/bidi/http_response.rb +161 -10
- data/lib/puppeteer/bidi/locator.rb +792 -0
- data/lib/puppeteer/bidi/page.rb +859 -7
- data/lib/puppeteer/bidi/query_handler.rb +1 -1
- data/lib/puppeteer/bidi/version.rb +1 -1
- data/lib/puppeteer/bidi.rb +39 -6
- data/sig/puppeteer/bidi/browser.rbs +53 -6
- data/sig/puppeteer/bidi/browser_context.rbs +36 -0
- data/sig/puppeteer/bidi/cookie_utils.rbs +64 -0
- data/sig/puppeteer/bidi/core/browsing_context.rbs +16 -6
- data/sig/puppeteer/bidi/core/request.rbs +14 -11
- data/sig/puppeteer/bidi/core/user_context.rbs +2 -2
- data/sig/puppeteer/bidi/element_handle.rbs +28 -0
- data/sig/puppeteer/bidi/errors.rbs +4 -0
- data/sig/puppeteer/bidi/frame.rbs +17 -0
- data/sig/puppeteer/bidi/http_request.rbs +162 -0
- data/sig/puppeteer/bidi/http_response.rbs +67 -8
- data/sig/puppeteer/bidi/locator.rbs +267 -0
- data/sig/puppeteer/bidi/page.rbs +170 -0
- data/sig/puppeteer/bidi.rbs +15 -3
- metadata +12 -1
|
@@ -1,23 +1,174 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
# rbs_inline: enabled
|
|
3
3
|
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
4
6
|
module Puppeteer
|
|
5
7
|
module Bidi
|
|
6
|
-
# HTTPResponse represents a response to an HTTP request
|
|
8
|
+
# HTTPResponse represents a response to an HTTP request.
|
|
7
9
|
class HTTPResponse
|
|
8
|
-
|
|
10
|
+
# @rbs data: Hash[String, untyped] -- BiDi response data
|
|
11
|
+
# @rbs request: HTTPRequest -- Associated request
|
|
12
|
+
# @rbs return: HTTPResponse
|
|
13
|
+
def self.from(data, request)
|
|
14
|
+
existing = request.response
|
|
15
|
+
if existing
|
|
16
|
+
existing.send(:update_data, data)
|
|
17
|
+
return existing
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
response = new(data: data, request: request)
|
|
21
|
+
response.send(:initialize_response)
|
|
22
|
+
response
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# Create a synthetic response for BFCache restoration
|
|
26
|
+
# @rbs url: String -- Response URL
|
|
27
|
+
# @rbs status: Integer -- HTTP status code
|
|
28
|
+
# @rbs return: HTTPResponse
|
|
29
|
+
def self.for_bfcache(url:, status: 200)
|
|
30
|
+
data = {
|
|
31
|
+
"url" => url,
|
|
32
|
+
"status" => status,
|
|
33
|
+
"statusText" => "OK",
|
|
34
|
+
"headers" => [],
|
|
35
|
+
"fromCache" => true
|
|
36
|
+
}
|
|
37
|
+
new(data: data, request: nil)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
attr_reader :request
|
|
9
41
|
|
|
10
|
-
# @
|
|
11
|
-
# @
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@
|
|
42
|
+
# @rbs data: Hash[String, untyped] -- BiDi response data
|
|
43
|
+
# @rbs request: HTTPRequest? -- Associated request (nil for BFCache)
|
|
44
|
+
# @rbs return: void
|
|
45
|
+
def initialize(data:, request:)
|
|
46
|
+
@data = data
|
|
47
|
+
@request = request
|
|
15
48
|
end
|
|
16
49
|
|
|
17
|
-
#
|
|
18
|
-
|
|
50
|
+
# @rbs return: Hash[Symbol, untyped]
|
|
51
|
+
def remote_address
|
|
52
|
+
{ ip: "", port: -1 }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# @rbs return: String
|
|
56
|
+
def url
|
|
57
|
+
@data["url"]
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# @rbs return: Integer
|
|
61
|
+
def status
|
|
62
|
+
@data["status"]
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# @rbs return: String
|
|
66
|
+
def status_text
|
|
67
|
+
@data["statusText"]
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @rbs return: Hash[String, String]
|
|
71
|
+
def headers
|
|
72
|
+
headers = {}
|
|
73
|
+
(@data["headers"] || []).each do |header|
|
|
74
|
+
value = header["value"]
|
|
75
|
+
next unless value.is_a?(Hash)
|
|
76
|
+
next unless value["type"] == "string"
|
|
77
|
+
|
|
78
|
+
headers[header["name"].to_s.downcase] = value["value"]
|
|
79
|
+
end
|
|
80
|
+
headers
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
# @rbs return: bool
|
|
19
84
|
def ok?
|
|
20
|
-
|
|
85
|
+
current_status = status
|
|
86
|
+
current_status == 0 || (current_status >= 200 && current_status <= 299)
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# @rbs return: Hash[String, untyped]?
|
|
90
|
+
def security_details
|
|
91
|
+
nil
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# @rbs return: Hash[String, Numeric]?
|
|
95
|
+
def timing
|
|
96
|
+
bidi_timing = @request.timing
|
|
97
|
+
return nil if bidi_timing.nil? || bidi_timing.empty?
|
|
98
|
+
|
|
99
|
+
{
|
|
100
|
+
"requestTime" => bidi_timing["requestTime"],
|
|
101
|
+
"proxyStart" => -1,
|
|
102
|
+
"proxyEnd" => -1,
|
|
103
|
+
"dnsStart" => bidi_timing["dnsStart"],
|
|
104
|
+
"dnsEnd" => bidi_timing["dnsEnd"],
|
|
105
|
+
"connectStart" => bidi_timing["connectStart"],
|
|
106
|
+
"connectEnd" => bidi_timing["connectEnd"],
|
|
107
|
+
"sslStart" => bidi_timing["tlsStart"],
|
|
108
|
+
"sslEnd" => -1,
|
|
109
|
+
"workerStart" => -1,
|
|
110
|
+
"workerReady" => -1,
|
|
111
|
+
"workerFetchStart" => -1,
|
|
112
|
+
"workerRespondWithSettled" => -1,
|
|
113
|
+
"workerRouterEvaluationStart" => -1,
|
|
114
|
+
"workerCacheLookupStart" => -1,
|
|
115
|
+
"sendStart" => bidi_timing["requestStart"],
|
|
116
|
+
"sendEnd" => -1,
|
|
117
|
+
"pushStart" => -1,
|
|
118
|
+
"pushEnd" => -1,
|
|
119
|
+
"receiveHeadersStart" => bidi_timing["responseStart"],
|
|
120
|
+
"receiveHeadersEnd" => bidi_timing["responseEnd"],
|
|
121
|
+
}
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
# @rbs return: String
|
|
125
|
+
def content
|
|
126
|
+
@request.get_response_content
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
# @rbs return: String
|
|
130
|
+
def buffer
|
|
131
|
+
content
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# @rbs return: String
|
|
135
|
+
def text
|
|
136
|
+
content.dup.force_encoding("UTF-8")
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# @rbs return: untyped
|
|
140
|
+
def json
|
|
141
|
+
JSON.parse(text)
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# @rbs return: bool
|
|
145
|
+
def from_cache?
|
|
146
|
+
@data["fromCache"] == true
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# @rbs return: bool
|
|
150
|
+
def from_service_worker?
|
|
151
|
+
false
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# @rbs return: Frame?
|
|
155
|
+
def frame
|
|
156
|
+
@request.frame
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
private
|
|
160
|
+
|
|
161
|
+
def initialize_response
|
|
162
|
+
if from_cache?
|
|
163
|
+
@request.instance_variable_set(:@from_memory_cache, true)
|
|
164
|
+
@request.frame.page.emit(:requestservedfromcache, @request)
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
@request.frame.page.emit(:response, self)
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def update_data(data)
|
|
171
|
+
@data = data
|
|
21
172
|
end
|
|
22
173
|
end
|
|
23
174
|
end
|